[{"data":1,"prerenderedAt":173040},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch9-isaaclab-fang-zhen-tuo-zhan":3,"wiki-doc-nav":50},{"id":4,"title":5,"body":6,"description":42,"extension":43,"meta":44,"navigation":45,"path":46,"seo":47,"stem":48,"__hash__":49},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":8,"toc":38},"minimark",[9,14,18,26,29,35],[10,11,13],"h1",{"id":12},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[15,16,17],"p",{},"项目地址：",[15,19,20],{},[21,22,23],"a",{"href":23,"rel":24},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25],"nofollow",[15,27,28],{},"参考教程：",[15,30,31],{},[21,32,33],{"href":33,"rel":34},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25],[15,36,37],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":39,"searchDepth":40,"depth":40,"links":41},"",2,[],null,"md",{},true,"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":5,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",[51,5167,6275,7695,10684,12035,13524,14613,23376,23388,23986,24012,24136,24377,24442,24460,24473,24520,24644,24813,25012,25192,25397,25533,25628,25653,25666,25976,26717,27425,27446,28466,30097,30248,30261,30273,30574,50386,50401,50418,50451,53323,76671,92816,92837,92950,93071,93841,94504,94865,94903,95009,95109,95152,95178,95239,96893,96994,97019,97510,98010,99090,99373,100115,100617,100629,102645,104309,105812,107510,109427,111346,113368,116838,117270,117733,118482,121426,121774,121796,122152,125459,125471,125874,125897,126044,126211,126416,126717,127274,127931,129862,131460,132109,133603,135034,136269,137963,139715,142125,142241,143176,143387,144272,145507,145735,145748,146903,149315,151683,155004,157481,159125,160902,162915,165967,168147,170674,172868],{"id":52,"title":53,"body":54,"description":39,"extension":43,"meta":5162,"navigation":45,"path":5163,"seo":5164,"stem":5165,"__hash__":5166},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":55,"toc":5134},[56,59,64,67,71,84,88,93,96,99,102,105,108,143,147,150,153,156,159,212,216,235,237,251,254,262,265,1127,1134,1151,1155,1246,1250,1256,1345,1349,1387,1391,1455,1459,1463,1470,1481,1485,1490,1494,1499,1503,1508,1512,1516,1521,1791,1796,1934,1939,2196,2199,2207,2211,2216,2319,2322,2628,2637,2738,2741,2744,2747,2750,3010,3015,3155,3158,3337,3340,3468,3471,3623,3627,3632,3635,3646,3654,3657,3764,3768,3772,3777,3827,3832,3837,3861,3866,3919,3922,3927,4104,4109,4394,4399,4796,4800,4805,4862,4867,4875,4878,5018,5021,5130],[10,57,53],{"id":58},"_1基础入门",[60,61,63],"h2",{"id":62},"_11注释","1.1注释",[15,65,66],{},"\u002F\u002F或者\u002F* *\u002F",[60,68,70],{"id":69},"_12命名","1.2命名",[72,73,74,78,81],"ol",{},[75,76,77],"li",{},"字母数字下划线",[75,79,80],{},"开头必须是字母或_",[75,82,83],{},"不能使用关键词",[60,85,87],{"id":86},"_13数据类型","1.3数据类型",[89,90,92],"h3",{"id":91},"_131整形","1.3.1整形",[15,94,95],{},"short 短整形 2",[15,97,98],{},"int 整形 4",[15,100,101],{},"long 长整形 win4 linux32位4 linux64位8",[15,103,104],{},"long long 长长整形 8",[15,106,107],{},"利用sizeof可以求数据类型占用的内存空间大小",[109,110,114],"pre",{"className":111,"code":112,"language":113,"meta":39,"style":39},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[115,116,117,136],"code",{"__ignoreMap":39},[118,119,122,126,130,133],"span",{"class":120,"line":121},"line",1,[118,123,125],{"class":124},"szBVR","sizeof",[118,127,129],{"class":128},"sVt8B","(",[118,131,132],{"class":124},"int",[118,134,135],{"class":128},")\n",[118,137,138,140],{"class":120,"line":40},[118,139,125],{"class":124},[118,141,142],{"class":128},"(num)\n",[89,144,146],{"id":145},"_132浮点型","1.3.2浮点型",[15,148,149],{},"float 单精度 4节 7位有效数字",[15,151,152],{},"double 双精度 8节 15-16有效数字",[15,154,155],{},"默认情况下，输出一个小数，会显示6位有效数字",[15,157,158],{},"注意点：",[109,160,162],{"className":111,"code":161,"language":113,"meta":39,"style":39},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[115,163,164,189],{"__ignoreMap":39},[118,165,166,169,172,175,179,182,185],{"class":120,"line":121},[118,167,168],{"class":124},"float",[118,170,171],{"class":128}," f1",[118,173,174],{"class":124},"=",[118,176,178],{"class":177},"sj4cs","3.14",[118,180,181],{"class":124},"f",[118,183,184],{"class":128},";",[118,186,188],{"class":187},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[118,190,191,193,196,198,201,204,207,209],{"class":120,"line":40},[118,192,168],{"class":124},[118,194,195],{"class":128}," f2",[118,197,174],{"class":124},[118,199,200],{"class":177},"3",[118,202,203],{"class":124},"e",[118,205,206],{"class":177},"2",[118,208,184],{"class":128},[118,210,211],{"class":187}," \u002F\u002F科学记数法\n",[89,213,215],{"id":214},"_133字符型","1.3.3字符型",[109,217,219],{"className":111,"code":218,"language":113,"meta":39,"style":39},"char ch='a'\n",[115,220,221],{"__ignoreMap":39},[118,222,223,226,229,231],{"class":120,"line":121},[118,224,225],{"class":124},"char",[118,227,228],{"class":128}," ch",[118,230,174],{"class":124},[118,232,234],{"class":233},"sZZnC","'a'\n",[15,236,158],{},[72,238,239,242,245,248],{},[75,240,241],{},"在显示字符型变量时，只能单引号，双引号x",[75,243,244],{},"单引号内只能一个字符，不能字符串",[75,246,247],{},"c和c++字符型变量只占用一个字符",[75,249,250],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[15,252,253],{},"ASCII码大致由以下两部分组成：",[72,255,256,259],{},[75,257,258],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[75,260,261],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[15,263,264],{},"ASCII码表格：",[266,267,268,312],"table",{},[269,270,271],"thead",{},[272,273,274,282,287,291,296,300,304,308],"tr",{},[275,276,277,281],"th",{},[278,279,280],"strong",{},"ASCII","值",[275,283,284],{},[278,285,286],{},"控制字符",[275,288,289,281],{},[278,290,280],{},[275,292,293],{},[278,294,295],{},"字符",[275,297,298,281],{},[278,299,280],{},[275,301,302],{},[278,303,295],{},[275,305,306,281],{},[278,307,280],{},[275,309,310],{},[278,311,295],{},[313,314,315,342,367,392,417,443,468,493,519,544,570,596,622,647,673,699,725,749,774,799,824,849,874,899,924,949,974,1000,1025,1050,1075,1101],"tbody",{},[272,316,317,321,324,327,330,333,336,339],{},[318,319,320],"td",{},"0",[318,322,323],{},"NUT",[318,325,326],{},"32",[318,328,329],{},"(space)",[318,331,332],{},"64",[318,334,335],{},"@",[318,337,338],{},"96",[318,340,341],{},"、",[272,343,344,347,350,353,356,359,362,365],{},[318,345,346],{},"1",[318,348,349],{},"SOH",[318,351,352],{},"33",[318,354,355],{},"!",[318,357,358],{},"65",[318,360,361],{},"A",[318,363,364],{},"97",[318,366,21],{},[272,368,369,371,374,377,380,383,386,389],{},[318,370,206],{},[318,372,373],{},"STX",[318,375,376],{},"34",[318,378,379],{},"\"",[318,381,382],{},"66",[318,384,385],{},"B",[318,387,388],{},"98",[318,390,391],{},"b",[272,393,394,396,399,402,405,408,411,414],{},[318,395,200],{},[318,397,398],{},"ETX",[318,400,401],{},"35",[318,403,404],{},"#",[318,406,407],{},"67",[318,409,410],{},"C",[318,412,413],{},"99",[318,415,416],{},"c",[272,418,419,422,425,428,431,434,437,440],{},[318,420,421],{},"4",[318,423,424],{},"EOT",[318,426,427],{},"36",[318,429,430],{},"$",[318,432,433],{},"68",[318,435,436],{},"D",[318,438,439],{},"100",[318,441,442],{},"d",[272,444,445,448,451,454,457,460,463,466],{},[318,446,447],{},"5",[318,449,450],{},"ENQ",[318,452,453],{},"37",[318,455,456],{},"%",[318,458,459],{},"69",[318,461,462],{},"E",[318,464,465],{},"101",[318,467,203],{},[272,469,470,473,476,479,482,485,488,491],{},[318,471,472],{},"6",[318,474,475],{},"ACK",[318,477,478],{},"38",[318,480,481],{},"&",[318,483,484],{},"70",[318,486,487],{},"F",[318,489,490],{},"102",[318,492,181],{},[272,494,495,498,501,504,507,510,513,516],{},[318,496,497],{},"7",[318,499,500],{},"BEL",[318,502,503],{},"39",[318,505,506],{},",",[318,508,509],{},"71",[318,511,512],{},"G",[318,514,515],{},"103",[318,517,518],{},"g",[272,520,521,524,527,530,532,535,538,541],{},[318,522,523],{},"8",[318,525,526],{},"BS",[318,528,529],{},"40",[318,531,129],{},[318,533,534],{},"72",[318,536,537],{},"H",[318,539,540],{},"104",[318,542,543],{},"h",[272,545,546,549,552,555,558,561,564,567],{},[318,547,548],{},"9",[318,550,551],{},"HT",[318,553,554],{},"41",[318,556,557],{},")",[318,559,560],{},"73",[318,562,563],{},"I",[318,565,566],{},"105",[318,568,569],{},"i",[272,571,572,575,578,581,584,587,590,593],{},[318,573,574],{},"10",[318,576,577],{},"LF",[318,579,580],{},"42",[318,582,583],{},"*",[318,585,586],{},"74",[318,588,589],{},"J",[318,591,592],{},"106",[318,594,595],{},"j",[272,597,598,601,604,607,610,613,616,619],{},[318,599,600],{},"11",[318,602,603],{},"VT",[318,605,606],{},"43",[318,608,609],{},"+",[318,611,612],{},"75",[318,614,615],{},"K",[318,617,618],{},"107",[318,620,621],{},"k",[272,623,624,627,630,633,635,638,641,644],{},[318,625,626],{},"12",[318,628,629],{},"FF",[318,631,632],{},"44",[318,634,506],{},[318,636,637],{},"76",[318,639,640],{},"L",[318,642,643],{},"108",[318,645,646],{},"l",[272,648,649,652,655,658,661,664,667,670],{},[318,650,651],{},"13",[318,653,654],{},"CR",[318,656,657],{},"45",[318,659,660],{},"-",[318,662,663],{},"77",[318,665,666],{},"M",[318,668,669],{},"109",[318,671,672],{},"m",[272,674,675,678,681,684,687,690,693,696],{},[318,676,677],{},"14",[318,679,680],{},"SO",[318,682,683],{},"46",[318,685,686],{},".",[318,688,689],{},"78",[318,691,692],{},"N",[318,694,695],{},"110",[318,697,698],{},"n",[272,700,701,704,707,710,713,716,719,722],{},[318,702,703],{},"15",[318,705,706],{},"SI",[318,708,709],{},"47",[318,711,712],{},"\u002F",[318,714,715],{},"79",[318,717,718],{},"O",[318,720,721],{},"111",[318,723,724],{},"o",[272,726,727,730,733,736,738,741,744,747],{},[318,728,729],{},"16",[318,731,732],{},"DLE",[318,734,735],{},"48",[318,737,320],{},[318,739,740],{},"80",[318,742,743],{},"P",[318,745,746],{},"112",[318,748,15],{},[272,750,751,754,757,760,762,765,768,771],{},[318,752,753],{},"17",[318,755,756],{},"DCI",[318,758,759],{},"49",[318,761,346],{},[318,763,764],{},"81",[318,766,767],{},"Q",[318,769,770],{},"113",[318,772,773],{},"q",[272,775,776,779,782,785,787,790,793,796],{},[318,777,778],{},"18",[318,780,781],{},"DC2",[318,783,784],{},"50",[318,786,206],{},[318,788,789],{},"82",[318,791,792],{},"R",[318,794,795],{},"114",[318,797,798],{},"r",[272,800,801,804,807,810,812,815,818,821],{},[318,802,803],{},"19",[318,805,806],{},"DC3",[318,808,809],{},"51",[318,811,200],{},[318,813,814],{},"83",[318,816,817],{},"S",[318,819,820],{},"115",[318,822,823],{},"s",[272,825,826,829,832,835,837,840,843,846],{},[318,827,828],{},"20",[318,830,831],{},"DC4",[318,833,834],{},"52",[318,836,421],{},[318,838,839],{},"84",[318,841,842],{},"T",[318,844,845],{},"116",[318,847,848],{},"t",[272,850,851,854,857,860,862,865,868,871],{},[318,852,853],{},"21",[318,855,856],{},"NAK",[318,858,859],{},"53",[318,861,447],{},[318,863,864],{},"85",[318,866,867],{},"U",[318,869,870],{},"117",[318,872,873],{},"u",[272,875,876,879,882,885,887,890,893,896],{},[318,877,878],{},"22",[318,880,881],{},"SYN",[318,883,884],{},"54",[318,886,472],{},[318,888,889],{},"86",[318,891,892],{},"V",[318,894,895],{},"118",[318,897,898],{},"v",[272,900,901,904,907,910,912,915,918,921],{},[318,902,903],{},"23",[318,905,906],{},"TB",[318,908,909],{},"55",[318,911,497],{},[318,913,914],{},"87",[318,916,917],{},"W",[318,919,920],{},"119",[318,922,923],{},"w",[272,925,926,929,932,935,937,940,943,946],{},[318,927,928],{},"24",[318,930,931],{},"CAN",[318,933,934],{},"56",[318,936,523],{},[318,938,939],{},"88",[318,941,942],{},"X",[318,944,945],{},"120",[318,947,948],{},"x",[272,950,951,954,957,960,962,965,968,971],{},[318,952,953],{},"25",[318,955,956],{},"EM",[318,958,959],{},"57",[318,961,548],{},[318,963,964],{},"89",[318,966,967],{},"Y",[318,969,970],{},"121",[318,972,973],{},"y",[272,975,976,979,982,985,988,991,994,997],{},[318,977,978],{},"26",[318,980,981],{},"SUB",[318,983,984],{},"58",[318,986,987],{},":",[318,989,990],{},"90",[318,992,993],{},"Z",[318,995,996],{},"122",[318,998,999],{},"z",[272,1001,1002,1005,1008,1011,1013,1016,1019,1022],{},[318,1003,1004],{},"27",[318,1006,1007],{},"ESC",[318,1009,1010],{},"59",[318,1012,184],{},[318,1014,1015],{},"91",[318,1017,1018],{},"[",[318,1020,1021],{},"123",[318,1023,1024],{},"{",[272,1026,1027,1030,1033,1036,1039,1042,1044,1047],{},[318,1028,1029],{},"28",[318,1031,1032],{},"FS",[318,1034,1035],{},"60",[318,1037,1038],{},"\u003C",[318,1040,1041],{},"92",[318,1043,712],{},[318,1045,1046],{},"124",[318,1048,1049],{},"|",[272,1051,1052,1055,1058,1061,1063,1066,1069,1072],{},[318,1053,1054],{},"29",[318,1056,1057],{},"GS",[318,1059,1060],{},"61",[318,1062,174],{},[318,1064,1065],{},"93",[318,1067,1068],{},"]",[318,1070,1071],{},"125",[318,1073,1074],{},"}",[272,1076,1077,1080,1083,1086,1089,1092,1095,1098],{},[318,1078,1079],{},"30",[318,1081,1082],{},"RS",[318,1084,1085],{},"62",[318,1087,1088],{},">",[318,1090,1091],{},"94",[318,1093,1094],{},"^",[318,1096,1097],{},"126",[318,1099,1100],{},"`",[272,1102,1103,1106,1109,1112,1115,1118,1121,1124],{},[318,1104,1105],{},"31",[318,1107,1108],{},"US",[318,1110,1111],{},"63",[318,1113,1114],{},"?",[318,1116,1117],{},"95",[318,1119,1120],{},"_",[318,1122,1123],{},"127",[318,1125,1126],{},"DEL",[15,1128,1129,1130,1133],{},"ASCII 码大致由以下",[278,1131,1132],{},"两部分组","成：",[1135,1136,1137,1144],"ul",{},[75,1138,1139,1140,1143],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[278,1141,1142],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[75,1145,1146,1147,1150],{},"ASCII 打印字符：数字 ",[278,1148,1149],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[89,1152,1154],{"id":1153},"_134转义字符","1.3.4转义字符",[109,1156,1158],{"className":111,"code":1157,"language":113,"meta":39,"style":39},"\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",[115,1159,1160,1165,1181,1196,1202,1216,1222],{"__ignoreMap":39},[118,1161,1162],{"class":120,"line":121},[118,1163,1164],{"class":187},"\u002F\u002F换行符\n",[118,1166,1167,1170,1173,1176,1178],{"class":120,"line":40},[118,1168,1169],{"class":128},"cout ",[118,1171,1172],{"class":124},"\u003C\u003C",[118,1174,1175],{"class":233},"\"hello world\u002Fn\"",[118,1177,184],{"class":128},[118,1179,1180],{"class":187}," \u002F\u002F就等同于如下：\n",[118,1182,1184,1186,1188,1191,1193],{"class":120,"line":1183},3,[118,1185,1169],{"class":128},[118,1187,1172],{"class":124},[118,1189,1190],{"class":233},"\"hello world\"",[118,1192,1172],{"class":124},[118,1194,1195],{"class":128},"endl;\n",[118,1197,1199],{"class":120,"line":1198},4,[118,1200,1201],{"class":187},"\u002F\u002F反斜杠\n",[118,1203,1205,1207,1209,1212,1214],{"class":120,"line":1204},5,[118,1206,1169],{"class":128},[118,1208,1172],{"class":124},[118,1210,1211],{"class":233},"\"\u002F\u002F\"",[118,1213,1172],{"class":124},[118,1215,1195],{"class":128},[118,1217,1219],{"class":120,"line":1218},6,[118,1220,1221],{"class":187},"\u002F\u002F水平制表符\n",[118,1223,1225,1227,1229,1232,1235,1238,1240,1243],{"class":120,"line":1224},7,[118,1226,1169],{"class":128},[118,1228,1172],{"class":124},[118,1230,1231],{"class":233},"\"aaaa",[118,1233,1234],{"class":177},"\\t",[118,1236,1237],{"class":233},"helloworld\"",[118,1239,1172],{"class":124},[118,1241,1242],{"class":128},"endl;",[118,1244,1245],{"class":187}," \u002F\u002F输出窗口时有对齐效果\n",[89,1247,1249],{"id":1248},"_135字符串型","1.3.5字符串型",[15,1251,1252,1253,1255],{},"char 变量名",[118,1254],{},"=\"字符串值\"",[109,1257,1259],{"className":111,"code":1258,"language":113,"meta":39,"style":39},"\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",[115,1260,1261,1266,1271,1276,1281,1295,1308,1313,1319,1331],{"__ignoreMap":39},[118,1262,1263],{"class":120,"line":121},[118,1264,1265],{"class":187},"\u002F\u002Fc风格字符串\n",[118,1267,1268],{"class":120,"line":40},[118,1269,1270],{"class":187},"\u002F\u002F注意事项：\n",[118,1272,1273],{"class":120,"line":1183},[118,1274,1275],{"class":187},"\u002F\u002F1.char字符串名[]\n",[118,1277,1278],{"class":120,"line":1198},[118,1279,1280],{"class":187},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[118,1282,1283,1285,1288,1290,1292],{"class":120,"line":1204},[118,1284,225],{"class":124},[118,1286,1287],{"class":128}," str[]",[118,1289,174],{"class":124},[118,1291,1190],{"class":233},[118,1293,1294],{"class":128},";\n",[118,1296,1297,1299,1301,1304,1306],{"class":120,"line":1218},[118,1298,1169],{"class":128},[118,1300,1172],{"class":124},[118,1302,1303],{"class":128},"str",[118,1305,1172],{"class":124},[118,1307,1195],{"class":128},[118,1309,1310],{"class":120,"line":1224},[118,1311,1312],{"class":187},"\u002F\u002Fc++风格字符串\n",[118,1314,1316],{"class":120,"line":1315},8,[118,1317,1318],{"class":187},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[118,1320,1322,1325,1327,1329],{"class":120,"line":1321},9,[118,1323,1324],{"class":128},"string str2",[118,1326,174],{"class":124},[118,1328,1190],{"class":233},[118,1330,1294],{"class":128},[118,1332,1334,1336,1338,1341,1343],{"class":120,"line":1333},10,[118,1335,1169],{"class":128},[118,1337,1172],{"class":124},[118,1339,1340],{"class":128},"str2",[118,1342,1172],{"class":124},[118,1344,1195],{"class":128},[89,1346,1348],{"id":1347},"_136布尔类型bool","1.3.6布尔类型bool",[109,1350,1352],{"className":111,"code":1351,"language":113,"meta":39,"style":39},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[115,1353,1354,1369],{"__ignoreMap":39},[118,1355,1356,1359,1362,1364,1367],{"class":120,"line":121},[118,1357,1358],{"class":124},"bool",[118,1360,1361],{"class":128}," flag",[118,1363,174],{"class":124},[118,1365,1366],{"class":177},"true",[118,1368,1294],{"class":128},[118,1370,1371,1374,1377,1380,1382,1384],{"class":120,"line":40},[118,1372,1373],{"class":128},"cout",[118,1375,1376],{"class":124},"\u003C\u003Csizeof",[118,1378,1379],{"class":128},"(flag)",[118,1381,1172],{"class":124},[118,1383,1242],{"class":128},[118,1385,1386],{"class":187}," \u002F\u002F查看布尔占内存空间\n",[60,1388,1390],{"id":1389},"_14键盘输入cin","1.4键盘输入cin",[109,1392,1394],{"className":111,"code":1393,"language":113,"meta":39,"style":39},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[115,1395,1396,1409,1426,1437],{"__ignoreMap":39},[118,1397,1398,1400,1403,1405,1407],{"class":120,"line":121},[118,1399,132],{"class":124},[118,1401,1402],{"class":128}," a",[118,1404,174],{"class":124},[118,1406,320],{"class":177},[118,1408,1294],{"class":128},[118,1410,1411,1413,1415,1418,1420,1422,1424],{"class":120,"line":40},[118,1412,1373],{"class":128},[118,1414,1172],{"class":124},[118,1416,1417],{"class":233},"\"请给整型变量a赋值\"",[118,1419,1172],{"class":124},[118,1421,21],{"class":128},[118,1423,1172],{"class":124},[118,1425,1195],{"class":128},[118,1427,1428,1431,1434],{"class":120,"line":1183},[118,1429,1430],{"class":128},"cin ",[118,1432,1433],{"class":124},">>",[118,1435,1436],{"class":128}," a;\n",[118,1438,1439,1441,1443,1446,1449,1451,1453],{"class":120,"line":1198},[118,1440,1169],{"class":128},[118,1442,1172],{"class":124},[118,1444,1445],{"class":233}," \"整型变量a=\"",[118,1447,1448],{"class":124}," \u003C\u003C",[118,1450,21],{"class":128},[118,1452,1172],{"class":124},[118,1454,1195],{"class":128},[60,1456,1458],{"id":1457},"_15运算符","1.5运算符",[89,1460,1462],{"id":1461},"_151算术运算符","1.5.1算术运算符",[15,1464,1465,1469],{},[1466,1467],"img",{"alt":39,"src":1468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[72,1471,1472,1475,1478],{},[75,1473,1474],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[75,1476,1477],{},"两个小数不可以做取模运算",[75,1479,1480],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[89,1482,1484],{"id":1483},"_152赋值运算符","1.5.2赋值运算符",[15,1486,1487],{},[1466,1488],{"alt":39,"src":1489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[89,1491,1493],{"id":1492},"_153比较运算符","1.5.3比较运算符",[15,1495,1496],{},[1466,1497],{"alt":39,"src":1498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[89,1500,1502],{"id":1501},"_154逻辑运算符","1.5.4逻辑运算符",[15,1504,1505],{},[1466,1506],{"alt":39,"src":1507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[60,1509,1511],{"id":1510},"_16程序流程结构","1.6程序流程结构",[89,1513,1515],{"id":1514},"_161选择结构","1.6.1选择结构",[72,1517,1518],{},[75,1519,1520],{},"if语句\n单行、多行、多条件if语句",[109,1522,1524],{"className":111,"code":1523,"language":113,"meta":39,"style":39},"\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",[115,1525,1526,1531,1546,1551,1565,1570,1575,1584,1597,1601,1614,1619,1625,1630,1644,1649,1655,1676,1681,1695,1700,1729,1734,1751,1756,1761,1766,1780,1785],{"__ignoreMap":39},[118,1527,1528],{"class":120,"line":121},[118,1529,1530],{"class":187},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[118,1532,1533,1536,1539,1541,1544],{"class":120,"line":40},[118,1534,1535],{"class":124},"if",[118,1537,1538],{"class":128},"(score",[118,1540,1088],{"class":124},[118,1542,1543],{"class":177},"600",[118,1545,135],{"class":128},[118,1547,1548],{"class":120,"line":1183},[118,1549,1550],{"class":128},"{\n",[118,1552,1553,1556,1558,1561,1563],{"class":120,"line":1198},[118,1554,1555],{"class":128},"    cout",[118,1557,1172],{"class":124},[118,1559,1560],{"class":233},"'这是单行if语句'",[118,1562,1172],{"class":124},[118,1564,1195],{"class":128},[118,1566,1567],{"class":120,"line":1204},[118,1568,1569],{"class":128},"}\n",[118,1571,1572],{"class":120,"line":1218},[118,1573,1574],{"class":187},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[118,1576,1577,1579,1581],{"class":120,"line":1224},[118,1578,1430],{"class":128},[118,1580,1433],{"class":124},[118,1582,1583],{"class":128}," score\n",[118,1585,1586,1588,1590,1593,1595],{"class":120,"line":1315},[118,1587,1535],{"class":124},[118,1589,1538],{"class":128},[118,1591,1592],{"class":124},"\u003C=",[118,1594,1543],{"class":177},[118,1596,135],{"class":128},[118,1598,1599],{"class":120,"line":1321},[118,1600,1550],{"class":128},[118,1602,1603,1605,1607,1610,1612],{"class":120,"line":1333},[118,1604,1555],{"class":128},[118,1606,1433],{"class":124},[118,1608,1609],{"class":233},"\"小于等于600\"",[118,1611,1172],{"class":124},[118,1613,1195],{"class":128},[118,1615,1617],{"class":120,"line":1616},11,[118,1618,1569],{"class":128},[118,1620,1622],{"class":120,"line":1621},12,[118,1623,1624],{"class":124},"else\n",[118,1626,1628],{"class":120,"line":1627},13,[118,1629,1550],{"class":128},[118,1631,1633,1635,1637,1640,1642],{"class":120,"line":1632},14,[118,1634,1555],{"class":128},[118,1636,1433],{"class":124},[118,1638,1639],{"class":233},"\"大于600\"",[118,1641,1433],{"class":124},[118,1643,1195],{"class":128},[118,1645,1647],{"class":120,"line":1646},15,[118,1648,1569],{"class":128},[118,1650,1652],{"class":120,"line":1651},16,[118,1653,1654],{"class":187},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[118,1656,1658,1660,1663,1665,1667,1670,1672,1674],{"class":120,"line":1657},17,[118,1659,1535],{"class":124},[118,1661,1662],{"class":128}," (",[118,1664,320],{"class":177},[118,1666,1038],{"class":124},[118,1668,1669],{"class":128},"num",[118,1671,1038],{"class":124},[118,1673,439],{"class":177},[118,1675,135],{"class":128},[118,1677,1679],{"class":120,"line":1678},18,[118,1680,1550],{"class":128},[118,1682,1684,1686,1688,1691,1693],{"class":120,"line":1683},19,[118,1685,1555],{"class":128},[118,1687,1172],{"class":124},[118,1689,1690],{"class":233},"\"小于100\"",[118,1692,1172],{"class":124},[118,1694,1195],{"class":128},[118,1696,1698],{"class":120,"line":1697},20,[118,1699,1569],{"class":128},[118,1701,1703,1706,1709,1712,1715,1717,1720,1722,1724,1727],{"class":120,"line":1702},21,[118,1704,1705],{"class":124},"else",[118,1707,1708],{"class":124}," if",[118,1710,1711],{"class":128}," (nmu",[118,1713,1714],{"class":124},">=",[118,1716,439],{"class":177},[118,1718,1719],{"class":124},"&&",[118,1721,1669],{"class":128},[118,1723,1038],{"class":124},[118,1725,1726],{"class":177},"200",[118,1728,135],{"class":128},[118,1730,1732],{"class":120,"line":1731},22,[118,1733,1550],{"class":128},[118,1735,1737,1739,1741,1744,1746,1748],{"class":120,"line":1736},23,[118,1738,1555],{"class":128},[118,1740,1172],{"class":124},[118,1742,1743],{"class":233},"\"不小于100且小于200\"",[118,1745,1172],{"class":124},[118,1747,1242],{"class":128},[118,1749,1750],{"class":187}," \u002F\u002F可以无限else if,python中是elif：\n",[118,1752,1754],{"class":120,"line":1753},24,[118,1755,1569],{"class":128},[118,1757,1759],{"class":120,"line":1758},25,[118,1760,1624],{"class":124},[118,1762,1764],{"class":120,"line":1763},26,[118,1765,1550],{"class":128},[118,1767,1769,1771,1773,1776,1778],{"class":120,"line":1768},27,[118,1770,1555],{"class":128},[118,1772,1172],{"class":124},[118,1774,1775],{"class":233},"\"不小于200\"",[118,1777,1172],{"class":124},[118,1779,1195],{"class":128},[118,1781,1783],{"class":120,"line":1782},28,[118,1784,1569],{"class":128},[118,1786,1788],{"class":120,"line":1787},29,[118,1789,1790],{"class":187},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[72,1792,1793],{"start":40},[75,1794,1795],{},"三目运算符",[109,1797,1799],{"className":111,"code":1798,"language":113,"meta":39,"style":39},"\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",[115,1800,1801,1806,1811,1837,1859,1876,1881,1904,1919],{"__ignoreMap":39},[118,1802,1803],{"class":120,"line":121},[118,1804,1805],{"class":187},"\u002F\u002F创建三个变量a,b,c\n",[118,1807,1808],{"class":120,"line":40},[118,1809,1810],{"class":187},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[118,1812,1813,1815,1817,1819,1821,1824,1826,1828,1831,1833,1835],{"class":120,"line":1183},[118,1814,132],{"class":124},[118,1816,1402],{"class":128},[118,1818,174],{"class":124},[118,1820,828],{"class":177},[118,1822,1823],{"class":128},",b",[118,1825,174],{"class":124},[118,1827,574],{"class":177},[118,1829,1830],{"class":128},",c",[118,1832,174],{"class":124},[118,1834,320],{"class":177},[118,1836,1294],{"class":128},[118,1838,1839,1841,1843,1846,1848,1850,1852,1854,1856],{"class":120,"line":1198},[118,1840,416],{"class":128},[118,1842,174],{"class":124},[118,1844,1845],{"class":128},"(a",[118,1847,1088],{"class":124},[118,1849,391],{"class":128},[118,1851,1114],{"class":124},[118,1853,21],{"class":128},[118,1855,987],{"class":124},[118,1857,1858],{"class":128},"b)\n",[118,1860,1861,1863,1865,1868,1870,1872,1874],{"class":120,"line":1204},[118,1862,1373],{"class":128},[118,1864,1172],{"class":124},[118,1866,1867],{"class":233},"\"c=\"",[118,1869,1172],{"class":124},[118,1871,416],{"class":128},[118,1873,1172],{"class":124},[118,1875,1195],{"class":128},[118,1877,1878],{"class":120,"line":1218},[118,1879,1880],{"class":187},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[118,1882,1883,1885,1887,1889,1891,1893,1895,1898,1900,1902],{"class":120,"line":1224},[118,1884,1845],{"class":128},[118,1886,1088],{"class":124},[118,1888,391],{"class":128},[118,1890,1114],{"class":124},[118,1892,21],{"class":128},[118,1894,987],{"class":124},[118,1896,1897],{"class":128},"b)",[118,1899,174],{"class":124},[118,1901,439],{"class":177},[118,1903,1294],{"class":128},[118,1905,1906,1908,1910,1912,1914,1916],{"class":120,"line":1315},[118,1907,1373],{"class":128},[118,1909,1172],{"class":124},[118,1911,21],{"class":128},[118,1913,1172],{"class":124},[118,1915,1242],{"class":128},[118,1917,1918],{"class":187}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[118,1920,1921,1923,1925,1927,1929,1931],{"class":120,"line":1321},[118,1922,1373],{"class":128},[118,1924,1172],{"class":124},[118,1926,391],{"class":128},[118,1928,1172],{"class":124},[118,1930,1242],{"class":128},[118,1932,1933],{"class":187}," \u002F\u002F10   a>b,b还是原值\n",[72,1935,1936],{"start":1183},[75,1937,1938],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[109,1940,1942],{"className":111,"code":1941,"language":113,"meta":39,"style":39},"\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",[115,1943,1944,1949,1957,1971,1981,1985,1999,2012,2022,2030,2035,2060,2081,2103,2124,2146,2167,2187,2192],{"__ignoreMap":39},[118,1945,1946],{"class":120,"line":121},[118,1947,1948],{"class":187},"\u002F\u002F案例-电影打分\n",[118,1950,1951,1954],{"class":120,"line":40},[118,1952,1953],{"class":124},"#include",[118,1955,1956],{"class":233},"\u003Ciostream>\n",[118,1958,1959,1962,1965,1969],{"class":120,"line":1183},[118,1960,1961],{"class":124},"using",[118,1963,1964],{"class":124}," namespace",[118,1966,1968],{"class":1967},"sScJk"," std",[118,1970,1294],{"class":128},[118,1972,1973,1975,1978],{"class":120,"line":1198},[118,1974,132],{"class":124},[118,1976,1977],{"class":1967}," main",[118,1979,1980],{"class":128},"()\n",[118,1982,1983],{"class":120,"line":1204},[118,1984,1550],{"class":128},[118,1986,1987,1990,1993,1995,1997],{"class":120,"line":1218},[118,1988,1989],{"class":124},"    int",[118,1991,1992],{"class":128}," score",[118,1994,174],{"class":124},[118,1996,320],{"class":177},[118,1998,1294],{"class":128},[118,2000,2001,2003,2005,2008,2010],{"class":120,"line":1224},[118,2002,1555],{"class":128},[118,2004,1172],{"class":124},[118,2006,2007],{"class":233},"\"电影打分：\"",[118,2009,1172],{"class":124},[118,2011,1195],{"class":128},[118,2013,2014,2017,2019],{"class":120,"line":1315},[118,2015,2016],{"class":128},"    cin",[118,2018,1433],{"class":124},[118,2020,2021],{"class":128},"score;\n",[118,2023,2024,2027],{"class":120,"line":1321},[118,2025,2026],{"class":124},"    switch",[118,2028,2029],{"class":128},"(score)\n",[118,2031,2032],{"class":120,"line":1333},[118,2033,2034],{"class":128},"    {\n",[118,2036,2037,2040,2043,2046,2048,2051,2053,2055,2058],{"class":120,"line":1616},[118,2038,2039],{"class":124},"        case",[118,2041,2042],{"class":177}," 10",[118,2044,2045],{"class":128},":cout",[118,2047,1172],{"class":124},[118,2049,2050],{"class":233},"\"经典\"",[118,2052,1172],{"class":124},[118,2054,1242],{"class":128},[118,2056,2057],{"class":124},"break",[118,2059,1294],{"class":128},[118,2061,2062,2064,2067,2069,2071,2073,2075,2077,2079],{"class":120,"line":1621},[118,2063,2039],{"class":124},[118,2065,2066],{"class":177}," 9",[118,2068,2045],{"class":128},[118,2070,1172],{"class":124},[118,2072,2050],{"class":233},[118,2074,1172],{"class":124},[118,2076,1242],{"class":128},[118,2078,2057],{"class":124},[118,2080,1294],{"class":128},[118,2082,2083,2085,2088,2090,2092,2095,2097,2099,2101],{"class":120,"line":1627},[118,2084,2039],{"class":124},[118,2086,2087],{"class":177}," 8",[118,2089,2045],{"class":128},[118,2091,1172],{"class":124},[118,2093,2094],{"class":233},"\"非常好\"",[118,2096,1172],{"class":124},[118,2098,1242],{"class":128},[118,2100,2057],{"class":124},[118,2102,1294],{"class":128},[118,2104,2105,2107,2110,2112,2114,2116,2118,2120,2122],{"class":120,"line":1632},[118,2106,2039],{"class":124},[118,2108,2109],{"class":177}," 7",[118,2111,2045],{"class":128},[118,2113,1172],{"class":124},[118,2115,2094],{"class":233},[118,2117,1172],{"class":124},[118,2119,1242],{"class":128},[118,2121,2057],{"class":124},[118,2123,1294],{"class":128},[118,2125,2126,2128,2131,2133,2135,2138,2140,2142,2144],{"class":120,"line":1646},[118,2127,2039],{"class":124},[118,2129,2130],{"class":177}," 6",[118,2132,2045],{"class":128},[118,2134,1172],{"class":124},[118,2136,2137],{"class":233},"\"一般\"",[118,2139,1172],{"class":124},[118,2141,1242],{"class":128},[118,2143,2057],{"class":124},[118,2145,1294],{"class":128},[118,2147,2148,2150,2153,2155,2157,2159,2161,2163,2165],{"class":120,"line":1651},[118,2149,2039],{"class":124},[118,2151,2152],{"class":177}," 5",[118,2154,2045],{"class":128},[118,2156,1172],{"class":124},[118,2158,2137],{"class":233},[118,2160,1172],{"class":124},[118,2162,1242],{"class":128},[118,2164,2057],{"class":124},[118,2166,1294],{"class":128},[118,2168,2169,2172,2174,2176,2179,2181,2183,2185],{"class":120,"line":1657},[118,2170,2171],{"class":124},"        default",[118,2173,2045],{"class":128},[118,2175,1172],{"class":124},[118,2177,2178],{"class":233},"\"烂片\"",[118,2180,1172],{"class":124},[118,2182,1242],{"class":128},[118,2184,2057],{"class":124},[118,2186,1294],{"class":128},[118,2188,2189],{"class":120,"line":1678},[118,2190,2191],{"class":128},"    }\n",[118,2193,2194],{"class":120,"line":1683},[118,2195,1569],{"class":128},[15,2197,2198],{},"if和switch区别：",[1135,2200,2201,2204],{},[75,2202,2203],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[75,2205,2206],{},"switch优点：结构清晰，执行效率高",[89,2208,2210],{"id":2209},"_162循环结构","1.6.2循环结构",[72,2212,2213],{},[75,2214,2215],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[109,2217,2219],{"className":111,"code":2218,"language":113,"meta":39,"style":39},"\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",[115,2220,2221,2226,2234,2238,2251,2265,2269,2289,2299,2303,2315],{"__ignoreMap":39},[118,2222,2223],{"class":120,"line":121},[118,2224,2225],{"class":187},"\u002F\u002F打印0-9数字\n",[118,2227,2228,2230,2232],{"class":120,"line":40},[118,2229,132],{"class":124},[118,2231,1977],{"class":1967},[118,2233,1980],{"class":128},[118,2235,2236],{"class":120,"line":1183},[118,2237,1550],{"class":128},[118,2239,2240,2242,2245,2247,2249],{"class":120,"line":1198},[118,2241,1989],{"class":124},[118,2243,2244],{"class":128}," num",[118,2246,174],{"class":124},[118,2248,320],{"class":177},[118,2250,1294],{"class":128},[118,2252,2253,2256,2259,2261,2263],{"class":120,"line":1204},[118,2254,2255],{"class":124},"    while",[118,2257,2258],{"class":128},"(num",[118,2260,1038],{"class":124},[118,2262,574],{"class":177},[118,2264,135],{"class":128},[118,2266,2267],{"class":120,"line":1218},[118,2268,2034],{"class":128},[118,2270,2271,2274,2277,2279,2281,2283,2286],{"class":120,"line":1224},[118,2272,2273],{"class":1967},"       std",[118,2275,2276],{"class":128},"::cout",[118,2278,1172],{"class":124},[118,2280,1669],{"class":128},[118,2282,1172],{"class":124},[118,2284,2285],{"class":1967},"std",[118,2287,2288],{"class":128},"::endl;\n",[118,2290,2291,2294,2297],{"class":120,"line":1315},[118,2292,2293],{"class":128},"        num",[118,2295,2296],{"class":124},"++",[118,2298,1294],{"class":128},[118,2300,2301],{"class":120,"line":1321},[118,2302,2191],{"class":128},[118,2304,2305,2308,2310,2313],{"class":120,"line":1333},[118,2306,2307],{"class":1967},"    system",[118,2309,129],{"class":128},[118,2311,2312],{"class":233},"\"pause\"",[118,2314,135],{"class":128},[118,2316,2317],{"class":120,"line":1616},[118,2318,1569],{"class":128},[15,2320,2321],{},"注意：写好循环条件，避免死循环情况",[109,2323,2325],{"className":111,"code":2324,"language":113,"meta":39,"style":39},"\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",[115,2326,2327,2332,2339,2346,2356,2364,2368,2373,2400,2405,2410,2418,2445,2450,2455,2468,2478,2482,2492,2497,2510,2515,2529,2534,2549,2553,2566,2570,2575,2579,2593,2601,2606,2612,2618,2623],{"__ignoreMap":39},[118,2328,2329],{"class":120,"line":121},[118,2330,2331],{"class":187},"\u002F\u002F循环结构-猜数字\n",[118,2333,2334,2336],{"class":120,"line":40},[118,2335,1953],{"class":124},[118,2337,2338],{"class":233}," \u003Ciostream>\n",[118,2340,2341,2343],{"class":120,"line":1183},[118,2342,1953],{"class":124},[118,2344,2345],{"class":233}," \u003Cctime>\n",[118,2347,2348,2350,2352,2354],{"class":120,"line":1198},[118,2349,1961],{"class":124},[118,2351,1964],{"class":124},[118,2353,1968],{"class":1967},[118,2355,1294],{"class":128},[118,2357,2358,2360,2362],{"class":120,"line":1204},[118,2359,132],{"class":124},[118,2361,1977],{"class":1967},[118,2363,1980],{"class":128},[118,2365,2366],{"class":120,"line":1218},[118,2367,1550],{"class":128},[118,2369,2370],{"class":120,"line":1224},[118,2371,2372],{"class":187},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[118,2374,2375,2378,2381,2384,2387,2389,2392,2394,2397],{"class":120,"line":1315},[118,2376,2377],{"class":1967},"    srand",[118,2379,2380],{"class":128},"((",[118,2382,2383],{"class":124},"unsigned",[118,2385,2386],{"class":124}," int",[118,2388,557],{"class":128},[118,2390,2391],{"class":1967},"time",[118,2393,129],{"class":128},[118,2395,2396],{"class":177},"NULL",[118,2398,2399],{"class":128},"));\n",[118,2401,2402],{"class":120,"line":1321},[118,2403,2404],{"emptyLinePlaceholder":45},"\n",[118,2406,2407],{"class":120,"line":1333},[118,2408,2409],{"class":187},"    \u002F\u002F1.系统生成随机数\n",[118,2411,2412,2415],{"class":120,"line":1616},[118,2413,2414],{"class":187},"    \u002F\u002Frand()%100",[118,2416,2417],{"class":187}," \u002F\u002F生成0-99的随机数\n",[118,2419,2420,2422,2424,2426,2429,2432,2434,2436,2438,2440,2442],{"class":120,"line":1621},[118,2421,1989],{"class":124},[118,2423,2244],{"class":128},[118,2425,174],{"class":124},[118,2427,2428],{"class":1967},"rand",[118,2430,2431],{"class":128},"()",[118,2433,456],{"class":124},[118,2435,439],{"class":177},[118,2437,609],{"class":124},[118,2439,346],{"class":177},[118,2441,184],{"class":128},[118,2443,2444],{"class":187}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[118,2446,2447],{"class":120,"line":1627},[118,2448,2449],{"class":187},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[118,2451,2452],{"class":120,"line":1632},[118,2453,2454],{"class":187},"    \u002F\u002F2.玩家猜测\n",[118,2456,2457,2459,2462,2464,2466],{"class":120,"line":1646},[118,2458,1989],{"class":124},[118,2460,2461],{"class":128}," val",[118,2463,174],{"class":124},[118,2465,320],{"class":177},[118,2467,1294],{"class":128},[118,2469,2470,2472,2474,2476],{"class":120,"line":1651},[118,2471,2255],{"class":124},[118,2473,1662],{"class":128},[118,2475,346],{"class":177},[118,2477,135],{"class":128},[118,2479,2480],{"class":120,"line":1657},[118,2481,2034],{"class":128},[118,2483,2484,2487,2489],{"class":120,"line":1678},[118,2485,2486],{"class":128},"        cin",[118,2488,1433],{"class":124},[118,2490,2491],{"class":128},"val;\n",[118,2493,2494],{"class":120,"line":1683},[118,2495,2496],{"class":187},"        \u002F\u002F3.判断玩家猜测\n",[118,2498,2499,2502,2505,2507],{"class":120,"line":1697},[118,2500,2501],{"class":124},"        if",[118,2503,2504],{"class":128},"(val",[118,2506,1038],{"class":124},[118,2508,2509],{"class":128},"num) \n",[118,2511,2512],{"class":120,"line":1702},[118,2513,2514],{"class":128},"        {\n",[118,2516,2517,2520,2522,2525,2527],{"class":120,"line":1731},[118,2518,2519],{"class":128},"            cout",[118,2521,1172],{"class":124},[118,2523,2524],{"class":233},"\"猜小了！\"",[118,2526,1172],{"class":124},[118,2528,1195],{"class":128},[118,2530,2531],{"class":120,"line":1736},[118,2532,2533],{"class":128},"        }\n",[118,2535,2536,2539,2541,2544,2546],{"class":120,"line":1753},[118,2537,2538],{"class":124},"        else",[118,2540,1708],{"class":124},[118,2542,2543],{"class":128}," (val",[118,2545,1088],{"class":124},[118,2547,2548],{"class":128},"num)\n",[118,2550,2551],{"class":120,"line":1758},[118,2552,2514],{"class":128},[118,2554,2555,2557,2559,2562,2564],{"class":120,"line":1763},[118,2556,2519],{"class":128},[118,2558,1172],{"class":124},[118,2560,2561],{"class":233},"\"猜大了！\"",[118,2563,1172],{"class":124},[118,2565,1195],{"class":128},[118,2567,2568],{"class":120,"line":1768},[118,2569,2533],{"class":128},[118,2571,2572],{"class":120,"line":1782},[118,2573,2574],{"class":124},"        else\n",[118,2576,2577],{"class":120,"line":1787},[118,2578,2514],{"class":128},[118,2580,2582,2584,2586,2589,2591],{"class":120,"line":2581},30,[118,2583,2519],{"class":128},[118,2585,1172],{"class":124},[118,2587,2588],{"class":233},"\"猜对了！\"",[118,2590,1172],{"class":124},[118,2592,1195],{"class":128},[118,2594,2596,2599],{"class":120,"line":2595},31,[118,2597,2598],{"class":124},"            break",[118,2600,1294],{"class":128},[118,2602,2604],{"class":120,"line":2603},32,[118,2605,2533],{"class":128},[118,2607,2609],{"class":120,"line":2608},33,[118,2610,2611],{"class":187},"        \u002F\u002F猜对 退出游戏\n",[118,2613,2615],{"class":120,"line":2614},34,[118,2616,2617],{"class":187},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[118,2619,2621],{"class":120,"line":2620},35,[118,2622,2191],{"class":128},[118,2624,2626],{"class":120,"line":2625},36,[118,2627,1569],{"class":128},[72,2629,2630],{"start":40},[75,2631,2632,2633,2636],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[278,2634,2635],{},"do...while会先执行一次循环语句","，在判断循环语句",[109,2638,2640],{"className":111,"code":2639,"language":113,"meta":39,"style":39},"\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",[115,2641,2642,2647,2655,2659,2671,2679,2683,2700,2707,2711,2724,2734],{"__ignoreMap":39},[118,2643,2644],{"class":120,"line":121},[118,2645,2646],{"class":187},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[118,2648,2649,2651,2653],{"class":120,"line":40},[118,2650,132],{"class":124},[118,2652,1977],{"class":1967},[118,2654,1980],{"class":128},[118,2656,2657],{"class":120,"line":1183},[118,2658,1550],{"class":128},[118,2660,2661,2663,2665,2667,2669],{"class":120,"line":1198},[118,2662,1989],{"class":124},[118,2664,2244],{"class":128},[118,2666,174],{"class":124},[118,2668,320],{"class":177},[118,2670,1294],{"class":128},[118,2672,2673,2676],{"class":120,"line":1204},[118,2674,2675],{"class":124},"    do",[118,2677,2678],{"class":128}," \n",[118,2680,2681],{"class":120,"line":1218},[118,2682,2034],{"class":128},[118,2684,2685,2688,2690,2692,2694,2696,2698],{"class":120,"line":1224},[118,2686,2687],{"class":1967},"        std",[118,2689,2276],{"class":128},[118,2691,1172],{"class":124},[118,2693,1669],{"class":128},[118,2695,1172],{"class":124},[118,2697,2285],{"class":1967},[118,2699,2288],{"class":128},[118,2701,2702,2704],{"class":120,"line":1315},[118,2703,2293],{"class":128},[118,2705,2706],{"class":124},"++\n",[118,2708,2709],{"class":120,"line":1321},[118,2710,2191],{"class":128},[118,2712,2713,2715,2717,2719,2721],{"class":120,"line":1333},[118,2714,2255],{"class":124},[118,2716,2258],{"class":128},[118,2718,1038],{"class":124},[118,2720,574],{"class":177},[118,2722,2723],{"class":128},");\n",[118,2725,2726,2728,2730,2732],{"class":120,"line":1616},[118,2727,2307],{"class":1967},[118,2729,129],{"class":128},[118,2731,2312],{"class":233},[118,2733,2723],{"class":128},[118,2735,2736],{"class":120,"line":1621},[118,2737,1569],{"class":128},[15,2739,2740],{},"案例-水仙花数",[15,2742,2743],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[15,2745,2746],{},"例如：1^3+5^3+3^3=153",[15,2748,2749],{},"请用do...while语句，求出所有3位数的水仙花数",[109,2751,2753],{"className":111,"code":2752,"language":113,"meta":39,"style":39},"#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",[115,2754,2755,2761,2771,2779,2783,2788,2800,2806,2810,2815,2831,2847,2863,2878,2897,2912,2960,2964,2976,2980,2988,2992,3006],{"__ignoreMap":39},[118,2756,2757,2759],{"class":120,"line":121},[118,2758,1953],{"class":124},[118,2760,2338],{"class":233},[118,2762,2763,2765,2767,2769],{"class":120,"line":40},[118,2764,1961],{"class":124},[118,2766,1964],{"class":124},[118,2768,1968],{"class":1967},[118,2770,1294],{"class":128},[118,2772,2773,2775,2777],{"class":120,"line":1183},[118,2774,132],{"class":124},[118,2776,1977],{"class":1967},[118,2778,1980],{"class":128},[118,2780,2781],{"class":120,"line":1198},[118,2782,1550],{"class":128},[118,2784,2785],{"class":120,"line":1204},[118,2786,2787],{"class":187},"    \u002F\u002F1.先打印所有三位数字\n",[118,2789,2790,2792,2794,2796,2798],{"class":120,"line":1218},[118,2791,1989],{"class":124},[118,2793,2244],{"class":128},[118,2795,174],{"class":124},[118,2797,439],{"class":177},[118,2799,1294],{"class":128},[118,2801,2802,2804],{"class":120,"line":1224},[118,2803,2675],{"class":124},[118,2805,2678],{"class":128},[118,2807,2808],{"class":120,"line":1315},[118,2809,2034],{"class":128},[118,2811,2812],{"class":120,"line":1321},[118,2813,2814],{"class":187},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[118,2816,2817,2820,2822,2824,2826,2828],{"class":120,"line":1333},[118,2818,2819],{"class":124},"        int",[118,2821,1402],{"class":128},[118,2823,174],{"class":124},[118,2825,320],{"class":177},[118,2827,184],{"class":128},[118,2829,2830],{"class":187}," \u002F\u002F个位\n",[118,2832,2833,2835,2838,2840,2842,2844],{"class":120,"line":1616},[118,2834,2819],{"class":124},[118,2836,2837],{"class":128}," b",[118,2839,174],{"class":124},[118,2841,320],{"class":177},[118,2843,184],{"class":128},[118,2845,2846],{"class":187}," \u002F\u002F十位\n",[118,2848,2849,2851,2854,2856,2858,2860],{"class":120,"line":1621},[118,2850,2819],{"class":124},[118,2852,2853],{"class":128}," c",[118,2855,174],{"class":124},[118,2857,320],{"class":177},[118,2859,184],{"class":128},[118,2861,2862],{"class":187}," \u002F\u002F百位\n",[118,2864,2865,2868,2870,2872,2874,2876],{"class":120,"line":1627},[118,2866,2867],{"class":128},"        a",[118,2869,174],{"class":124},[118,2871,1669],{"class":128},[118,2873,456],{"class":124},[118,2875,574],{"class":177},[118,2877,1294],{"class":128},[118,2879,2880,2883,2885,2887,2889,2891,2893,2895],{"class":120,"line":1632},[118,2881,2882],{"class":128},"        b",[118,2884,174],{"class":124},[118,2886,1669],{"class":128},[118,2888,712],{"class":124},[118,2890,574],{"class":177},[118,2892,456],{"class":124},[118,2894,574],{"class":177},[118,2896,1294],{"class":128},[118,2898,2899,2902,2904,2906,2908,2910],{"class":120,"line":1646},[118,2900,2901],{"class":128},"        c",[118,2903,174],{"class":124},[118,2905,1669],{"class":128},[118,2907,712],{"class":124},[118,2909,439],{"class":177},[118,2911,1294],{"class":128},[118,2913,2914,2916,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2951,2954,2957],{"class":120,"line":1651},[118,2915,2501],{"class":124},[118,2917,1845],{"class":128},[118,2919,583],{"class":124},[118,2921,21],{"class":128},[118,2923,583],{"class":124},[118,2925,21],{"class":128},[118,2927,609],{"class":124},[118,2929,391],{"class":128},[118,2931,583],{"class":124},[118,2933,391],{"class":128},[118,2935,583],{"class":124},[118,2937,391],{"class":128},[118,2939,609],{"class":124},[118,2941,416],{"class":128},[118,2943,583],{"class":124},[118,2945,416],{"class":128},[118,2947,583],{"class":124},[118,2949,2950],{"class":128},"c ",[118,2952,2953],{"class":124},"==",[118,2955,2956],{"class":128}," num)",[118,2958,2959],{"class":187}," \u002F\u002F如果是水仙花数，才打印\n",[118,2961,2962],{"class":120,"line":1657},[118,2963,2514],{"class":128},[118,2965,2966,2968,2970,2972,2974],{"class":120,"line":1678},[118,2967,2519],{"class":128},[118,2969,1172],{"class":124},[118,2971,1669],{"class":128},[118,2973,1172],{"class":124},[118,2975,1195],{"class":128},[118,2977,2978],{"class":120,"line":1683},[118,2979,2533],{"class":128},[118,2981,2982,2984,2986],{"class":120,"line":1697},[118,2983,2293],{"class":128},[118,2985,2296],{"class":124},[118,2987,1294],{"class":128},[118,2989,2990],{"class":120,"line":1702},[118,2991,2191],{"class":128},[118,2993,2994,2996,2999,3001,3004],{"class":120,"line":1731},[118,2995,2255],{"class":124},[118,2997,2998],{"class":128}," (num ",[118,3000,1038],{"class":124},[118,3002,3003],{"class":177}," 1000",[118,3005,2723],{"class":128},[118,3007,3008],{"class":120,"line":1736},[118,3009,1569],{"class":128},[72,3011,3012],{"start":1183},[75,3013,3014],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[109,3016,3018],{"className":111,"code":3017,"language":113,"meta":39,"style":39},"\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",[115,3019,3020,3025,3054,3058,3070,3074,3079,3090,3097,3101,3115,3119,3126,3130,3142,3151],{"__ignoreMap":39},[118,3021,3022],{"class":120,"line":121},[118,3023,3024],{"class":187},"\u002F\u002F从数字0-9打印\n",[118,3026,3027,3030,3032,3034,3037,3039,3041,3044,3046,3048,3050,3052],{"class":120,"line":40},[118,3028,3029],{"class":124},"for",[118,3031,129],{"class":128},[118,3033,132],{"class":124},[118,3035,3036],{"class":128}," i",[118,3038,174],{"class":124},[118,3040,320],{"class":177},[118,3042,3043],{"class":128},";i",[118,3045,1038],{"class":124},[118,3047,574],{"class":177},[118,3049,3043],{"class":128},[118,3051,2296],{"class":124},[118,3053,135],{"class":128},[118,3055,3056],{"class":120,"line":1183},[118,3057,1550],{"class":128},[118,3059,3060,3062,3064,3066,3068],{"class":120,"line":1198},[118,3061,1555],{"class":128},[118,3063,1172],{"class":124},[118,3065,569],{"class":128},[118,3067,1172],{"class":124},[118,3069,1195],{"class":128},[118,3071,3072],{"class":120,"line":1204},[118,3073,1569],{"class":128},[118,3075,3076],{"class":120,"line":1218},[118,3077,3078],{"class":187},"\u002F\u002F上式可以进行拆分\n",[118,3080,3081,3083,3085,3087],{"class":120,"line":1224},[118,3082,132],{"class":124},[118,3084,3036],{"class":128},[118,3086,174],{"class":124},[118,3088,3089],{"class":177},"0\n",[118,3091,3092,3094],{"class":120,"line":1315},[118,3093,3029],{"class":124},[118,3095,3096],{"class":128},"(;;;)\n",[118,3098,3099],{"class":120,"line":1321},[118,3100,1550],{"class":128},[118,3102,3103,3106,3109,3111,3113],{"class":120,"line":1333},[118,3104,3105],{"class":124},"    if",[118,3107,3108],{"class":128},"(i",[118,3110,1714],{"class":124},[118,3112,574],{"class":177},[118,3114,135],{"class":128},[118,3116,3117],{"class":120,"line":1616},[118,3118,2034],{"class":128},[118,3120,3121,3124],{"class":120,"line":1621},[118,3122,3123],{"class":124},"        break",[118,3125,1294],{"class":128},[118,3127,3128],{"class":120,"line":1627},[118,3129,2191],{"class":128},[118,3131,3132,3134,3136,3138,3140],{"class":120,"line":1632},[118,3133,1555],{"class":128},[118,3135,1172],{"class":124},[118,3137,569],{"class":128},[118,3139,1172],{"class":124},[118,3141,1195],{"class":128},[118,3143,3144,3147,3149],{"class":120,"line":1646},[118,3145,3146],{"class":128},"    i",[118,3148,2296],{"class":124},[118,3150,1294],{"class":128},[118,3152,3153],{"class":120,"line":1651},[118,3154,1569],{"class":128},[15,3156,3157],{},"小练习",[109,3159,3161],{"className":111,"code":3160,"language":113,"meta":39,"style":39},"#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",[115,3162,3163,3169,3179,3187,3191,3196,3201,3229,3233,3238,3243,3284,3288,3301,3305,3309,3313,3325,3329,3333],{"__ignoreMap":39},[118,3164,3165,3167],{"class":120,"line":121},[118,3166,1953],{"class":124},[118,3168,1956],{"class":233},[118,3170,3171,3173,3175,3177],{"class":120,"line":40},[118,3172,1961],{"class":124},[118,3174,1964],{"class":124},[118,3176,1968],{"class":1967},[118,3178,1294],{"class":128},[118,3180,3181,3183,3185],{"class":120,"line":1183},[118,3182,132],{"class":124},[118,3184,1977],{"class":1967},[118,3186,1980],{"class":128},[118,3188,3189],{"class":120,"line":1198},[118,3190,1550],{"class":128},[118,3192,3193],{"class":120,"line":1204},[118,3194,3195],{"class":187},"    \u002F\u002F敲桌子案例\n",[118,3197,3198],{"class":120,"line":1218},[118,3199,3200],{"class":187},"    \u002F\u002F1.先输出1-100的数字\n",[118,3202,3203,3206,3208,3210,3212,3214,3216,3219,3221,3223,3225,3227],{"class":120,"line":1224},[118,3204,3205],{"class":124},"    for",[118,3207,129],{"class":128},[118,3209,132],{"class":124},[118,3211,3036],{"class":128},[118,3213,174],{"class":124},[118,3215,346],{"class":177},[118,3217,3218],{"class":128},"; i",[118,3220,1592],{"class":124},[118,3222,439],{"class":177},[118,3224,3218],{"class":128},[118,3226,2296],{"class":124},[118,3228,135],{"class":128},[118,3230,3231],{"class":120,"line":1315},[118,3232,2034],{"class":128},[118,3234,3235],{"class":120,"line":1321},[118,3236,3237],{"class":187},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[118,3239,3240],{"class":120,"line":1333},[118,3241,3242],{"class":187},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[118,3244,3245,3247,3249,3251,3253,3255,3257,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278,3280,3282],{"class":120,"line":1616},[118,3246,2501],{"class":124},[118,3248,3108],{"class":128},[118,3250,456],{"class":124},[118,3252,497],{"class":177},[118,3254,2953],{"class":124},[118,3256,320],{"class":177},[118,3258,3259],{"class":124}," ||",[118,3261,3036],{"class":128},[118,3263,456],{"class":124},[118,3265,574],{"class":177},[118,3267,2953],{"class":124},[118,3269,497],{"class":177},[118,3271,3259],{"class":124},[118,3273,3036],{"class":128},[118,3275,712],{"class":124},[118,3277,574],{"class":177},[118,3279,2953],{"class":124},[118,3281,497],{"class":177},[118,3283,135],{"class":128},[118,3285,3286],{"class":120,"line":1621},[118,3287,2514],{"class":128},[118,3289,3290,3292,3294,3297,3299],{"class":120,"line":1627},[118,3291,2519],{"class":128},[118,3293,1172],{"class":124},[118,3295,3296],{"class":233},"\"敲桌子\"",[118,3298,1172],{"class":124},[118,3300,1195],{"class":128},[118,3302,3303],{"class":120,"line":1632},[118,3304,2533],{"class":128},[118,3306,3307],{"class":120,"line":1646},[118,3308,2574],{"class":124},[118,3310,3311],{"class":120,"line":1651},[118,3312,2514],{"class":128},[118,3314,3315,3317,3319,3321,3323],{"class":120,"line":1657},[118,3316,2519],{"class":128},[118,3318,1172],{"class":124},[118,3320,569],{"class":128},[118,3322,1172],{"class":124},[118,3324,1195],{"class":128},[118,3326,3327],{"class":120,"line":1678},[118,3328,2533],{"class":128},[118,3330,3331],{"class":120,"line":1683},[118,3332,2191],{"class":128},[118,3334,3335],{"class":120,"line":1697},[118,3336,1569],{"class":128},[15,3338,3339],{},"嵌套实现星图",[109,3341,3343],{"className":111,"code":3342,"language":113,"meta":39,"style":39},"#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",[115,3344,3345,3351,3361,3369,3373,3399,3403,3432,3436,3447,3451,3460,3464],{"__ignoreMap":39},[118,3346,3347,3349],{"class":120,"line":121},[118,3348,1953],{"class":124},[118,3350,1956],{"class":233},[118,3352,3353,3355,3357,3359],{"class":120,"line":40},[118,3354,1961],{"class":124},[118,3356,1964],{"class":124},[118,3358,1968],{"class":1967},[118,3360,1294],{"class":128},[118,3362,3363,3365,3367],{"class":120,"line":1183},[118,3364,132],{"class":124},[118,3366,1977],{"class":1967},[118,3368,1980],{"class":128},[118,3370,3371],{"class":120,"line":1198},[118,3372,1550],{"class":128},[118,3374,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397],{"class":120,"line":1204},[118,3376,3205],{"class":124},[118,3378,1662],{"class":128},[118,3380,132],{"class":124},[118,3382,3036],{"class":128},[118,3384,174],{"class":124},[118,3386,320],{"class":177},[118,3388,3043],{"class":128},[118,3390,1038],{"class":124},[118,3392,574],{"class":177},[118,3394,3043],{"class":128},[118,3396,2296],{"class":124},[118,3398,135],{"class":128},[118,3400,3401],{"class":120,"line":1218},[118,3402,2034],{"class":128},[118,3404,3405,3408,3410,3412,3415,3417,3419,3422,3424,3426,3428,3430],{"class":120,"line":1224},[118,3406,3407],{"class":124},"        for",[118,3409,1662],{"class":128},[118,3411,132],{"class":124},[118,3413,3414],{"class":128}," j",[118,3416,174],{"class":124},[118,3418,320],{"class":177},[118,3420,3421],{"class":128},";j",[118,3423,1038],{"class":124},[118,3425,574],{"class":177},[118,3427,3421],{"class":128},[118,3429,2296],{"class":124},[118,3431,135],{"class":128},[118,3433,3434],{"class":120,"line":1315},[118,3435,2514],{"class":128},[118,3437,3438,3440,3442,3445],{"class":120,"line":1321},[118,3439,2519],{"class":128},[118,3441,1172],{"class":124},[118,3443,3444],{"class":233},"\"*\"",[118,3446,1294],{"class":128},[118,3448,3449],{"class":120,"line":1333},[118,3450,2533],{"class":128},[118,3452,3453,3456,3458],{"class":120,"line":1616},[118,3454,3455],{"class":128},"        cout",[118,3457,1172],{"class":124},[118,3459,1195],{"class":128},[118,3461,3462],{"class":120,"line":1621},[118,3463,2191],{"class":128},[118,3465,3466],{"class":120,"line":1627},[118,3467,1569],{"class":128},[15,3469,3470],{},"乘法口诀表",[109,3472,3474],{"className":111,"code":3473,"language":113,"meta":39,"style":39},"#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",[115,3475,3476,3482,3492,3500,3504,3530,3534,3559,3563,3603,3607,3615,3619],{"__ignoreMap":39},[118,3477,3478,3480],{"class":120,"line":121},[118,3479,1953],{"class":124},[118,3481,2338],{"class":233},[118,3483,3484,3486,3488,3490],{"class":120,"line":40},[118,3485,1961],{"class":124},[118,3487,1964],{"class":124},[118,3489,1968],{"class":1967},[118,3491,1294],{"class":128},[118,3493,3494,3496,3498],{"class":120,"line":1183},[118,3495,132],{"class":124},[118,3497,1977],{"class":1967},[118,3499,1980],{"class":128},[118,3501,3502],{"class":120,"line":1198},[118,3503,1550],{"class":128},[118,3505,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528],{"class":120,"line":1204},[118,3507,3205],{"class":124},[118,3509,129],{"class":128},[118,3511,132],{"class":124},[118,3513,3036],{"class":128},[118,3515,174],{"class":124},[118,3517,346],{"class":177},[118,3519,3043],{"class":128},[118,3521,1038],{"class":124},[118,3523,574],{"class":177},[118,3525,3043],{"class":128},[118,3527,2296],{"class":124},[118,3529,135],{"class":128},[118,3531,3532],{"class":120,"line":1218},[118,3533,2034],{"class":128},[118,3535,3536,3538,3540,3542,3544,3546,3548,3550,3552,3555,3557],{"class":120,"line":1224},[118,3537,3407],{"class":124},[118,3539,129],{"class":128},[118,3541,132],{"class":124},[118,3543,3414],{"class":128},[118,3545,174],{"class":124},[118,3547,346],{"class":177},[118,3549,3421],{"class":128},[118,3551,1592],{"class":124},[118,3553,3554],{"class":128},"i;j",[118,3556,2296],{"class":124},[118,3558,135],{"class":128},[118,3560,3561],{"class":120,"line":1315},[118,3562,2514],{"class":128},[118,3564,3565,3567,3569,3571,3573,3575,3577,3579,3581,3584,3586,3588,3590,3592,3594,3597,3599,3601],{"class":120,"line":1321},[118,3566,2519],{"class":128},[118,3568,1172],{"class":124},[118,3570,595],{"class":128},[118,3572,1172],{"class":124},[118,3574,3444],{"class":233},[118,3576,1172],{"class":124},[118,3578,569],{"class":128},[118,3580,1172],{"class":124},[118,3582,3583],{"class":233},"\"=\"",[118,3585,1172],{"class":124},[118,3587,569],{"class":128},[118,3589,583],{"class":124},[118,3591,595],{"class":128},[118,3593,1172],{"class":124},[118,3595,3596],{"class":233},"'",[118,3598,1234],{"class":177},[118,3600,3596],{"class":233},[118,3602,1294],{"class":128},[118,3604,3605],{"class":120,"line":1333},[118,3606,2533],{"class":128},[118,3608,3609,3611,3613],{"class":120,"line":1616},[118,3610,3455],{"class":128},[118,3612,1172],{"class":124},[118,3614,1195],{"class":128},[118,3616,3617],{"class":120,"line":1621},[118,3618,2191],{"class":128},[118,3620,3621],{"class":120,"line":1627},[118,3622,1569],{"class":128},[89,3624,3626],{"id":3625},"_163跳出语句","1.6.3跳出语句",[72,3628,3629],{},[75,3630,3631],{},"break语句\n作用：用于跳出选择结构或者循环结构",[15,3633,3634],{},"break使用时机：",[1135,3636,3637,3640,3643],{},[75,3638,3639],{},"出现在switch条件语句中，作用是终止case并跳出switch",[75,3641,3642],{},"出现在循环结构中，作用是跳出当前的循环结构",[75,3644,3645],{},"出现在嵌套循环中，跳出最近的内层循环语句",[72,3647,3648,3651],{"start":40},[75,3649,3650],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[75,3652,3653],{},"goto语句\n语法：goto 标记;",[15,3655,3656],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[109,3658,3660],{"className":111,"code":3659,"language":113,"meta":39,"style":39},"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",[115,3661,3662,3670,3674,3687,3697,3710,3723,3736,3744,3760],{"__ignoreMap":39},[118,3663,3664,3666,3668],{"class":120,"line":121},[118,3665,132],{"class":124},[118,3667,1977],{"class":1967},[118,3669,1980],{"class":128},[118,3671,3672],{"class":120,"line":40},[118,3673,1550],{"class":128},[118,3675,3676,3678,3680,3683,3685],{"class":120,"line":1183},[118,3677,1555],{"class":128},[118,3679,1172],{"class":124},[118,3681,3682],{"class":233},"\"1\"",[118,3684,1172],{"class":124},[118,3686,1195],{"class":128},[118,3688,3689,3692,3695],{"class":120,"line":1198},[118,3690,3691],{"class":124},"    goto",[118,3693,3694],{"class":1967}," FLAG",[118,3696,1294],{"class":128},[118,3698,3699,3701,3703,3706,3708],{"class":120,"line":1204},[118,3700,1555],{"class":128},[118,3702,1172],{"class":124},[118,3704,3705],{"class":233},"\"2\"",[118,3707,1172],{"class":124},[118,3709,1195],{"class":128},[118,3711,3712,3714,3716,3719,3721],{"class":120,"line":1218},[118,3713,1555],{"class":128},[118,3715,1172],{"class":124},[118,3717,3718],{"class":233},"\"3\"",[118,3720,1172],{"class":124},[118,3722,1195],{"class":128},[118,3724,3725,3727,3729,3732,3734],{"class":120,"line":1224},[118,3726,1555],{"class":128},[118,3728,1172],{"class":124},[118,3730,3731],{"class":233},"\"4\"",[118,3733,1172],{"class":124},[118,3735,1195],{"class":128},[118,3737,3738,3741],{"class":120,"line":1315},[118,3739,3740],{"class":1967},"    FLAG",[118,3742,3743],{"class":128},":\n",[118,3745,3746,3748,3750,3753,3755,3757],{"class":120,"line":1321},[118,3747,1555],{"class":128},[118,3749,1172],{"class":124},[118,3751,3752],{"class":233},"\"5\"",[118,3754,1172],{"class":124},[118,3756,1242],{"class":128},[118,3758,3759],{"class":187},"\u002F\u002F跳过了2,3,4,直接到5\n",[118,3761,3762],{"class":120,"line":1333},[118,3763,1569],{"class":128},[60,3765,3767],{"id":3766},"_17数组","1.7数组",[89,3769,3771],{"id":3770},"_171一维数组","1.7.1一维数组",[72,3773,3774],{},[75,3775,3776],{},"一维数组定义方式",[266,3778,3779,3789],{},[269,3780,3781],{},[272,3782,3783,3786],{},[275,3784,3785],{},"方式",[275,3787,3788],{},"注意事项",[313,3790,3791,3805,3815],{},[272,3792,3793,3799],{},[318,3794,3795,3796,184],{},"数据类型 数组名",[118,3797,3798],{},"数组长度",[318,3800,3801,3802,3804],{},"这种方式是先定义再arr",[118,3803,569],{},"赋值",[272,3806,3807,3812],{},[318,3808,3795,3809,3811],{},[118,3810,3798],{},"={值1,值2....};",[318,3813,3814],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[272,3816,3817,3821],{},[318,3818,3795,3819,3811],{},[118,3820],{},[318,3822,3823,3824,3826],{},"int arr",[118,3825],{},";这是不正确的，按照这样的方式定义必须有初始长度",[72,3828,3829],{"start":40},[75,3830,3831],{},"一维数组数组名\n用途：",[1135,3833,3834],{},[75,3835,3836],{},"1.可以统计整个数组在内存中的长度：",[109,3838,3840],{"className":111,"code":3839,"language":113,"meta":39,"style":39},"sizeof(arr);\nsizeof(arr[0]);\n",[115,3841,3842,3849],{"__ignoreMap":39},[118,3843,3844,3846],{"class":120,"line":121},[118,3845,125],{"class":124},[118,3847,3848],{"class":128},"(arr);\n",[118,3850,3851,3853,3856,3858],{"class":120,"line":40},[118,3852,125],{"class":124},[118,3854,3855],{"class":128},"(arr[",[118,3857,320],{"class":177},[118,3859,3860],{"class":128},"]);\n",[1135,3862,3863],{},[75,3864,3865],{},"2.可以获取数组在内存中的首地址:",[109,3867,3869],{"className":111,"code":3868,"language":113,"meta":39,"style":39},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[115,3870,3871,3876,3889,3894],{"__ignoreMap":39},[118,3872,3873],{"class":120,"line":121},[118,3874,3875],{"class":187},"\u002F\u002F查看16进制的首地址\n",[118,3877,3878,3880,3882,3885,3887],{"class":120,"line":40},[118,3879,1373],{"class":128},[118,3881,1172],{"class":124},[118,3883,3884],{"class":128},"arr",[118,3886,1172],{"class":124},[118,3888,1195],{"class":128},[118,3890,3891],{"class":120,"line":1183},[118,3892,3893],{"class":187},"\u002F\u002F看10进制数\n",[118,3895,3896,3898,3900,3902,3904,3906,3908,3911,3913,3915,3917],{"class":120,"line":1198},[118,3897,1373],{"class":128},[118,3899,1172],{"class":124},[118,3901,129],{"class":128},[118,3903,132],{"class":124},[118,3905,557],{"class":128},[118,3907,481],{"class":124},[118,3909,3910],{"class":128},"arr[",[118,3912,320],{"class":177},[118,3914,1068],{"class":128},[118,3916,1172],{"class":124},[118,3918,1195],{"class":128},[15,3920,3921],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1135,3923,3924],{},[75,3925,3926],{},"1️⃣五只小猪称体重",[109,3928,3930],{"className":111,"code":3929,"language":113,"meta":39,"style":39},"#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",[115,3931,3932,3938,3948,3956,3960,4000,4013,4039,4043,4055,4059,4069,4073,4077,4090,4100],{"__ignoreMap":39},[118,3933,3934,3936],{"class":120,"line":121},[118,3935,1953],{"class":124},[118,3937,1956],{"class":233},[118,3939,3940,3942,3944,3946],{"class":120,"line":40},[118,3941,1961],{"class":124},[118,3943,1964],{"class":124},[118,3945,1968],{"class":1967},[118,3947,1294],{"class":128},[118,3949,3950,3952,3954],{"class":120,"line":1183},[118,3951,132],{"class":124},[118,3953,1977],{"class":1967},[118,3955,1980],{"class":128},[118,3957,3958],{"class":120,"line":1198},[118,3959,1550],{"class":128},[118,3961,3962,3964,3967,3969,3971,3973,3975,3978,3980,3983,3985,3987,3989,3992,3994,3997],{"class":120,"line":1204},[118,3963,1989],{"class":124},[118,3965,3966],{"class":128}," arr[",[118,3968,447],{"class":177},[118,3970,1068],{"class":128},[118,3972,174],{"class":124},[118,3974,1024],{"class":128},[118,3976,3977],{"class":177},"300",[118,3979,506],{"class":128},[118,3981,3982],{"class":177},"350",[118,3984,506],{"class":128},[118,3986,1726],{"class":177},[118,3988,506],{"class":128},[118,3990,3991],{"class":177},"400",[118,3993,506],{"class":128},[118,3995,3996],{"class":177},"250",[118,3998,3999],{"class":128},"};\n",[118,4001,4002,4004,4007,4009,4011],{"class":120,"line":1218},[118,4003,1989],{"class":124},[118,4005,4006],{"class":128}," tmp",[118,4008,174],{"class":124},[118,4010,320],{"class":177},[118,4012,1294],{"class":128},[118,4014,4015,4017,4019,4021,4023,4025,4027,4029,4031,4033,4035,4037],{"class":120,"line":1224},[118,4016,3205],{"class":124},[118,4018,1662],{"class":128},[118,4020,132],{"class":124},[118,4022,3036],{"class":128},[118,4024,174],{"class":124},[118,4026,320],{"class":177},[118,4028,3043],{"class":128},[118,4030,1038],{"class":124},[118,4032,447],{"class":177},[118,4034,3043],{"class":128},[118,4036,2296],{"class":124},[118,4038,135],{"class":128},[118,4040,4041],{"class":120,"line":1315},[118,4042,2034],{"class":128},[118,4044,4045,4047,4050,4052],{"class":120,"line":1321},[118,4046,2501],{"class":124},[118,4048,4049],{"class":128},"(tmp",[118,4051,1038],{"class":124},[118,4053,4054],{"class":128},"arr[i])\n",[118,4056,4057],{"class":120,"line":1333},[118,4058,2514],{"class":128},[118,4060,4061,4064,4066],{"class":120,"line":1616},[118,4062,4063],{"class":128},"            tmp",[118,4065,174],{"class":124},[118,4067,4068],{"class":128},"arr[i];\n",[118,4070,4071],{"class":120,"line":1621},[118,4072,2533],{"class":128},[118,4074,4075],{"class":120,"line":1627},[118,4076,2191],{"class":128},[118,4078,4079,4081,4083,4086,4088],{"class":120,"line":1632},[118,4080,1555],{"class":128},[118,4082,1172],{"class":124},[118,4084,4085],{"class":128},"tmp",[118,4087,1172],{"class":124},[118,4089,1195],{"class":128},[118,4091,4092,4095,4098],{"class":120,"line":1646},[118,4093,4094],{"class":124},"    return",[118,4096,4097],{"class":177}," 0",[118,4099,1294],{"class":128},[118,4101,4102],{"class":120,"line":1651},[118,4103,1569],{"class":128},[1135,4105,4106],{},[75,4107,4108],{},"2️⃣数组元素逆置",[109,4110,4112],{"className":111,"code":4111,"language":113,"meta":39,"style":39},"\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",[115,4113,4114,4119,4125,4135,4143,4147,4182,4198,4230,4243,4248,4253,4265,4275,4285,4290,4299,4309,4314,4319,4346,4350,4366,4370,4381,4390],{"__ignoreMap":39},[118,4115,4116],{"class":120,"line":121},[118,4117,4118],{"class":187},"\u002F\u002F元素逆置\n",[118,4120,4121,4123],{"class":120,"line":40},[118,4122,1953],{"class":124},[118,4124,1956],{"class":233},[118,4126,4127,4129,4131,4133],{"class":120,"line":1183},[118,4128,1961],{"class":124},[118,4130,1964],{"class":124},[118,4132,1968],{"class":1967},[118,4134,1294],{"class":128},[118,4136,4137,4139,4141],{"class":120,"line":1198},[118,4138,132],{"class":124},[118,4140,1977],{"class":1967},[118,4142,1980],{"class":128},[118,4144,4145],{"class":120,"line":1204},[118,4146,1550],{"class":128},[118,4148,4149,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180],{"class":120,"line":1218},[118,4150,4151],{"class":124},"   int",[118,4153,3966],{"class":128},[118,4155,447],{"class":177},[118,4157,1068],{"class":128},[118,4159,174],{"class":124},[118,4161,1024],{"class":128},[118,4163,346],{"class":177},[118,4165,506],{"class":128},[118,4167,206],{"class":177},[118,4169,506],{"class":128},[118,4171,200],{"class":177},[118,4173,506],{"class":128},[118,4175,421],{"class":177},[118,4177,506],{"class":128},[118,4179,447],{"class":177},[118,4181,3999],{"class":128},[118,4183,4184,4186,4189,4191,4193,4195],{"class":120,"line":1224},[118,4185,4151],{"class":124},[118,4187,4188],{"class":128}," start",[118,4190,174],{"class":124},[118,4192,320],{"class":177},[118,4194,184],{"class":128},[118,4196,4197],{"class":187},"\u002F\u002F起始下标\n",[118,4199,4200,4202,4205,4208,4211,4214,4216,4218,4221,4223,4225,4227],{"class":120,"line":1315},[118,4201,4151],{"class":124},[118,4203,4204],{"class":128}," end",[118,4206,4207],{"class":124},"=sizeof",[118,4209,4210],{"class":128},"(arr)",[118,4212,4213],{"class":124},"\u002Fsizeof",[118,4215,3855],{"class":128},[118,4217,320],{"class":177},[118,4219,4220],{"class":128},"])",[118,4222,660],{"class":124},[118,4224,346],{"class":177},[118,4226,184],{"class":128},[118,4228,4229],{"class":187},"\u002F\u002F结束下标\n",[118,4231,4232,4235,4238,4240],{"class":120,"line":1321},[118,4233,4234],{"class":124},"   while",[118,4236,4237],{"class":128}," (start",[118,4239,1038],{"class":124},[118,4241,4242],{"class":128},"end)\n",[118,4244,4245],{"class":120,"line":1333},[118,4246,4247],{"class":128},"   {\n",[118,4249,4250],{"class":120,"line":1616},[118,4251,4252],{"class":187},"    \u002F\u002F实现元素互换代码\n",[118,4254,4255,4257,4260,4262],{"class":120,"line":1621},[118,4256,1989],{"class":124},[118,4258,4259],{"class":128}," temp",[118,4261,174],{"class":124},[118,4263,4264],{"class":128},"arr[start];\n",[118,4266,4267,4270,4272],{"class":120,"line":1627},[118,4268,4269],{"class":128},"    arr[start]",[118,4271,174],{"class":124},[118,4273,4274],{"class":128},"arr[end];\n",[118,4276,4277,4280,4282],{"class":120,"line":1632},[118,4278,4279],{"class":128},"    arr[end]",[118,4281,174],{"class":124},[118,4283,4284],{"class":128},"temp;\n",[118,4286,4287],{"class":120,"line":1646},[118,4288,4289],{"class":187},"    \u002F\u002F下标更新\n",[118,4291,4292,4295,4297],{"class":120,"line":1651},[118,4293,4294],{"class":128},"    start",[118,4296,2296],{"class":124},[118,4298,1294],{"class":128},[118,4300,4301,4304,4307],{"class":120,"line":1657},[118,4302,4303],{"class":128},"    end",[118,4305,4306],{"class":124},"--",[118,4308,1294],{"class":128},[118,4310,4311],{"class":120,"line":1678},[118,4312,4313],{"class":128},"   }\n",[118,4315,4316],{"class":120,"line":1683},[118,4317,4318],{"class":187},"   \u002F\u002F输出逆置后的数组\n",[118,4320,4321,4324,4326,4328,4330,4332,4334,4336,4338,4340,4342,4344],{"class":120,"line":1697},[118,4322,4323],{"class":124},"   for",[118,4325,1662],{"class":128},[118,4327,132],{"class":124},[118,4329,3036],{"class":128},[118,4331,174],{"class":124},[118,4333,320],{"class":177},[118,4335,3043],{"class":128},[118,4337,1038],{"class":124},[118,4339,447],{"class":177},[118,4341,3043],{"class":128},[118,4343,2296],{"class":124},[118,4345,135],{"class":128},[118,4347,4348],{"class":120,"line":1702},[118,4349,4247],{"class":128},[118,4351,4352,4354,4356,4359,4361,4364],{"class":120,"line":1731},[118,4353,1555],{"class":128},[118,4355,1172],{"class":124},[118,4357,4358],{"class":128},"arr[i]",[118,4360,1172],{"class":124},[118,4362,4363],{"class":233},"\" \"",[118,4365,1294],{"class":128},[118,4367,4368],{"class":120,"line":1736},[118,4369,4313],{"class":128},[118,4371,4372,4375,4377,4379],{"class":120,"line":1753},[118,4373,4374],{"class":1967},"   system",[118,4376,129],{"class":128},[118,4378,2312],{"class":233},[118,4380,2723],{"class":128},[118,4382,4383,4386,4388],{"class":120,"line":1758},[118,4384,4385],{"class":124},"   return",[118,4387,4097],{"class":177},[118,4389,1294],{"class":128},[118,4391,4392],{"class":120,"line":1763},[118,4393,1569],{"class":128},[1135,4395,4396],{},[75,4397,4398],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[109,4400,4402],{"className":111,"code":4401,"language":113,"meta":39,"style":39},"\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",[115,4403,4404,4409,4415,4425,4433,4437,4489,4502,4528,4532,4546,4550,4555,4560,4590,4594,4599,4633,4637,4642,4662,4667,4679,4695,4710,4715,4719,4723,4736,4762,4766,4780,4784,4792],{"__ignoreMap":39},[118,4405,4406],{"class":120,"line":121},[118,4407,4408],{"class":187},"\u002F\u002F冒泡排序,升序\n",[118,4410,4411,4413],{"class":120,"line":40},[118,4412,1953],{"class":124},[118,4414,1956],{"class":233},[118,4416,4417,4419,4421,4423],{"class":120,"line":1183},[118,4418,1961],{"class":124},[118,4420,1964],{"class":124},[118,4422,1968],{"class":1967},[118,4424,1294],{"class":128},[118,4426,4427,4429,4431],{"class":120,"line":1198},[118,4428,132],{"class":124},[118,4430,1977],{"class":1967},[118,4432,1980],{"class":128},[118,4434,4435],{"class":120,"line":1204},[118,4436,1550],{"class":128},[118,4438,4439,4441,4443,4445,4448,4450,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485,4487],{"class":120,"line":1218},[118,4440,1989],{"class":124},[118,4442,3966],{"class":128},[118,4444,548],{"class":177},[118,4446,4447],{"class":128},"] ",[118,4449,174],{"class":124},[118,4451,4452],{"class":128}," {",[118,4454,421],{"class":177},[118,4456,506],{"class":128},[118,4458,206],{"class":177},[118,4460,506],{"class":128},[118,4462,523],{"class":177},[118,4464,506],{"class":128},[118,4466,320],{"class":177},[118,4468,506],{"class":128},[118,4470,447],{"class":177},[118,4472,506],{"class":128},[118,4474,497],{"class":177},[118,4476,506],{"class":128},[118,4478,346],{"class":177},[118,4480,506],{"class":128},[118,4482,200],{"class":177},[118,4484,506],{"class":128},[118,4486,548],{"class":177},[118,4488,3999],{"class":128},[118,4490,4491,4493,4495,4498,4500],{"class":120,"line":1224},[118,4492,1555],{"class":128},[118,4494,1172],{"class":124},[118,4496,4497],{"class":233},"\"排序前：\"",[118,4499,1172],{"class":124},[118,4501,1195],{"class":128},[118,4503,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526],{"class":120,"line":1315},[118,4505,3205],{"class":124},[118,4507,1662],{"class":128},[118,4509,132],{"class":124},[118,4511,3036],{"class":128},[118,4513,174],{"class":124},[118,4515,320],{"class":177},[118,4517,3043],{"class":128},[118,4519,1038],{"class":124},[118,4521,548],{"class":177},[118,4523,3043],{"class":128},[118,4525,2296],{"class":124},[118,4527,135],{"class":128},[118,4529,4530],{"class":120,"line":1321},[118,4531,2034],{"class":128},[118,4533,4534,4536,4538,4540,4542,4544],{"class":120,"line":1333},[118,4535,3455],{"class":128},[118,4537,1172],{"class":124},[118,4539,4358],{"class":128},[118,4541,1172],{"class":124},[118,4543,4363],{"class":233},[118,4545,1294],{"class":128},[118,4547,4548],{"class":120,"line":1616},[118,4549,2191],{"class":128},[118,4551,4552],{"class":120,"line":1621},[118,4553,4554],{"class":187},"    \u002F\u002F开始冒泡排序\n",[118,4556,4557],{"class":120,"line":1627},[118,4558,4559],{"class":187},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[118,4561,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4588],{"class":120,"line":1632},[118,4563,3205],{"class":124},[118,4565,1662],{"class":128},[118,4567,132],{"class":124},[118,4569,3036],{"class":128},[118,4571,174],{"class":124},[118,4573,320],{"class":177},[118,4575,3043],{"class":128},[118,4577,1038],{"class":124},[118,4579,548],{"class":177},[118,4581,660],{"class":124},[118,4583,346],{"class":177},[118,4585,3043],{"class":128},[118,4587,2296],{"class":124},[118,4589,135],{"class":128},[118,4591,4592],{"class":120,"line":1646},[118,4593,2034],{"class":128},[118,4595,4596],{"class":120,"line":1651},[118,4597,4598],{"class":187},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[118,4600,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627,4629,4631],{"class":120,"line":1657},[118,4602,3407],{"class":124},[118,4604,1662],{"class":128},[118,4606,132],{"class":124},[118,4608,3414],{"class":128},[118,4610,174],{"class":124},[118,4612,320],{"class":177},[118,4614,3421],{"class":128},[118,4616,1038],{"class":124},[118,4618,548],{"class":177},[118,4620,660],{"class":124},[118,4622,569],{"class":128},[118,4624,660],{"class":124},[118,4626,346],{"class":177},[118,4628,3421],{"class":128},[118,4630,2296],{"class":124},[118,4632,135],{"class":128},[118,4634,4635],{"class":120,"line":1678},[118,4636,2514],{"class":128},[118,4638,4639],{"class":120,"line":1683},[118,4640,4641],{"class":187},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[118,4643,4644,4647,4650,4652,4655,4657,4659],{"class":120,"line":1697},[118,4645,4646],{"class":124},"            if",[118,4648,4649],{"class":128},"(arr[j]",[118,4651,1088],{"class":124},[118,4653,4654],{"class":128},"arr[j",[118,4656,609],{"class":124},[118,4658,346],{"class":177},[118,4660,4661],{"class":128},"])\n",[118,4663,4664],{"class":120,"line":1702},[118,4665,4666],{"class":128},"            {\n",[118,4668,4669,4672,4674,4676],{"class":120,"line":1731},[118,4670,4671],{"class":124},"                int",[118,4673,4259],{"class":128},[118,4675,174],{"class":124},[118,4677,4678],{"class":128},"arr[j];\n",[118,4680,4681,4684,4686,4688,4690,4692],{"class":120,"line":1736},[118,4682,4683],{"class":128},"                arr[j]",[118,4685,174],{"class":124},[118,4687,4654],{"class":128},[118,4689,609],{"class":124},[118,4691,346],{"class":177},[118,4693,4694],{"class":128},"];\n",[118,4696,4697,4700,4702,4704,4706,4708],{"class":120,"line":1753},[118,4698,4699],{"class":128},"                arr[j",[118,4701,609],{"class":124},[118,4703,346],{"class":177},[118,4705,1068],{"class":128},[118,4707,174],{"class":124},[118,4709,4284],{"class":128},[118,4711,4712],{"class":120,"line":1758},[118,4713,4714],{"class":128},"            }\n",[118,4716,4717],{"class":120,"line":1763},[118,4718,2533],{"class":128},[118,4720,4721],{"class":120,"line":1768},[118,4722,2191],{"class":128},[118,4724,4725,4727,4729,4732,4734],{"class":120,"line":1782},[118,4726,1555],{"class":128},[118,4728,1172],{"class":124},[118,4730,4731],{"class":233},"\"排序后：\"",[118,4733,1172],{"class":124},[118,4735,1195],{"class":128},[118,4737,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760],{"class":120,"line":1787},[118,4739,3205],{"class":124},[118,4741,1662],{"class":128},[118,4743,132],{"class":124},[118,4745,3036],{"class":128},[118,4747,174],{"class":124},[118,4749,320],{"class":177},[118,4751,3043],{"class":128},[118,4753,1038],{"class":124},[118,4755,548],{"class":177},[118,4757,3043],{"class":128},[118,4759,2296],{"class":124},[118,4761,135],{"class":128},[118,4763,4764],{"class":120,"line":2581},[118,4765,2034],{"class":128},[118,4767,4768,4770,4772,4774,4776,4778],{"class":120,"line":2595},[118,4769,3455],{"class":128},[118,4771,1172],{"class":124},[118,4773,4358],{"class":128},[118,4775,1172],{"class":124},[118,4777,4363],{"class":233},[118,4779,1294],{"class":128},[118,4781,4782],{"class":120,"line":2603},[118,4783,2191],{"class":128},[118,4785,4786,4788,4790],{"class":120,"line":2608},[118,4787,4094],{"class":124},[118,4789,4097],{"class":177},[118,4791,1294],{"class":128},[118,4793,4794],{"class":120,"line":2614},[118,4795,1569],{"class":128},[89,4797,4799],{"id":4798},"_172二维数组","1.7.2二维数组",[72,4801,4802],{},[75,4803,4804],{},"二维数组的四种定义方式",[266,4806,4807,4816],{},[269,4808,4809],{},[272,4810,4811,4814],{},[275,4812,4813],{},"序号",[275,4815,3785],{},[313,4817,4818,4828,4837,4846,4855],{},[272,4819,4820,4822],{},[318,4821,346],{},[318,4823,4824,4825,184],{},"数据类型 数组名[行数]",[118,4826,4827],{},"列数",[272,4829,4830,4832],{},[318,4831,206],{},[318,4833,4824,4834,4836],{},[118,4835,4827],{},"={ {数据1,数据2}，{数据3，数据4}... }",[272,4838,4839,4841],{},[318,4840,200],{},[318,4842,4824,4843,4845],{},[118,4844,4827],{},"={数据1,数据2,数据3...}",[272,4847,4848,4850],{},[318,4849,421],{},[318,4851,4852,4853,4845],{},"数据类型 数组名[]",[118,4854,4827],{},[272,4856,4857,4860],{},[318,4858,4859],{},"注意：不能只省略列数",[318,4861],{},[72,4863,4864],{"start":40},[75,4865,4866],{},"二维数组数组名",[1135,4868,4869,4872],{},[75,4870,4871],{},"1.查看二维数组所占内存空间",[75,4873,4874],{},"2.获取二维数组首地址",[15,4876,4877],{},"已知二维数组，求二维数组的行数与列数",[109,4879,4881],{"className":111,"code":4880,"language":113,"meta":39,"style":39},"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",[115,4882,4883,4891,4895,4913,4917,4935,4951,4956,4981,5014],{"__ignoreMap":39},[118,4884,4885,4887,4889],{"class":120,"line":121},[118,4886,132],{"class":124},[118,4888,1977],{"class":1967},[118,4890,1980],{"class":128},[118,4892,4893],{"class":120,"line":40},[118,4894,1550],{"class":128},[118,4896,4897,4899,4901,4903,4906,4908,4910],{"class":120,"line":1183},[118,4898,1989],{"class":124},[118,4900,3966],{"class":128},[118,4902,206],{"class":177},[118,4904,4905],{"class":128},"][",[118,4907,200],{"class":177},[118,4909,1068],{"class":128},[118,4911,4912],{"class":124},"=\n",[118,4914,4915],{"class":120,"line":1198},[118,4916,2034],{"class":128},[118,4918,4919,4922,4924,4926,4928,4930,4932],{"class":120,"line":1204},[118,4920,4921],{"class":128},"        {",[118,4923,346],{"class":177},[118,4925,506],{"class":128},[118,4927,206],{"class":177},[118,4929,506],{"class":128},[118,4931,200],{"class":177},[118,4933,4934],{"class":128},"},\n",[118,4936,4937,4939,4941,4943,4945,4947,4949],{"class":120,"line":1218},[118,4938,4921],{"class":128},[118,4940,421],{"class":177},[118,4942,506],{"class":128},[118,4944,447],{"class":177},[118,4946,506],{"class":128},[118,4948,472],{"class":177},[118,4950,1569],{"class":128},[118,4952,4953],{"class":120,"line":1224},[118,4954,4955],{"class":128},"    };\n",[118,4957,4958,4960,4962,4965,4967,4969,4971,4973,4975,4977,4979],{"class":120,"line":1315},[118,4959,1555],{"class":128},[118,4961,1172],{"class":124},[118,4963,4964],{"class":233},"\"二维数组的行数\"",[118,4966,1376],{"class":124},[118,4968,4210],{"class":128},[118,4970,4213],{"class":124},[118,4972,3855],{"class":128},[118,4974,320],{"class":177},[118,4976,4220],{"class":128},[118,4978,1172],{"class":124},[118,4980,1195],{"class":128},[118,4982,4983,4985,4987,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010,5012],{"class":120,"line":1321},[118,4984,1555],{"class":128},[118,4986,1172],{"class":124},[118,4988,4989],{"class":233},"\"二维数组的列数\"",[118,4991,1376],{"class":124},[118,4993,3855],{"class":128},[118,4995,320],{"class":177},[118,4997,4220],{"class":128},[118,4999,4213],{"class":124},[118,5001,3855],{"class":128},[118,5003,320],{"class":177},[118,5005,4905],{"class":128},[118,5007,320],{"class":177},[118,5009,4220],{"class":128},[118,5011,1172],{"class":124},[118,5013,1195],{"class":128},[118,5015,5016],{"class":120,"line":1333},[118,5017,1569],{"class":128},[15,5019,5020],{},"查看二维数组首地址",[109,5022,5024],{"className":111,"code":5023,"language":113,"meta":39,"style":39},"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",[115,5025,5026,5043,5069,5094],{"__ignoreMap":39},[118,5027,5028,5030,5032,5035,5037,5039,5041],{"class":120,"line":121},[118,5029,1373],{"class":128},[118,5031,1172],{"class":124},[118,5033,5034],{"class":233},"\"二维数组首地址：\"",[118,5036,1172],{"class":124},[118,5038,3884],{"class":128},[118,5040,1172],{"class":124},[118,5042,1195],{"class":128},[118,5044,5045,5047,5049,5052,5054,5056,5058,5061,5063,5065,5067],{"class":120,"line":40},[118,5046,1373],{"class":128},[118,5048,1172],{"class":124},[118,5050,5051],{"class":233},"\"二维数组第一行的首地址：\"",[118,5053,1172],{"class":124},[118,5055,129],{"class":128},[118,5057,132],{"class":124},[118,5059,5060],{"class":128},")arr[",[118,5062,320],{"class":177},[118,5064,1068],{"class":128},[118,5066,1172],{"class":124},[118,5068,1195],{"class":128},[118,5070,5071,5073,5075,5078,5080,5082,5084,5086,5088,5090,5092],{"class":120,"line":1183},[118,5072,1373],{"class":128},[118,5074,1172],{"class":124},[118,5076,5077],{"class":233},"\"二维数组第二行的首地址：\"",[118,5079,1172],{"class":124},[118,5081,129],{"class":128},[118,5083,132],{"class":124},[118,5085,5060],{"class":128},[118,5087,346],{"class":177},[118,5089,1068],{"class":128},[118,5091,1172],{"class":124},[118,5093,1195],{"class":128},[118,5095,5096,5098,5100,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123,5125,5127],{"class":120,"line":1198},[118,5097,1373],{"class":128},[118,5099,1172],{"class":124},[118,5101,5102],{"class":233},"\"二维数组第一个元素的首地址:\"",[118,5104,1172],{"class":124},[118,5106,129],{"class":128},[118,5108,132],{"class":124},[118,5110,557],{"class":128},[118,5112,481],{"class":124},[118,5114,3910],{"class":128},[118,5116,320],{"class":177},[118,5118,4905],{"class":128},[118,5120,320],{"class":177},[118,5122,1068],{"class":128},[118,5124,1172],{"class":124},[118,5126,1242],{"class":128},[118,5128,5129],{"class":187},"\u002F\u002F对于数，要加取址符\n",[5131,5132,5133],"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":39,"searchDepth":40,"depth":40,"links":5135},[5136,5137,5138,5146,5147,5153,5158],{"id":62,"depth":40,"text":63},{"id":69,"depth":40,"text":70},{"id":86,"depth":40,"text":87,"children":5139},[5140,5141,5142,5143,5144,5145],{"id":91,"depth":1183,"text":92},{"id":145,"depth":1183,"text":146},{"id":214,"depth":1183,"text":215},{"id":1153,"depth":1183,"text":1154},{"id":1248,"depth":1183,"text":1249},{"id":1347,"depth":1183,"text":1348},{"id":1389,"depth":40,"text":1390},{"id":1457,"depth":40,"text":1458,"children":5148},[5149,5150,5151,5152],{"id":1461,"depth":1183,"text":1462},{"id":1483,"depth":1183,"text":1484},{"id":1492,"depth":1183,"text":1493},{"id":1501,"depth":1183,"text":1502},{"id":1510,"depth":40,"text":1511,"children":5154},[5155,5156,5157],{"id":1514,"depth":1183,"text":1515},{"id":2209,"depth":1183,"text":2210},{"id":3625,"depth":1183,"text":3626},{"id":3766,"depth":40,"text":3767,"children":5159},[5160,5161],{"id":3770,"depth":1183,"text":3771},{"id":4798,"depth":1183,"text":4799},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":53,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5168,"title":5169,"body":5170,"description":39,"extension":43,"meta":6270,"navigation":45,"path":6271,"seo":6272,"stem":6273,"__hash__":6274},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5171,"toc":6262},[5172,5175,5179,5187,5195,5198,5264,5268,5271,5347,5351,5354,5357,5360,5573,5577,5582,5646,5651,5718,5723,5814,5817,5922,5926,5929,5935,6079,6083,6086,6100,6103,6148,6151,6259],[10,5173,5169],{"id":5174},"_2函数",[60,5176,5178],{"id":5177},"_21函数概述","2.1函数概述",[72,5180,5181,5184],{},[75,5182,5183],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[75,5185,5186],{},"语法：",[109,5188,5193],{"className":5189,"code":5191,"language":5192,"meta":39},[5190],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[115,5194,5191],{"__ignoreMap":39},[15,5196,5197],{},"小案例",[109,5199,5201],{"className":111,"code":5200,"language":113,"meta":39,"style":39},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[115,5202,5203,5208,5232,5236,5253,5260],{"__ignoreMap":39},[118,5204,5205],{"class":120,"line":121},[118,5206,5207],{"class":187},"\u002F\u002Fnum1,num2形参\n",[118,5209,5210,5212,5215,5217,5219,5223,5225,5227,5230],{"class":120,"line":40},[118,5211,132],{"class":124},[118,5213,5214],{"class":1967}," add",[118,5216,129],{"class":128},[118,5218,132],{"class":124},[118,5220,5222],{"class":5221},"s4XuR"," num1",[118,5224,506],{"class":128},[118,5226,132],{"class":124},[118,5228,5229],{"class":5221}," num2",[118,5231,135],{"class":128},[118,5233,5234],{"class":120,"line":1183},[118,5235,1550],{"class":128},[118,5237,5238,5240,5243,5245,5248,5250],{"class":120,"line":1198},[118,5239,1989],{"class":124},[118,5241,5242],{"class":128}," sum",[118,5244,174],{"class":124},[118,5246,5247],{"class":128},"num1",[118,5249,609],{"class":124},[118,5251,5252],{"class":128},"num2;\n",[118,5254,5255,5257],{"class":120,"line":1204},[118,5256,4094],{"class":124},[118,5258,5259],{"class":128}," sum;\n",[118,5261,5262],{"class":120,"line":1218},[118,5263,1569],{"class":128},[60,5265,5267],{"id":5266},"_22函数调用","2.2函数调用",[15,5269,5270],{},"调用刚刚写的求和函数",[109,5272,5274],{"className":111,"code":5273,"language":113,"meta":39,"style":39},"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",[115,5275,5276,5284,5288,5293,5305,5317,5326,5331,5343],{"__ignoreMap":39},[118,5277,5278,5280,5282],{"class":120,"line":121},[118,5279,132],{"class":124},[118,5281,1977],{"class":1967},[118,5283,1980],{"class":128},[118,5285,5286],{"class":120,"line":40},[118,5287,1550],{"class":128},[118,5289,5290],{"class":120,"line":1183},[118,5291,5292],{"class":187},"    \u002F\u002Fa,b实参\n",[118,5294,5295,5297,5299,5301,5303],{"class":120,"line":1198},[118,5296,1989],{"class":124},[118,5298,1402],{"class":128},[118,5300,174],{"class":124},[118,5302,320],{"class":177},[118,5304,1294],{"class":128},[118,5306,5307,5309,5311,5313,5315],{"class":120,"line":1204},[118,5308,1989],{"class":124},[118,5310,2837],{"class":128},[118,5312,174],{"class":124},[118,5314,320],{"class":177},[118,5316,1294],{"class":128},[118,5318,5319,5321,5323],{"class":120,"line":1218},[118,5320,2016],{"class":128},[118,5322,1433],{"class":124},[118,5324,5325],{"class":128},"a,b;\n",[118,5327,5328],{"class":120,"line":1224},[118,5329,5330],{"class":187},"    \u002F\u002F调用函数时，实参值传给了形参\n",[118,5332,5333,5335,5337,5340],{"class":120,"line":1315},[118,5334,1555],{"class":128},[118,5336,1172],{"class":124},[118,5338,5339],{"class":1967},"add",[118,5341,5342],{"class":128},"(a,b);\n",[118,5344,5345],{"class":120,"line":1321},[118,5346,1569],{"class":128},[60,5348,5350],{"id":5349},"_23值传递","2.3值传递",[15,5352,5353],{},"值传递就是函数调用时实参将数值传给形参",[15,5355,5356],{},"值传递时，如果形参发生任何改变，不会影响实参",[15,5358,5359],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[109,5361,5363],{"className":111,"code":5362,"language":113,"meta":39,"style":39},"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",[115,5364,5365,5387,5391,5404,5421,5439,5450,5459,5468,5481,5497,5513,5522,5526,5534,5538,5550,5562,5569],{"__ignoreMap":39},[118,5366,5367,5370,5373,5375,5377,5379,5381,5383,5385],{"class":120,"line":121},[118,5368,5369],{"class":124},"void",[118,5371,5372],{"class":1967}," swap",[118,5374,129],{"class":128},[118,5376,132],{"class":124},[118,5378,5222],{"class":5221},[118,5380,506],{"class":128},[118,5382,132],{"class":124},[118,5384,5229],{"class":5221},[118,5386,135],{"class":128},[118,5388,5389],{"class":120,"line":40},[118,5390,1550],{"class":128},[118,5392,5393,5395,5397,5400,5402],{"class":120,"line":1183},[118,5394,1555],{"class":128},[118,5396,1172],{"class":124},[118,5398,5399],{"class":233},"\"交换前：\"",[118,5401,1172],{"class":124},[118,5403,1195],{"class":128},[118,5405,5406,5408,5410,5413,5415,5417,5419],{"class":120,"line":1198},[118,5407,1555],{"class":128},[118,5409,1172],{"class":124},[118,5411,5412],{"class":233},"\"num1=\"",[118,5414,1172],{"class":124},[118,5416,5247],{"class":128},[118,5418,1172],{"class":124},[118,5420,1195],{"class":128},[118,5422,5423,5425,5427,5430,5432,5435,5437],{"class":120,"line":1204},[118,5424,1555],{"class":128},[118,5426,1172],{"class":124},[118,5428,5429],{"class":233},"\"num2=\"",[118,5431,1172],{"class":124},[118,5433,5434],{"class":128},"num2",[118,5436,1172],{"class":124},[118,5438,1195],{"class":128},[118,5440,5441,5443,5445,5447],{"class":120,"line":1218},[118,5442,1989],{"class":124},[118,5444,4259],{"class":128},[118,5446,174],{"class":124},[118,5448,5449],{"class":128},"num1;\n",[118,5451,5452,5455,5457],{"class":120,"line":1224},[118,5453,5454],{"class":128},"    num1",[118,5456,174],{"class":124},[118,5458,5252],{"class":128},[118,5460,5461,5464,5466],{"class":120,"line":1315},[118,5462,5463],{"class":128},"    num2",[118,5465,174],{"class":124},[118,5467,4284],{"class":128},[118,5469,5470,5472,5474,5477,5479],{"class":120,"line":1321},[118,5471,1555],{"class":128},[118,5473,1172],{"class":124},[118,5475,5476],{"class":233},"\"交换后：\"",[118,5478,1172],{"class":124},[118,5480,1195],{"class":128},[118,5482,5483,5485,5487,5489,5491,5493,5495],{"class":120,"line":1333},[118,5484,1555],{"class":128},[118,5486,1172],{"class":124},[118,5488,5412],{"class":233},[118,5490,1172],{"class":124},[118,5492,5247],{"class":128},[118,5494,1172],{"class":124},[118,5496,1195],{"class":128},[118,5498,5499,5501,5503,5505,5507,5509,5511],{"class":120,"line":1616},[118,5500,1555],{"class":128},[118,5502,1172],{"class":124},[118,5504,5429],{"class":233},[118,5506,1172],{"class":124},[118,5508,5434],{"class":128},[118,5510,1172],{"class":124},[118,5512,1195],{"class":128},[118,5514,5515,5517,5519],{"class":120,"line":1621},[118,5516,4094],{"class":124},[118,5518,184],{"class":128},[118,5520,5521],{"class":187},"\u002F\u002F或者不写\n",[118,5523,5524],{"class":120,"line":1627},[118,5525,1569],{"class":128},[118,5527,5528,5530,5532],{"class":120,"line":1632},[118,5529,132],{"class":124},[118,5531,1977],{"class":1967},[118,5533,1980],{"class":128},[118,5535,5536],{"class":120,"line":1646},[118,5537,1550],{"class":128},[118,5539,5540,5542,5544,5546,5548],{"class":120,"line":1651},[118,5541,1989],{"class":124},[118,5543,1402],{"class":128},[118,5545,174],{"class":124},[118,5547,574],{"class":177},[118,5549,1294],{"class":128},[118,5551,5552,5554,5556,5558,5560],{"class":120,"line":1657},[118,5553,1989],{"class":124},[118,5555,2837],{"class":128},[118,5557,174],{"class":124},[118,5559,828],{"class":177},[118,5561,1294],{"class":128},[118,5563,5564,5567],{"class":120,"line":1678},[118,5565,5566],{"class":1967},"    swap",[118,5568,5342],{"class":128},[118,5570,5571],{"class":120,"line":1683},[118,5572,1569],{"class":128},[60,5574,5576],{"id":5575},"_24函数的常见形式","2.4函数的常见形式",[72,5578,5579],{},[75,5580,5581],{},"无参无返",[109,5583,5585],{"className":111,"code":5584,"language":113,"meta":39,"style":39},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[115,5586,5587,5596,5600,5613,5617,5625,5629,5634,5642],{"__ignoreMap":39},[118,5588,5589,5591,5594],{"class":120,"line":121},[118,5590,5369],{"class":124},[118,5592,5593],{"class":1967}," test01",[118,5595,1980],{"class":128},[118,5597,5598],{"class":120,"line":40},[118,5599,1550],{"class":128},[118,5601,5602,5604,5606,5609,5611],{"class":120,"line":1183},[118,5603,1555],{"class":128},[118,5605,1172],{"class":124},[118,5607,5608],{"class":233},"\"你好\"",[118,5610,1172],{"class":124},[118,5612,1195],{"class":128},[118,5614,5615],{"class":120,"line":1198},[118,5616,1569],{"class":128},[118,5618,5619,5621,5623],{"class":120,"line":1204},[118,5620,132],{"class":124},[118,5622,1977],{"class":1967},[118,5624,1980],{"class":128},[118,5626,5627],{"class":120,"line":1218},[118,5628,1550],{"class":128},[118,5630,5631],{"class":120,"line":1224},[118,5632,5633],{"class":187},"    \u002F\u002F函数调用\n",[118,5635,5636,5639],{"class":120,"line":1315},[118,5637,5638],{"class":1967},"    test01",[118,5640,5641],{"class":128},"();\n",[118,5643,5644],{"class":120,"line":1321},[118,5645,1569],{"class":128},[72,5647,5648],{"start":40},[75,5649,5650],{},"有参无返",[109,5652,5654],{"className":111,"code":5653,"language":113,"meta":39,"style":39},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[115,5655,5656,5671,5675,5687,5691,5699,5703,5714],{"__ignoreMap":39},[118,5657,5658,5660,5663,5665,5667,5669],{"class":120,"line":121},[118,5659,5369],{"class":124},[118,5661,5662],{"class":1967}," test02",[118,5664,129],{"class":128},[118,5666,132],{"class":124},[118,5668,1402],{"class":5221},[118,5670,135],{"class":128},[118,5672,5673],{"class":120,"line":40},[118,5674,1550],{"class":128},[118,5676,5677,5679,5681,5683,5685],{"class":120,"line":1183},[118,5678,1555],{"class":128},[118,5680,1172],{"class":124},[118,5682,5608],{"class":233},[118,5684,1172],{"class":124},[118,5686,1195],{"class":128},[118,5688,5689],{"class":120,"line":1198},[118,5690,1569],{"class":128},[118,5692,5693,5695,5697],{"class":120,"line":1204},[118,5694,132],{"class":124},[118,5696,1977],{"class":1967},[118,5698,1980],{"class":128},[118,5700,5701],{"class":120,"line":1218},[118,5702,1550],{"class":128},[118,5704,5705,5708,5710,5712],{"class":120,"line":1224},[118,5706,5707],{"class":1967},"    test02",[118,5709,129],{"class":128},[118,5711,439],{"class":177},[118,5713,2723],{"class":128},[118,5715,5716],{"class":120,"line":1315},[118,5717,1569],{"class":128},[72,5719,5720],{"start":1183},[75,5721,5722],{},"无参有返",[109,5724,5726],{"className":111,"code":5725,"language":113,"meta":39,"style":39},"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",[115,5727,5728,5737,5741,5753,5762,5766,5774,5778,5791,5810],{"__ignoreMap":39},[118,5729,5730,5732,5735],{"class":120,"line":121},[118,5731,132],{"class":124},[118,5733,5734],{"class":1967}," test03",[118,5736,1980],{"class":128},[118,5738,5739],{"class":120,"line":40},[118,5740,1550],{"class":128},[118,5742,5743,5745,5747,5749,5751],{"class":120,"line":1183},[118,5744,1555],{"class":128},[118,5746,1172],{"class":124},[118,5748,5608],{"class":233},[118,5750,1172],{"class":124},[118,5752,1195],{"class":128},[118,5754,5755,5757,5760],{"class":120,"line":1198},[118,5756,4094],{"class":124},[118,5758,5759],{"class":177}," 100",[118,5761,1294],{"class":128},[118,5763,5764],{"class":120,"line":1204},[118,5765,1569],{"class":128},[118,5767,5768,5770,5772],{"class":120,"line":1218},[118,5769,132],{"class":124},[118,5771,1977],{"class":1967},[118,5773,1980],{"class":128},[118,5775,5776],{"class":120,"line":1224},[118,5777,1550],{"class":128},[118,5779,5780,5782,5784,5786,5789],{"class":120,"line":1315},[118,5781,1989],{"class":124},[118,5783,5222],{"class":128},[118,5785,174],{"class":124},[118,5787,5788],{"class":1967},"test03",[118,5790,5641],{"class":128},[118,5792,5793,5795,5797,5799,5801,5803,5805,5807],{"class":120,"line":1321},[118,5794,1555],{"class":128},[118,5796,1172],{"class":124},[118,5798,5412],{"class":233},[118,5800,1172],{"class":124},[118,5802,5247],{"class":128},[118,5804,1172],{"class":124},[118,5806,1242],{"class":128},[118,5808,5809],{"class":187}," \u002F\u002F100\n",[118,5811,5812],{"class":120,"line":1333},[118,5813,1569],{"class":128},[15,5815,5816],{},"4.有参有返",[109,5818,5820],{"className":111,"code":5819,"language":113,"meta":39,"style":39},"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",[115,5821,5822,5837,5841,5854,5860,5864,5873,5877,5889,5903,5918],{"__ignoreMap":39},[118,5823,5824,5826,5829,5831,5833,5835],{"class":120,"line":121},[118,5825,132],{"class":124},[118,5827,5828],{"class":1967}," test04",[118,5830,129],{"class":128},[118,5832,132],{"class":124},[118,5834,1402],{"class":5221},[118,5836,135],{"class":128},[118,5838,5839],{"class":120,"line":40},[118,5840,1550],{"class":128},[118,5842,5843,5845,5847,5850,5852],{"class":120,"line":1183},[118,5844,1555],{"class":128},[118,5846,1172],{"class":124},[118,5848,5849],{"class":233},"\"hello\"",[118,5851,1172],{"class":124},[118,5853,1195],{"class":128},[118,5855,5856,5858],{"class":120,"line":1198},[118,5857,4094],{"class":124},[118,5859,1436],{"class":128},[118,5861,5862],{"class":120,"line":1204},[118,5863,1569],{"class":128},[118,5865,5866,5868,5871],{"class":120,"line":1218},[118,5867,132],{"class":124},[118,5869,5870],{"class":1967}," mian",[118,5872,1980],{"class":128},[118,5874,5875],{"class":120,"line":1224},[118,5876,1550],{"class":128},[118,5878,5879,5881,5883,5885,5887],{"class":120,"line":1315},[118,5880,1989],{"class":124},[118,5882,2837],{"class":128},[118,5884,174],{"class":124},[118,5886,346],{"class":177},[118,5888,1294],{"class":128},[118,5890,5891,5893,5895,5897,5900],{"class":120,"line":1321},[118,5892,1989],{"class":124},[118,5894,2853],{"class":128},[118,5896,174],{"class":124},[118,5898,5899],{"class":1967},"test04",[118,5901,5902],{"class":128},"(b);\n",[118,5904,5905,5907,5909,5911,5913,5915],{"class":120,"line":1333},[118,5906,1555],{"class":128},[118,5908,1172],{"class":124},[118,5910,416],{"class":128},[118,5912,1172],{"class":124},[118,5914,1242],{"class":128},[118,5916,5917],{"class":187}," \u002F\u002F1\n",[118,5919,5920],{"class":120,"line":1616},[118,5921,1569],{"class":128},[60,5923,5925],{"id":5924},"_25函数的声明","2.5函数的声明",[15,5927,5928],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[15,5930,5931,5932],{},"函数的",[278,5933,5934],{},"声明可以多次，但是函数的定义只能有一次",[109,5936,5938],{"className":111,"code":5937,"language":113,"meta":39,"style":39},"\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",[115,5939,5940,5945,5950,5975,5984,5988,6000,6012,6028,6032,6052,6056,6075],{"__ignoreMap":39},[118,5941,5942],{"class":120,"line":121},[118,5943,5944],{"class":187},"\u002F\u002F函数声明\n",[118,5946,5947],{"class":120,"line":40},[118,5948,5949],{"class":187},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[118,5951,5952,5954,5957,5959,5961,5963,5965,5967,5969,5972],{"class":120,"line":1183},[118,5953,132],{"class":124},[118,5955,5956],{"class":1967}," max",[118,5958,129],{"class":128},[118,5960,132],{"class":124},[118,5962,1402],{"class":5221},[118,5964,506],{"class":128},[118,5966,132],{"class":124},[118,5968,2837],{"class":5221},[118,5970,5971],{"class":128},");",[118,5973,5974],{"class":187},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[118,5976,5977,5979,5981],{"class":120,"line":1198},[118,5978,132],{"class":124},[118,5980,1977],{"class":1967},[118,5982,5983],{"class":128},"() \n",[118,5985,5986],{"class":120,"line":1204},[118,5987,1550],{"class":128},[118,5989,5990,5992,5994,5996,5998],{"class":120,"line":1218},[118,5991,1989],{"class":124},[118,5993,1402],{"class":128},[118,5995,174],{"class":124},[118,5997,574],{"class":177},[118,5999,1294],{"class":128},[118,6001,6002,6004,6006,6008,6010],{"class":120,"line":1224},[118,6003,1989],{"class":124},[118,6005,2837],{"class":128},[118,6007,174],{"class":124},[118,6009,828],{"class":177},[118,6011,1294],{"class":128},[118,6013,6014,6016,6018,6021,6024,6026],{"class":120,"line":1315},[118,6015,1555],{"class":128},[118,6017,1172],{"class":124},[118,6019,6020],{"class":1967},"max",[118,6022,6023],{"class":128},"(a,b)",[118,6025,1172],{"class":124},[118,6027,1195],{"class":128},[118,6029,6030],{"class":120,"line":1321},[118,6031,1569],{"class":128},[118,6033,6034,6036,6038,6040,6042,6044,6046,6048,6050],{"class":120,"line":1333},[118,6035,132],{"class":124},[118,6037,5956],{"class":1967},[118,6039,129],{"class":128},[118,6041,132],{"class":124},[118,6043,1402],{"class":5221},[118,6045,506],{"class":128},[118,6047,132],{"class":124},[118,6049,2837],{"class":5221},[118,6051,135],{"class":128},[118,6053,6054],{"class":120,"line":1616},[118,6055,1550],{"class":128},[118,6057,6058,6060,6062,6064,6066,6068,6070,6072],{"class":120,"line":1621},[118,6059,4094],{"class":124},[118,6061,1402],{"class":128},[118,6063,1088],{"class":124},[118,6065,391],{"class":128},[118,6067,1114],{"class":124},[118,6069,21],{"class":128},[118,6071,987],{"class":124},[118,6073,6074],{"class":128},"b;\n",[118,6076,6077],{"class":120,"line":1627},[118,6078,1569],{"class":128},[60,6080,6082],{"id":6081},"_26函数的分文件编写","2.6函数的分文件编写",[15,6084,6085],{},"4个步骤：",[1135,6087,6088,6091,6094,6097],{},[75,6089,6090],{},"1.创建后缀名为.h的头文件",[75,6092,6093],{},"2.创建后缀名为.cpp的源文件",[75,6095,6096],{},"3.在头文件中写函数的定义",[75,6098,6099],{},"4.在源文件中写函数的定义\n示例：",[15,6101,6102],{},"头文件：swap.h",[109,6104,6106],{"className":111,"code":6105,"language":113,"meta":39,"style":39},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[115,6107,6108,6114,6124,6128],{"__ignoreMap":39},[118,6109,6110,6112],{"class":120,"line":121},[118,6111,1953],{"class":124},[118,6113,1956],{"class":233},[118,6115,6116,6118,6120,6122],{"class":120,"line":40},[118,6117,1961],{"class":124},[118,6119,1964],{"class":124},[118,6121,1968],{"class":1967},[118,6123,1294],{"class":128},[118,6125,6126],{"class":120,"line":1183},[118,6127,5944],{"class":187},[118,6129,6130,6132,6134,6136,6138,6140,6142,6144,6146],{"class":120,"line":1198},[118,6131,5369],{"class":124},[118,6133,5372],{"class":1967},[118,6135,129],{"class":128},[118,6137,132],{"class":124},[118,6139,1402],{"class":5221},[118,6141,506],{"class":128},[118,6143,132],{"class":124},[118,6145,2837],{"class":5221},[118,6147,2723],{"class":128},[15,6149,6150],{},"源文件：swap.cpp",[109,6152,6154],{"className":111,"code":6153,"language":113,"meta":39,"style":39},"#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",[115,6155,6156,6163,6168,6188,6192,6203,6212,6221,6238,6255],{"__ignoreMap":39},[118,6157,6158,6160],{"class":120,"line":121},[118,6159,1953],{"class":124},[118,6161,6162],{"class":233}," \"swap.h\"\n",[118,6164,6165],{"class":120,"line":40},[118,6166,6167],{"class":187},"\u002F\u002F函数的定义\n",[118,6169,6170,6172,6174,6176,6178,6180,6182,6184,6186],{"class":120,"line":1183},[118,6171,5369],{"class":124},[118,6173,5372],{"class":1967},[118,6175,129],{"class":128},[118,6177,132],{"class":124},[118,6179,1402],{"class":5221},[118,6181,506],{"class":128},[118,6183,132],{"class":124},[118,6185,2837],{"class":5221},[118,6187,135],{"class":128},[118,6189,6190],{"class":120,"line":1198},[118,6191,1550],{"class":128},[118,6193,6194,6196,6198,6200],{"class":120,"line":1204},[118,6195,1989],{"class":124},[118,6197,4259],{"class":128},[118,6199,174],{"class":124},[118,6201,6202],{"class":128},"a;\n",[118,6204,6205,6208,6210],{"class":120,"line":1218},[118,6206,6207],{"class":128},"    a",[118,6209,174],{"class":124},[118,6211,6074],{"class":128},[118,6213,6214,6217,6219],{"class":120,"line":1224},[118,6215,6216],{"class":128},"    b",[118,6218,174],{"class":124},[118,6220,4284],{"class":128},[118,6222,6223,6225,6227,6230,6232,6234,6236],{"class":120,"line":1315},[118,6224,1555],{"class":128},[118,6226,1172],{"class":124},[118,6228,6229],{"class":233},"\"a=\"",[118,6231,1172],{"class":124},[118,6233,21],{"class":128},[118,6235,1172],{"class":124},[118,6237,1195],{"class":128},[118,6239,6240,6242,6244,6247,6249,6251,6253],{"class":120,"line":1321},[118,6241,1555],{"class":128},[118,6243,1172],{"class":124},[118,6245,6246],{"class":233},"\"b=\"",[118,6248,1172],{"class":124},[118,6250,391],{"class":128},[118,6252,1172],{"class":124},[118,6254,1195],{"class":128},[118,6256,6257],{"class":120,"line":1333},[118,6258,1569],{"class":128},[5131,6260,6261],{},"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":39,"searchDepth":40,"depth":40,"links":6263},[6264,6265,6266,6267,6268,6269],{"id":5177,"depth":40,"text":5178},{"id":5266,"depth":40,"text":5267},{"id":5349,"depth":40,"text":5350},{"id":5575,"depth":40,"text":5576},{"id":5924,"depth":40,"text":5925},{"id":6081,"depth":40,"text":6082},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5169,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6276,"title":6277,"body":6278,"description":6285,"extension":43,"meta":7690,"navigation":45,"path":7691,"seo":7692,"stem":7693,"__hash__":7694},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6279,"toc":7680},[6280,6283,6286,6290,6452,6456,6459,6462,6465,6468,6608,6612,6615,6618,6621,6686,6690,6695,6762,6765,6769,6772,6783,6788,6808,6811,6816,6835,6838,6842,6861,6864,6868,7103,7107,7110,7113,7116,7278,7281,7285,7288,7294,7677],[10,6281,6277],{"id":6282},"_3指针",[15,6284,6285],{},"通过指针保存一个地址，指针就是个地址",[60,6287,6289],{"id":6288},"_31定义指针","3.1定义指针",[109,6291,6293],{"className":111,"code":6292,"language":113,"meta":39,"style":39},"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",[115,6294,6295,6303,6307,6312,6324,6329,6337,6347,6365,6385,6389,6394,6399,6404,6418,6434,6448],{"__ignoreMap":39},[118,6296,6297,6299,6301],{"class":120,"line":121},[118,6298,132],{"class":124},[118,6300,1977],{"class":1967},[118,6302,1980],{"class":128},[118,6304,6305],{"class":120,"line":40},[118,6306,1550],{"class":128},[118,6308,6309],{"class":120,"line":1183},[118,6310,6311],{"class":187},"    \u002F\u002F1.定义指针\n",[118,6313,6314,6316,6318,6320,6322],{"class":120,"line":1198},[118,6315,1989],{"class":124},[118,6317,1402],{"class":128},[118,6319,174],{"class":124},[118,6321,574],{"class":177},[118,6323,1294],{"class":128},[118,6325,6326],{"class":120,"line":1204},[118,6327,6328],{"class":187},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[118,6330,6331,6334],{"class":120,"line":1218},[118,6332,6333],{"class":124},"    int*",[118,6335,6336],{"class":128},"p;\n",[118,6338,6339,6342,6345],{"class":120,"line":1224},[118,6340,6341],{"class":128},"    p",[118,6343,6344],{"class":124},"=&",[118,6346,6202],{"class":128},[118,6348,6349,6351,6353,6356,6359,6361,6363],{"class":120,"line":1315},[118,6350,1555],{"class":128},[118,6352,1172],{"class":124},[118,6354,6355],{"class":233},"\"a的地址为：\"",[118,6357,6358],{"class":124},"\u003C\u003C&",[118,6360,21],{"class":128},[118,6362,1172],{"class":124},[118,6364,1195],{"class":128},[118,6366,6367,6369,6371,6374,6376,6378,6380,6382],{"class":120,"line":1321},[118,6368,1555],{"class":128},[118,6370,1172],{"class":124},[118,6372,6373],{"class":233},"\"指针p为：\"",[118,6375,1172],{"class":124},[118,6377,15],{"class":128},[118,6379,1172],{"class":124},[118,6381,1242],{"class":128},[118,6383,6384],{"class":187},"\u002F\u002F指针p表示的就是a的地址\n",[118,6386,6387],{"class":120,"line":1333},[118,6388,2404],{"emptyLinePlaceholder":45},[118,6390,6391],{"class":120,"line":1616},[118,6392,6393],{"class":187},"    \u002F\u002F2.使用指针\n",[118,6395,6396],{"class":120,"line":1621},[118,6397,6398],{"class":187},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[118,6400,6401],{"class":120,"line":1627},[118,6402,6403],{"class":187},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[118,6405,6406,6409,6411,6413,6416],{"class":120,"line":1632},[118,6407,6408],{"class":124},"    *",[118,6410,15],{"class":128},[118,6412,174],{"class":124},[118,6414,6415],{"class":177},"1000",[118,6417,1294],{"class":128},[118,6419,6420,6422,6425,6427,6429,6431],{"class":120,"line":1646},[118,6421,1555],{"class":128},[118,6423,6424],{"class":124},"\u003C\u003C*",[118,6426,15],{"class":128},[118,6428,1172],{"class":124},[118,6430,1242],{"class":128},[118,6432,6433],{"class":187},"\u002F\u002F1000\n",[118,6435,6436,6438,6440,6442,6444,6446],{"class":120,"line":1651},[118,6437,1555],{"class":128},[118,6439,1172],{"class":124},[118,6441,21],{"class":128},[118,6443,1172],{"class":124},[118,6445,1242],{"class":128},[118,6447,6433],{"class":187},[118,6449,6450],{"class":120,"line":1657},[118,6451,1569],{"class":128},[60,6453,6455],{"id":6454},"_32指针所占的内存空间","3.2指针所占的内存空间",[15,6457,6458],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[15,6460,6461],{},"在32位操作系统下：占用4个字节空间",[15,6463,6464],{},"在64位操作系统下：占用8个字节空间",[15,6466,6467],{},"上方是不管啥数据类型的",[109,6469,6471],{"className":111,"code":6470,"language":113,"meta":39,"style":39},"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",[115,6472,6473,6481,6485,6490,6502,6507,6512,6517,6530,6552,6578,6604],{"__ignoreMap":39},[118,6474,6475,6477,6479],{"class":120,"line":121},[118,6476,132],{"class":124},[118,6478,1977],{"class":1967},[118,6480,1980],{"class":128},[118,6482,6483],{"class":120,"line":40},[118,6484,1550],{"class":128},[118,6486,6487],{"class":120,"line":1183},[118,6488,6489],{"class":187},"    \u002F\u002F指针所占内存空间\n",[118,6491,6492,6494,6496,6498,6500],{"class":120,"line":1198},[118,6493,1989],{"class":124},[118,6495,1402],{"class":128},[118,6497,174],{"class":124},[118,6499,574],{"class":177},[118,6501,1294],{"class":128},[118,6503,6504],{"class":120,"line":1204},[118,6505,6506],{"class":187},"    \u002F\u002Fint *p;\n",[118,6508,6509],{"class":120,"line":1218},[118,6510,6511],{"class":187},"    \u002F\u002Fp=&a;\n",[118,6513,6514],{"class":120,"line":1224},[118,6515,6516],{"class":187},"    \u002F\u002F上述可以写为以下：\n",[118,6518,6519,6521,6524,6526,6528],{"class":120,"line":1315},[118,6520,1989],{"class":124},[118,6522,6523],{"class":124}," *",[118,6525,15],{"class":128},[118,6527,6344],{"class":124},[118,6529,6202],{"class":128},[118,6531,6532,6535,6537,6540,6542,6545,6547,6549],{"class":120,"line":1321},[118,6533,6534],{"class":128},"    cout ",[118,6536,1172],{"class":124},[118,6538,6539],{"class":233},"\"sizeof(int *)\"",[118,6541,1376],{"class":124},[118,6543,6544],{"class":128},"(p)",[118,6546,1172],{"class":124},[118,6548,1242],{"class":128},[118,6550,6551],{"class":187},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[118,6553,6554,6556,6558,6560,6562,6564,6566,6568,6570,6572,6575],{"class":120,"line":1333},[118,6555,6534],{"class":128},[118,6557,1172],{"class":124},[118,6559,6539],{"class":233},[118,6561,1376],{"class":124},[118,6563,129],{"class":128},[118,6565,132],{"class":124},[118,6567,6523],{"class":124},[118,6569,557],{"class":128},[118,6571,1172],{"class":124},[118,6573,6574],{"class":128},"endl",[118,6576,6577],{"class":187},"  \u002F\u002F4字节(32位的话)\n",[118,6579,6580,6582,6584,6587,6589,6591,6593,6595,6597,6599,6601],{"class":120,"line":1616},[118,6581,6534],{"class":128},[118,6583,1172],{"class":124},[118,6585,6586],{"class":233},"\"sizeof(char *)\"",[118,6588,1376],{"class":124},[118,6590,129],{"class":128},[118,6592,225],{"class":124},[118,6594,6523],{"class":124},[118,6596,557],{"class":128},[118,6598,1172],{"class":124},[118,6600,1242],{"class":128},[118,6602,6603],{"class":187}," \u002F\u002F4字节(32位的话)\n",[118,6605,6606],{"class":120,"line":1621},[118,6607,1569],{"class":128},[60,6609,6611],{"id":6610},"_33空指针","3.3空指针",[15,6613,6614],{},"空指针：指针变量指向内存中编号为0的空间",[15,6616,6617],{},"用途：初始化指针变量",[15,6619,6620],{},"注意：空指针指向的内存是不可以访问的",[109,6622,6624],{"className":111,"code":6623,"language":113,"meta":39,"style":39},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[115,6625,6626,6634,6638,6643,6657,6662,6677,6682],{"__ignoreMap":39},[118,6627,6628,6630,6632],{"class":120,"line":121},[118,6629,132],{"class":124},[118,6631,1977],{"class":1967},[118,6633,1980],{"class":128},[118,6635,6636],{"class":120,"line":40},[118,6637,1550],{"class":128},[118,6639,6640],{"class":120,"line":1183},[118,6641,6642],{"class":187},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[118,6644,6645,6647,6649,6651,6653,6655],{"class":120,"line":1198},[118,6646,1989],{"class":124},[118,6648,6523],{"class":124},[118,6650,15],{"class":128},[118,6652,174],{"class":124},[118,6654,2396],{"class":177},[118,6656,1294],{"class":128},[118,6658,6659],{"class":120,"line":1204},[118,6660,6661],{"class":187},"    \u002F\u002F2.空指针不能进行访问\n",[118,6663,6664,6666,6668,6670,6672,6674],{"class":120,"line":1218},[118,6665,6408],{"class":124},[118,6667,15],{"class":128},[118,6669,174],{"class":124},[118,6671,439],{"class":177},[118,6673,184],{"class":128},[118,6675,6676],{"class":187},"\u002F\u002F直接报错，压根不能访问\n",[118,6678,6679],{"class":120,"line":1224},[118,6680,6681],{"class":187},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[118,6683,6684],{"class":120,"line":1315},[118,6685,1569],{"class":128},[60,6687,6689],{"id":6688},"_34野指针","3.4野指针",[15,6691,6692],{},[278,6693,6694],{},"指针变量指向非法的内存空间",[109,6696,6698],{"className":111,"code":6697,"language":113,"meta":39,"style":39},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[115,6699,6700,6708,6712,6741,6746,6758],{"__ignoreMap":39},[118,6701,6702,6704,6706],{"class":120,"line":121},[118,6703,132],{"class":124},[118,6705,1977],{"class":1967},[118,6707,1980],{"class":128},[118,6709,6710],{"class":120,"line":40},[118,6711,1550],{"class":128},[118,6713,6714,6716,6718,6720,6722,6724,6726,6728,6730,6733,6736,6738],{"class":120,"line":1183},[118,6715,1989],{"class":124},[118,6717,6523],{"class":124},[118,6719,15],{"class":128},[118,6721,174],{"class":124},[118,6723,129],{"class":128},[118,6725,132],{"class":124},[118,6727,6523],{"class":124},[118,6729,557],{"class":128},[118,6731,6732],{"class":124},"0x",[118,6734,6735],{"class":177},"1100",[118,6737,184],{"class":128},[118,6739,6740],{"class":187}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[118,6742,6743],{"class":120,"line":1198},[118,6744,6745],{"class":187},"    \u002F\u002F访问野指针报错\n",[118,6747,6748,6750,6752,6754,6756],{"class":120,"line":1204},[118,6749,1555],{"class":128},[118,6751,6424],{"class":124},[118,6753,15],{"class":128},[118,6755,1172],{"class":124},[118,6757,1195],{"class":128},[118,6759,6760],{"class":120,"line":1218},[118,6761,1569],{"class":128},[15,6763,6764],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[60,6766,6768],{"id":6767},"_35const修饰指针","3.5const修饰指针",[15,6770,6771],{},"三种情况：",[1135,6773,6774,6777,6780],{},[75,6775,6776],{},"const修饰指针 常量指针",[75,6778,6779],{},"const修饰常量 指针常量",[75,6781,6782],{},"const即修饰指针，又修饰常量",[72,6784,6785],{},[75,6786,6787],{},"常量指针",[109,6789,6791],{"className":111,"code":6790,"language":113,"meta":39,"style":39},"const int *p=&a;\n",[115,6792,6793],{"__ignoreMap":39},[118,6794,6795,6798,6800,6802,6804,6806],{"class":120,"line":121},[118,6796,6797],{"class":124},"const",[118,6799,2386],{"class":124},[118,6801,6523],{"class":124},[118,6803,15],{"class":128},[118,6805,6344],{"class":124},[118,6807,6202],{"class":128},[15,6809,6810],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[72,6812,6813],{"start":40},[75,6814,6815],{},"指针常量",[109,6817,6819],{"className":111,"code":6818,"language":113,"meta":39,"style":39},"int *const p=&a;\n",[115,6820,6821],{"__ignoreMap":39},[118,6822,6823,6825,6828,6831,6833],{"class":120,"line":121},[118,6824,132],{"class":124},[118,6826,6827],{"class":124}," *const",[118,6829,6830],{"class":128}," p",[118,6832,6344],{"class":124},[118,6834,6202],{"class":128},[15,6836,6837],{},"指针的指向不可以改，指针指向的值可以改",[72,6839,6840],{"start":1183},[75,6841,6782],{},[109,6843,6845],{"className":111,"code":6844,"language":113,"meta":39,"style":39},"const int *const p=&a;\n",[115,6846,6847],{"__ignoreMap":39},[118,6848,6849,6851,6853,6855,6857,6859],{"class":120,"line":121},[118,6850,6797],{"class":124},[118,6852,2386],{"class":124},[118,6854,6827],{"class":124},[118,6856,6830],{"class":128},[118,6858,6344],{"class":124},[118,6860,6202],{"class":128},[15,6862,6863],{},"指针的指向和指针指向的值都不可以改变",[60,6865,6867],{"id":6866},"_36指针和数组","3.6指针和数组",[109,6869,6871],{"className":111,"code":6870,"language":113,"meta":39,"style":39},"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",[115,6872,6873,6881,6885,6890,6944,6965,6981,6997,7008,7025,7030,7044,7070,7074,7086,7095,7099],{"__ignoreMap":39},[118,6874,6875,6877,6879],{"class":120,"line":121},[118,6876,132],{"class":124},[118,6878,1977],{"class":1967},[118,6880,1980],{"class":128},[118,6882,6883],{"class":120,"line":40},[118,6884,1550],{"class":128},[118,6886,6887],{"class":120,"line":1183},[118,6888,6889],{"class":187},"    \u002F\u002F利用指针访问数组中的元素\n",[118,6891,6892,6894,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942],{"class":120,"line":1198},[118,6893,1989],{"class":124},[118,6895,3966],{"class":128},[118,6897,574],{"class":177},[118,6899,1068],{"class":128},[118,6901,174],{"class":124},[118,6903,1024],{"class":128},[118,6905,346],{"class":177},[118,6907,506],{"class":128},[118,6909,206],{"class":177},[118,6911,506],{"class":128},[118,6913,200],{"class":177},[118,6915,506],{"class":128},[118,6917,421],{"class":177},[118,6919,506],{"class":128},[118,6921,447],{"class":177},[118,6923,506],{"class":128},[118,6925,472],{"class":177},[118,6927,506],{"class":128},[118,6929,497],{"class":177},[118,6931,506],{"class":128},[118,6933,523],{"class":177},[118,6935,506],{"class":128},[118,6937,548],{"class":177},[118,6939,506],{"class":128},[118,6941,574],{"class":177},[118,6943,3999],{"class":128},[118,6945,6946,6948,6950,6953,6955,6957,6959,6961,6963],{"class":120,"line":1204},[118,6947,1555],{"class":128},[118,6949,1172],{"class":124},[118,6951,6952],{"class":233},"\"数组的第一个元素为：\"",[118,6954,1172],{"class":124},[118,6956,3910],{"class":128},[118,6958,320],{"class":177},[118,6960,1068],{"class":128},[118,6962,1172],{"class":124},[118,6964,1195],{"class":128},[118,6966,6967,6969,6971,6973,6975,6978],{"class":120,"line":1218},[118,6968,1989],{"class":124},[118,6970,6523],{"class":124},[118,6972,15],{"class":128},[118,6974,174],{"class":124},[118,6976,6977],{"class":128},"arr;",[118,6979,6980],{"class":187},"\u002F\u002F注意数才要加取地址符号&\n",[118,6982,6983,6985,6987,6989,6991,6993,6995],{"class":120,"line":1224},[118,6984,1555],{"class":128},[118,6986,1172],{"class":124},[118,6988,6952],{"class":233},[118,6990,6424],{"class":124},[118,6992,15],{"class":128},[118,6994,1172],{"class":124},[118,6996,1195],{"class":128},[118,6998,6999,7001,7003,7005],{"class":120,"line":1315},[118,7000,6341],{"class":128},[118,7002,2296],{"class":124},[118,7004,184],{"class":128},[118,7006,7007],{"class":187}," \u002F\u002F让指针向后偏移4个字节\n",[118,7009,7010,7012,7014,7017,7019,7021,7023],{"class":120,"line":1321},[118,7011,1555],{"class":128},[118,7013,1172],{"class":124},[118,7015,7016],{"class":233},"\"数组的第二个元素为：\"",[118,7018,6424],{"class":124},[118,7020,15],{"class":128},[118,7022,1172],{"class":124},[118,7024,1195],{"class":128},[118,7026,7027],{"class":120,"line":1333},[118,7028,7029],{"class":187},"    \u002F\u002F利用指针遍历数组\n",[118,7031,7032,7034,7036,7039,7041],{"class":120,"line":1616},[118,7033,1989],{"class":124},[118,7035,6523],{"class":124},[118,7037,7038],{"class":128},"p2",[118,7040,174],{"class":124},[118,7042,7043],{"class":128},"arr;\n",[118,7045,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064,7066,7068],{"class":120,"line":1621},[118,7047,3205],{"class":124},[118,7049,1662],{"class":128},[118,7051,132],{"class":124},[118,7053,3036],{"class":128},[118,7055,174],{"class":124},[118,7057,320],{"class":177},[118,7059,3043],{"class":128},[118,7061,1038],{"class":124},[118,7063,574],{"class":177},[118,7065,3043],{"class":128},[118,7067,2296],{"class":124},[118,7069,135],{"class":128},[118,7071,7072],{"class":120,"line":1627},[118,7073,2034],{"class":128},[118,7075,7076,7078,7080,7082,7084],{"class":120,"line":1632},[118,7077,3455],{"class":128},[118,7079,6424],{"class":124},[118,7081,7038],{"class":128},[118,7083,1172],{"class":124},[118,7085,1195],{"class":128},[118,7087,7088,7091,7093],{"class":120,"line":1646},[118,7089,7090],{"class":128},"        p2",[118,7092,2296],{"class":124},[118,7094,1294],{"class":128},[118,7096,7097],{"class":120,"line":1651},[118,7098,2191],{"class":128},[118,7100,7101],{"class":120,"line":1657},[118,7102,1569],{"class":128},[60,7104,7106],{"id":7105},"_37指针和函数","3.7指针和函数",[15,7108,7109],{},"利用指针做函数参数，可以修改实参的值",[15,7111,7112],{},"值传递：只改变形参，不改变实参",[15,7114,7115],{},"地址传递：",[109,7117,7119],{"className":111,"code":7118,"language":113,"meta":39,"style":39},"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",[115,7120,7121,7146,7150,7162,7173,7183,7187,7195,7199,7211,7223,7228,7244,7259,7274],{"__ignoreMap":39},[118,7122,7123,7125,7127,7129,7131,7133,7136,7138,7140,7142,7144],{"class":120,"line":121},[118,7124,5369],{"class":124},[118,7126,5372],{"class":1967},[118,7128,129],{"class":128},[118,7130,132],{"class":124},[118,7132,6523],{"class":124},[118,7134,7135],{"class":5221},"p1",[118,7137,506],{"class":128},[118,7139,132],{"class":124},[118,7141,6523],{"class":124},[118,7143,7038],{"class":5221},[118,7145,135],{"class":128},[118,7147,7148],{"class":120,"line":40},[118,7149,1550],{"class":128},[118,7151,7152,7154,7156,7159],{"class":120,"line":1183},[118,7153,1989],{"class":124},[118,7155,4259],{"class":128},[118,7157,7158],{"class":124},"=*",[118,7160,7161],{"class":128},"p1;\n",[118,7163,7164,7166,7168,7170],{"class":120,"line":1198},[118,7165,6408],{"class":124},[118,7167,7135],{"class":128},[118,7169,7158],{"class":124},[118,7171,7172],{"class":128},"p2;\n",[118,7174,7175,7177,7179,7181],{"class":120,"line":1204},[118,7176,6408],{"class":124},[118,7178,7038],{"class":128},[118,7180,174],{"class":124},[118,7182,4284],{"class":128},[118,7184,7185],{"class":120,"line":1218},[118,7186,1569],{"class":128},[118,7188,7189,7191,7193],{"class":120,"line":1224},[118,7190,132],{"class":124},[118,7192,1977],{"class":1967},[118,7194,1980],{"class":128},[118,7196,7197],{"class":120,"line":1315},[118,7198,1550],{"class":128},[118,7200,7201,7203,7205,7207,7209],{"class":120,"line":1321},[118,7202,1989],{"class":124},[118,7204,1402],{"class":128},[118,7206,174],{"class":124},[118,7208,574],{"class":177},[118,7210,1294],{"class":128},[118,7212,7213,7215,7217,7219,7221],{"class":120,"line":1333},[118,7214,1989],{"class":124},[118,7216,2837],{"class":128},[118,7218,174],{"class":124},[118,7220,828],{"class":177},[118,7222,1294],{"class":128},[118,7224,7225],{"class":120,"line":1616},[118,7226,7227],{"class":187},"    \u002F\u002F地址传递\n",[118,7229,7230,7232,7234,7236,7239,7241],{"class":120,"line":1621},[118,7231,5566],{"class":1967},[118,7233,129],{"class":128},[118,7235,481],{"class":124},[118,7237,7238],{"class":128},"a,",[118,7240,481],{"class":124},[118,7242,7243],{"class":128},"b);\n",[118,7245,7246,7248,7250,7252,7254,7256],{"class":120,"line":1627},[118,7247,1555],{"class":128},[118,7249,1172],{"class":124},[118,7251,21],{"class":128},[118,7253,1172],{"class":124},[118,7255,1242],{"class":128},[118,7257,7258],{"class":187},"\u002F\u002F20\n",[118,7260,7261,7263,7265,7267,7269,7271],{"class":120,"line":1632},[118,7262,1555],{"class":128},[118,7264,1172],{"class":124},[118,7266,391],{"class":128},[118,7268,1172],{"class":124},[118,7270,1242],{"class":128},[118,7272,7273],{"class":187},"\u002F\u002F10\n",[118,7275,7276],{"class":120,"line":1646},[118,7277,1569],{"class":128},[15,7279,7280],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[60,7282,7284],{"id":7283},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[15,7286,7287],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[15,7289,7290,7291,7293],{},"例如数组：int arr",[118,7292,574],{},"={4,3,6,9,1,2,10,8,7,5}",[109,7295,7297],{"className":111,"code":7296,"language":113,"meta":39,"style":39},"#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",[115,7298,7299,7305,7315,7339,7343,7374,7378,7412,7416,7434,7438,7449,7464,7479,7483,7487,7491,7495,7499,7507,7511,7516,7570,7582,7594,7599,7607,7611,7616,7641,7645,7660,7669,7673],{"__ignoreMap":39},[118,7300,7301,7303],{"class":120,"line":121},[118,7302,1953],{"class":124},[118,7304,1956],{"class":233},[118,7306,7307,7309,7311,7313],{"class":120,"line":40},[118,7308,1961],{"class":124},[118,7310,1964],{"class":124},[118,7312,1968],{"class":1967},[118,7314,1294],{"class":128},[118,7316,7317,7319,7322,7324,7326,7328,7330,7332,7334,7337],{"class":120,"line":1183},[118,7318,5369],{"class":124},[118,7320,7321],{"class":1967}," bubbleSort",[118,7323,129],{"class":128},[118,7325,132],{"class":124},[118,7327,6523],{"class":124},[118,7329,15],{"class":5221},[118,7331,506],{"class":128},[118,7333,132],{"class":124},[118,7335,7336],{"class":5221}," len",[118,7338,135],{"class":128},[118,7340,7341],{"class":120,"line":1198},[118,7342,1550],{"class":128},[118,7344,7345,7347,7349,7351,7353,7355,7357,7359,7361,7364,7366,7368,7370,7372],{"class":120,"line":1204},[118,7346,3205],{"class":124},[118,7348,129],{"class":128},[118,7350,132],{"class":124},[118,7352,3036],{"class":128},[118,7354,174],{"class":124},[118,7356,320],{"class":177},[118,7358,3043],{"class":128},[118,7360,1038],{"class":124},[118,7362,7363],{"class":128},"len",[118,7365,660],{"class":124},[118,7367,346],{"class":177},[118,7369,3043],{"class":128},[118,7371,2296],{"class":124},[118,7373,135],{"class":128},[118,7375,7376],{"class":120,"line":1218},[118,7377,2034],{"class":128},[118,7379,7380,7382,7384,7386,7388,7390,7392,7394,7396,7398,7400,7402,7404,7406,7408,7410],{"class":120,"line":1224},[118,7381,3407],{"class":124},[118,7383,129],{"class":128},[118,7385,132],{"class":124},[118,7387,3414],{"class":128},[118,7389,174],{"class":124},[118,7391,320],{"class":177},[118,7393,3421],{"class":128},[118,7395,1038],{"class":124},[118,7397,7363],{"class":128},[118,7399,660],{"class":124},[118,7401,569],{"class":128},[118,7403,660],{"class":124},[118,7405,346],{"class":177},[118,7407,3421],{"class":128},[118,7409,2296],{"class":124},[118,7411,135],{"class":128},[118,7413,7414],{"class":120,"line":1315},[118,7415,2514],{"class":128},[118,7417,7418,7420,7423,7425,7428,7430,7432],{"class":120,"line":1321},[118,7419,4646],{"class":124},[118,7421,7422],{"class":128},"(p[j]",[118,7424,1088],{"class":124},[118,7426,7427],{"class":128},"p[j",[118,7429,609],{"class":124},[118,7431,346],{"class":177},[118,7433,4661],{"class":128},[118,7435,7436],{"class":120,"line":1333},[118,7437,4666],{"class":128},[118,7439,7440,7442,7444,7446],{"class":120,"line":1616},[118,7441,4671],{"class":124},[118,7443,4259],{"class":128},[118,7445,174],{"class":124},[118,7447,7448],{"class":128},"p[j];\n",[118,7450,7451,7454,7456,7458,7460,7462],{"class":120,"line":1621},[118,7452,7453],{"class":128},"                p[j]",[118,7455,174],{"class":124},[118,7457,7427],{"class":128},[118,7459,609],{"class":124},[118,7461,346],{"class":177},[118,7463,4694],{"class":128},[118,7465,7466,7469,7471,7473,7475,7477],{"class":120,"line":1627},[118,7467,7468],{"class":128},"                p[j",[118,7470,609],{"class":124},[118,7472,346],{"class":177},[118,7474,1068],{"class":128},[118,7476,174],{"class":124},[118,7478,4284],{"class":128},[118,7480,7481],{"class":120,"line":1632},[118,7482,4714],{"class":128},[118,7484,7485],{"class":120,"line":1646},[118,7486,2533],{"class":128},[118,7488,7489],{"class":120,"line":1651},[118,7490,2191],{"class":128},[118,7492,7493],{"class":120,"line":1657},[118,7494,1569],{"class":128},[118,7496,7497],{"class":120,"line":1678},[118,7498,2404],{"emptyLinePlaceholder":45},[118,7500,7501,7503,7505],{"class":120,"line":1683},[118,7502,132],{"class":124},[118,7504,1977],{"class":1967},[118,7506,1980],{"class":128},[118,7508,7509],{"class":120,"line":1697},[118,7510,1550],{"class":128},[118,7512,7513],{"class":120,"line":1702},[118,7514,7515],{"class":187},"    \u002F\u002F 1.创建数组\n",[118,7517,7518,7520,7522,7524,7526,7528,7530,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568],{"class":120,"line":1731},[118,7519,1989],{"class":124},[118,7521,3966],{"class":128},[118,7523,574],{"class":177},[118,7525,1068],{"class":128},[118,7527,174],{"class":124},[118,7529,1024],{"class":128},[118,7531,421],{"class":177},[118,7533,506],{"class":128},[118,7535,200],{"class":177},[118,7537,506],{"class":128},[118,7539,472],{"class":177},[118,7541,506],{"class":128},[118,7543,548],{"class":177},[118,7545,506],{"class":128},[118,7547,346],{"class":177},[118,7549,506],{"class":128},[118,7551,206],{"class":177},[118,7553,506],{"class":128},[118,7555,574],{"class":177},[118,7557,506],{"class":128},[118,7559,523],{"class":177},[118,7561,506],{"class":128},[118,7563,497],{"class":177},[118,7565,506],{"class":128},[118,7567,447],{"class":177},[118,7569,3999],{"class":128},[118,7571,7572,7574,7576,7578,7580],{"class":120,"line":1736},[118,7573,1989],{"class":124},[118,7575,7336],{"class":128},[118,7577,174],{"class":124},[118,7579,574],{"class":177},[118,7581,1294],{"class":128},[118,7583,7584,7586,7588,7590,7592],{"class":120,"line":1753},[118,7585,1989],{"class":124},[118,7587,6523],{"class":124},[118,7589,15],{"class":128},[118,7591,174],{"class":124},[118,7593,7043],{"class":128},[118,7595,7596],{"class":120,"line":1758},[118,7597,7598],{"class":187},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[118,7600,7601,7604],{"class":120,"line":1763},[118,7602,7603],{"class":1967},"    bubbleSort",[118,7605,7606],{"class":128},"(p,len);\n",[118,7608,7609],{"class":120,"line":1768},[118,7610,2404],{"emptyLinePlaceholder":45},[118,7612,7613],{"class":120,"line":1782},[118,7614,7615],{"class":187},"    \u002F\u002F 3.打印排序后的数组\n",[118,7617,7618,7620,7622,7624,7626,7628,7630,7632,7634,7637,7639],{"class":120,"line":1787},[118,7619,3205],{"class":124},[118,7621,1662],{"class":128},[118,7623,132],{"class":124},[118,7625,3036],{"class":128},[118,7627,174],{"class":124},[118,7629,320],{"class":177},[118,7631,3218],{"class":128},[118,7633,1038],{"class":124},[118,7635,7636],{"class":128},"len; i",[118,7638,2296],{"class":124},[118,7640,135],{"class":128},[118,7642,7643],{"class":120,"line":2581},[118,7644,2034],{"class":128},[118,7646,7647,7649,7651,7653,7655,7658],{"class":120,"line":2595},[118,7648,3455],{"class":128},[118,7650,6424],{"class":124},[118,7652,15],{"class":128},[118,7654,1172],{"class":124},[118,7656,7657],{"class":233},"\"\"",[118,7659,1294],{"class":128},[118,7661,7662,7665,7667],{"class":120,"line":2603},[118,7663,7664],{"class":128},"        p",[118,7666,2296],{"class":124},[118,7668,1294],{"class":128},[118,7670,7671],{"class":120,"line":2608},[118,7672,2191],{"class":128},[118,7674,7675],{"class":120,"line":2614},[118,7676,1569],{"class":128},[5131,7678,7679],{},"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":39,"searchDepth":40,"depth":40,"links":7681},[7682,7683,7684,7685,7686,7687,7688,7689],{"id":6288,"depth":40,"text":6289},{"id":6454,"depth":40,"text":6455},{"id":6610,"depth":40,"text":6611},{"id":6688,"depth":40,"text":6689},{"id":6767,"depth":40,"text":6768},{"id":6866,"depth":40,"text":6867},{"id":7105,"depth":40,"text":7106},{"id":7283,"depth":40,"text":7284},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6277,"description":6285},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7696,"title":7697,"body":7698,"description":7705,"extension":43,"meta":10679,"navigation":45,"path":10680,"seo":10681,"stem":10682,"__hash__":10683},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7699,"toc":10670},[7700,7703,7706,7710,7713,7716,7727,8065,8068,8072,8075,8082,8337,8341,8344,8347,8502,8506,8509,8512,8718,8722,8725,9028,9031,9039,9043,9046,9197,9199,9210,9267,9271,9276,9933,9941,9944,10038,10041,10661,10667],[10,7701,7697],{"id":7702},"_4结构体",[15,7704,7705],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[60,7707,7709],{"id":7708},"_41结构体定义与使用","4.1结构体定义与使用",[15,7711,7712],{},"语法：struct 结构体名 {结构体成员列表}；",[15,7714,7715],{},"通过结构体创建变量的方式：",[1135,7717,7718,7721,7724],{},[75,7719,7720],{},"struct 结构体名 变量名",[75,7722,7723],{},"struct 结构体名 变量名={成员1值，成员2值...}",[75,7725,7726],{},"定义结构体时顺便创建变量",[109,7728,7730],{"className":111,"code":7729,"language":113,"meta":39,"style":39},"#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",[115,7731,7732,7738,7748,7755,7760,7768,7772,7777,7781,7786,7791,7796,7803,7808,7815,7819,7826,7830,7834,7838,7842,7846,7850,7856,7860,7866,7874,7882,7886,7891,7896,7907,7912,7924,7935,7946,7951,7975,7980,7986,8013,8018,8024,8036,8048,8060],{"__ignoreMap":39},[118,7733,7734,7736],{"class":120,"line":121},[118,7735,1953],{"class":124},[118,7737,1956],{"class":233},[118,7739,7740,7742,7744,7746],{"class":120,"line":40},[118,7741,1961],{"class":124},[118,7743,1964],{"class":124},[118,7745,1968],{"class":1967},[118,7747,1294],{"class":128},[118,7749,7750,7752],{"class":120,"line":1183},[118,7751,1953],{"class":124},[118,7753,7754],{"class":233},"\u003Cstring>\n",[118,7756,7757],{"class":120,"line":1198},[118,7758,7759],{"class":187},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[118,7761,7762,7765],{"class":120,"line":1204},[118,7763,7764],{"class":124},"struct",[118,7766,7767],{"class":1967}," Student\n",[118,7769,7770],{"class":120,"line":1218},[118,7771,1550],{"class":128},[118,7773,7774],{"class":120,"line":1224},[118,7775,7776],{"class":187},"    \u002F\u002F成员列表\n",[118,7778,7779],{"class":120,"line":1315},[118,7780,2404],{"emptyLinePlaceholder":45},[118,7782,7783],{"class":120,"line":1321},[118,7784,7785],{"class":187},"    \u002F\u002F姓名\n",[118,7787,7788],{"class":120,"line":1333},[118,7789,7790],{"class":128},"    string name;\n",[118,7792,7793],{"class":120,"line":1616},[118,7794,7795],{"class":187},"    \u002F\u002F年龄\n",[118,7797,7798,7800],{"class":120,"line":1621},[118,7799,1989],{"class":124},[118,7801,7802],{"class":128}," age;\n",[118,7804,7805],{"class":120,"line":1627},[118,7806,7807],{"class":187},"    \u002F\u002F分数\n",[118,7809,7810,7812],{"class":120,"line":1632},[118,7811,1989],{"class":124},[118,7813,7814],{"class":128}," score;\n",[118,7816,7817],{"class":120,"line":1646},[118,7818,3999],{"class":128},[118,7820,7821,7823],{"class":120,"line":1651},[118,7822,7764],{"class":124},[118,7824,7825],{"class":1967}," School\n",[118,7827,7828],{"class":120,"line":1657},[118,7829,1550],{"class":128},[118,7831,7832],{"class":120,"line":1678},[118,7833,7776],{"class":187},[118,7835,7836],{"class":120,"line":1683},[118,7837,2404],{"emptyLinePlaceholder":45},[118,7839,7840],{"class":120,"line":1697},[118,7841,7785],{"class":187},[118,7843,7844],{"class":120,"line":1702},[118,7845,7790],{"class":128},[118,7847,7848],{"class":120,"line":1731},[118,7849,7795],{"class":187},[118,7851,7852,7854],{"class":120,"line":1736},[118,7853,1989],{"class":124},[118,7855,7802],{"class":128},[118,7857,7858],{"class":120,"line":1753},[118,7859,7807],{"class":187},[118,7861,7862,7864],{"class":120,"line":1758},[118,7863,1989],{"class":124},[118,7865,7814],{"class":128},[118,7867,7868,7871],{"class":120,"line":1763},[118,7869,7870],{"class":128},"} s3;",[118,7872,7873],{"class":187}," \u002F\u002F创建结构体时就创建了变量\n",[118,7875,7876,7878,7880],{"class":120,"line":1768},[118,7877,132],{"class":124},[118,7879,1977],{"class":1967},[118,7881,1980],{"class":128},[118,7883,7884],{"class":120,"line":1782},[118,7885,1550],{"class":128},[118,7887,7888],{"class":120,"line":1787},[118,7889,7890],{"class":187},"    \u002F\u002F2.通过学生类型创建具体学生\n",[118,7892,7893],{"class":120,"line":2581},[118,7894,7895],{"class":187},"    \u002F\u002F2.1 struct Student s1;\n",[118,7897,7898,7901,7904],{"class":120,"line":2595},[118,7899,7900],{"class":124},"    struct",[118,7902,7903],{"class":1967}," Student",[118,7905,7906],{"class":128}," s1;\n",[118,7908,7909],{"class":120,"line":2603},[118,7910,7911],{"class":187},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[118,7913,7914,7917,7919,7922],{"class":120,"line":2608},[118,7915,7916],{"class":128},"    s1.name",[118,7918,174],{"class":124},[118,7920,7921],{"class":233},"\"张三\"",[118,7923,1294],{"class":128},[118,7925,7926,7929,7931,7933],{"class":120,"line":2614},[118,7927,7928],{"class":128},"    s1.age",[118,7930,174],{"class":124},[118,7932,778],{"class":177},[118,7934,1294],{"class":128},[118,7936,7937,7940,7942,7944],{"class":120,"line":2620},[118,7938,7939],{"class":128},"    s1.score",[118,7941,174],{"class":124},[118,7943,382],{"class":177},[118,7945,1294],{"class":128},[118,7947,7948],{"class":120,"line":2625},[118,7949,7950],{"class":187},"    \u002F\u002F输出结果\n",[118,7952,7954,7956,7958,7961,7963,7966,7968,7971,7973],{"class":120,"line":7953},37,[118,7955,1555],{"class":128},[118,7957,1172],{"class":124},[118,7959,7960],{"class":128},"s1.name",[118,7962,1172],{"class":124},[118,7964,7965],{"class":128},"s1.age",[118,7967,1172],{"class":124},[118,7969,7970],{"class":128},"s1.score",[118,7972,1172],{"class":124},[118,7974,1195],{"class":128},[118,7976,7978],{"class":120,"line":7977},38,[118,7979,2404],{"emptyLinePlaceholder":45},[118,7981,7983],{"class":120,"line":7982},39,[118,7984,7985],{"class":187},"    \u002F\u002F2.2 struct Student s2={...}\n",[118,7987,7989,7991,7993,7996,7998,8000,8003,8005,8007,8009,8011],{"class":120,"line":7988},40,[118,7990,7900],{"class":124},[118,7992,7903],{"class":1967},[118,7994,7995],{"class":128}," s2",[118,7997,174],{"class":124},[118,7999,1024],{"class":128},[118,8001,8002],{"class":233},"\"王五\"",[118,8004,506],{"class":128},[118,8006,778],{"class":177},[118,8008,506],{"class":128},[118,8010,382],{"class":177},[118,8012,3999],{"class":128},[118,8014,8016],{"class":120,"line":8015},41,[118,8017,2404],{"emptyLinePlaceholder":45},[118,8019,8021],{"class":120,"line":8020},42,[118,8022,8023],{"class":187},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[118,8025,8027,8030,8032,8034],{"class":120,"line":8026},43,[118,8028,8029],{"class":128},"    s3.name",[118,8031,174],{"class":124},[118,8033,3682],{"class":233},[118,8035,1294],{"class":128},[118,8037,8039,8042,8044,8046],{"class":120,"line":8038},44,[118,8040,8041],{"class":128},"    s3.age",[118,8043,174],{"class":124},[118,8045,778],{"class":177},[118,8047,1294],{"class":128},[118,8049,8051,8054,8056,8058],{"class":120,"line":8050},45,[118,8052,8053],{"class":128},"    s3.score",[118,8055,174],{"class":124},[118,8057,828],{"class":177},[118,8059,1294],{"class":128},[118,8061,8063],{"class":120,"line":8062},46,[118,8064,1569],{"class":128},[15,8066,8067],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[60,8069,8071],{"id":8070},"_42结构体数组","4.2结构体数组",[15,8073,8074],{},"将自定义的结构体放入到数组中方便维护",[15,8076,8077,8078,8081],{},"语法：struct 结构体名 数组名",[118,8079,8080],{},"元素个数","={ {}，{},...{} };",[109,8083,8085],{"className":111,"code":8084,"language":113,"meta":39,"style":39},"#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",[115,8086,8087,8093,8103,8109,8114,8120,8124,8128,8134,8140,8144,8148,8156,8160,8165,8180,8184,8200,8216,8220,8225,8241,8256,8271,8276,8302,8306,8329,8333],{"__ignoreMap":39},[118,8088,8089,8091],{"class":120,"line":121},[118,8090,1953],{"class":124},[118,8092,1956],{"class":233},[118,8094,8095,8097,8099,8101],{"class":120,"line":40},[118,8096,1961],{"class":124},[118,8098,1964],{"class":124},[118,8100,1968],{"class":1967},[118,8102,1294],{"class":128},[118,8104,8105,8107],{"class":120,"line":1183},[118,8106,1953],{"class":124},[118,8108,7754],{"class":233},[118,8110,8111],{"class":120,"line":1198},[118,8112,8113],{"class":187},"\u002F\u002F1.定义结构体\n",[118,8115,8116,8118],{"class":120,"line":1204},[118,8117,7764],{"class":124},[118,8119,7767],{"class":1967},[118,8121,8122],{"class":120,"line":1218},[118,8123,1550],{"class":128},[118,8125,8126],{"class":120,"line":1224},[118,8127,7790],{"class":128},[118,8129,8130,8132],{"class":120,"line":1315},[118,8131,1989],{"class":124},[118,8133,7802],{"class":128},[118,8135,8136,8138],{"class":120,"line":1321},[118,8137,1989],{"class":124},[118,8139,7814],{"class":128},[118,8141,8142],{"class":120,"line":1333},[118,8143,2404],{"emptyLinePlaceholder":45},[118,8145,8146],{"class":120,"line":1616},[118,8147,3999],{"class":128},[118,8149,8150,8152,8154],{"class":120,"line":1621},[118,8151,132],{"class":124},[118,8153,1977],{"class":1967},[118,8155,1980],{"class":128},[118,8157,8158],{"class":120,"line":1627},[118,8159,1550],{"class":128},[118,8161,8162],{"class":120,"line":1632},[118,8163,8164],{"class":187},"    \u002F\u002F2.创建结构体数组\n",[118,8166,8167,8169,8171,8174,8176,8178],{"class":120,"line":1646},[118,8168,7900],{"class":124},[118,8170,7903],{"class":1967},[118,8172,8173],{"class":128}," stuArray[",[118,8175,206],{"class":177},[118,8177,1068],{"class":128},[118,8179,4912],{"class":124},[118,8181,8182],{"class":120,"line":1651},[118,8183,2034],{"class":128},[118,8185,8186,8188,8190,8192,8194,8196,8198],{"class":120,"line":1657},[118,8187,4921],{"class":128},[118,8189,7921],{"class":233},[118,8191,506],{"class":128},[118,8193,778],{"class":177},[118,8195,506],{"class":128},[118,8197,439],{"class":177},[118,8199,4934],{"class":128},[118,8201,8202,8204,8206,8208,8210,8212,8214],{"class":120,"line":1678},[118,8203,4921],{"class":128},[118,8205,3682],{"class":233},[118,8207,506],{"class":128},[118,8209,703],{"class":177},[118,8211,506],{"class":128},[118,8213,703],{"class":177},[118,8215,1569],{"class":128},[118,8217,8218],{"class":120,"line":1683},[118,8219,2191],{"class":128},[118,8221,8222],{"class":120,"line":1697},[118,8223,8224],{"class":187},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[118,8226,8227,8230,8232,8235,8237,8239],{"class":120,"line":1702},[118,8228,8229],{"class":128},"    stuArray[",[118,8231,346],{"class":177},[118,8233,8234],{"class":128},"].name",[118,8236,174],{"class":124},[118,8238,3705],{"class":233},[118,8240,1294],{"class":128},[118,8242,8243,8245,8247,8250,8252,8254],{"class":120,"line":1731},[118,8244,8229],{"class":128},[118,8246,346],{"class":177},[118,8248,8249],{"class":128},"].age",[118,8251,174],{"class":124},[118,8253,206],{"class":177},[118,8255,1294],{"class":128},[118,8257,8258,8260,8262,8265,8267,8269],{"class":120,"line":1736},[118,8259,8229],{"class":128},[118,8261,346],{"class":177},[118,8263,8264],{"class":128},"].score",[118,8266,174],{"class":124},[118,8268,206],{"class":177},[118,8270,1294],{"class":128},[118,8272,8273],{"class":120,"line":1753},[118,8274,8275],{"class":187},"    \u002F\u002F4.遍历结构体数组\n",[118,8277,8278,8280,8282,8284,8286,8288,8290,8292,8294,8296,8298,8300],{"class":120,"line":1758},[118,8279,3205],{"class":124},[118,8281,1662],{"class":128},[118,8283,132],{"class":124},[118,8285,3036],{"class":128},[118,8287,174],{"class":124},[118,8289,320],{"class":177},[118,8291,3043],{"class":128},[118,8293,1038],{"class":124},[118,8295,206],{"class":177},[118,8297,3043],{"class":128},[118,8299,2296],{"class":124},[118,8301,135],{"class":128},[118,8303,8304],{"class":120,"line":1763},[118,8305,2034],{"class":128},[118,8307,8308,8310,8312,8315,8317,8320,8322,8325,8327],{"class":120,"line":1768},[118,8309,3455],{"class":128},[118,8311,1172],{"class":124},[118,8313,8314],{"class":128},"stuArray[i].name",[118,8316,1172],{"class":124},[118,8318,8319],{"class":128},"stuArray[i].age",[118,8321,1172],{"class":124},[118,8323,8324],{"class":128},"stuArray[i].score",[118,8326,1172],{"class":124},[118,8328,1195],{"class":128},[118,8330,8331],{"class":120,"line":1782},[118,8332,2191],{"class":128},[118,8334,8335],{"class":120,"line":1787},[118,8336,1569],{"class":128},[60,8338,8340],{"id":8339},"_43结构体指针","4.3结构体指针",[15,8342,8343],{},"作用：通过指针访问结构体中的成员",[15,8345,8346],{},"利用操作符->可以通过结构体指针访问结构体属性",[109,8348,8350],{"className":111,"code":8349,"language":113,"meta":39,"style":39},"#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",[115,8351,8352,8358,8368,8374,8378,8384,8388,8392,8398,8404,8408,8416,8420,8425,8450,8455,8470,8475,8498],{"__ignoreMap":39},[118,8353,8354,8356],{"class":120,"line":121},[118,8355,1953],{"class":124},[118,8357,1956],{"class":233},[118,8359,8360,8362,8364,8366],{"class":120,"line":40},[118,8361,1961],{"class":124},[118,8363,1964],{"class":124},[118,8365,1968],{"class":1967},[118,8367,1294],{"class":128},[118,8369,8370,8372],{"class":120,"line":1183},[118,8371,1953],{"class":124},[118,8373,7754],{"class":233},[118,8375,8376],{"class":120,"line":1198},[118,8377,8113],{"class":187},[118,8379,8380,8382],{"class":120,"line":1204},[118,8381,7764],{"class":124},[118,8383,7767],{"class":1967},[118,8385,8386],{"class":120,"line":1218},[118,8387,1550],{"class":128},[118,8389,8390],{"class":120,"line":1224},[118,8391,7790],{"class":128},[118,8393,8394,8396],{"class":120,"line":1315},[118,8395,1989],{"class":124},[118,8397,7802],{"class":128},[118,8399,8400,8402],{"class":120,"line":1321},[118,8401,1989],{"class":124},[118,8403,7814],{"class":128},[118,8405,8406],{"class":120,"line":1333},[118,8407,3999],{"class":128},[118,8409,8410,8412,8414],{"class":120,"line":1616},[118,8411,132],{"class":124},[118,8413,1977],{"class":1967},[118,8415,1980],{"class":128},[118,8417,8418],{"class":120,"line":1621},[118,8419,1550],{"class":128},[118,8421,8422],{"class":120,"line":1627},[118,8423,8424],{"class":187},"    \u002F\u002F创建学生结构体变量\n",[118,8426,8427,8429,8431,8434,8436,8438,8440,8442,8444,8446,8448],{"class":120,"line":1632},[118,8428,7900],{"class":124},[118,8430,7903],{"class":1967},[118,8432,8433],{"class":128}," s",[118,8435,174],{"class":124},[118,8437,1024],{"class":128},[118,8439,7921],{"class":233},[118,8441,506],{"class":128},[118,8443,778],{"class":177},[118,8445,506],{"class":128},[118,8447,1726],{"class":177},[118,8449,3999],{"class":128},[118,8451,8452],{"class":120,"line":1646},[118,8453,8454],{"class":187},"    \u002F\u002F通过指针指向结构体变量\n",[118,8456,8457,8459,8461,8463,8465,8467],{"class":120,"line":1651},[118,8458,7900],{"class":124},[118,8460,7903],{"class":1967},[118,8462,6523],{"class":124},[118,8464,15],{"class":128},[118,8466,6344],{"class":124},[118,8468,8469],{"class":128},"s\n",[118,8471,8472],{"class":120,"line":1657},[118,8473,8474],{"class":187},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[118,8476,8477,8479,8481,8484,8486,8489,8491,8494,8496],{"class":120,"line":1678},[118,8478,1555],{"class":128},[118,8480,1172],{"class":124},[118,8482,8483],{"class":128},"p->name",[118,8485,1172],{"class":124},[118,8487,8488],{"class":128},"p->age",[118,8490,1172],{"class":124},[118,8492,8493],{"class":128},"p->score",[118,8495,1172],{"class":124},[118,8497,1195],{"class":128},[118,8499,8500],{"class":120,"line":1683},[118,8501,1569],{"class":128},[60,8503,8505],{"id":8504},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[15,8507,8508],{},"作用：结构体中的成员可以是另一个结构体",[15,8510,8511],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[109,8513,8515],{"className":111,"code":8514,"language":113,"meta":39,"style":39},"#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",[115,8516,8517,8523,8533,8539,8544,8552,8556,8560,8566,8572,8576,8581,8588,8592,8599,8603,8609,8614,8618,8626,8630,8635,8640,8645,8656,8668,8679,8692,8703,8714],{"__ignoreMap":39},[118,8518,8519,8521],{"class":120,"line":121},[118,8520,1953],{"class":124},[118,8522,1956],{"class":233},[118,8524,8525,8527,8529,8531],{"class":120,"line":40},[118,8526,1961],{"class":124},[118,8528,1964],{"class":124},[118,8530,1968],{"class":1967},[118,8532,1294],{"class":128},[118,8534,8535,8537],{"class":120,"line":1183},[118,8536,1953],{"class":124},[118,8538,7754],{"class":233},[118,8540,8541],{"class":120,"line":1198},[118,8542,8543],{"class":187},"\u002F\u002F定义学生结构体\n",[118,8545,8546,8548,8550],{"class":120,"line":1204},[118,8547,7764],{"class":124},[118,8549,7903],{"class":1967},[118,8551,2678],{"class":128},[118,8553,8554],{"class":120,"line":1218},[118,8555,1550],{"class":128},[118,8557,8558],{"class":120,"line":1224},[118,8559,7790],{"class":128},[118,8561,8562,8564],{"class":120,"line":1315},[118,8563,1989],{"class":124},[118,8565,7802],{"class":128},[118,8567,8568,8570],{"class":120,"line":1321},[118,8569,1989],{"class":124},[118,8571,7814],{"class":128},[118,8573,8574],{"class":120,"line":1333},[118,8575,1569],{"class":128},[118,8577,8578],{"class":120,"line":1616},[118,8579,8580],{"class":187},"\u002F\u002F定义老师结构体\n",[118,8582,8583,8585],{"class":120,"line":1621},[118,8584,7764],{"class":124},[118,8586,8587],{"class":1967}," Teacher\n",[118,8589,8590],{"class":120,"line":1627},[118,8591,1550],{"class":128},[118,8593,8594,8596],{"class":120,"line":1632},[118,8595,1989],{"class":124},[118,8597,8598],{"class":128}," id;\n",[118,8600,8601],{"class":120,"line":1646},[118,8602,7790],{"class":128},[118,8604,8605,8607],{"class":120,"line":1651},[118,8606,1989],{"class":124},[118,8608,7802],{"class":128},[118,8610,8611],{"class":120,"line":1657},[118,8612,8613],{"class":128},"    Student stu;\n",[118,8615,8616],{"class":120,"line":1678},[118,8617,1569],{"class":128},[118,8619,8620,8622,8624],{"class":120,"line":1683},[118,8621,132],{"class":124},[118,8623,1977],{"class":1967},[118,8625,5983],{"class":128},[118,8627,8628],{"class":120,"line":1697},[118,8629,1550],{"class":128},[118,8631,8632],{"class":120,"line":1702},[118,8633,8634],{"class":187},"    \u002F\u002F结构体嵌套结构体\n",[118,8636,8637],{"class":120,"line":1731},[118,8638,8639],{"class":187},"    \u002F\u002F创建老师\n",[118,8641,8642],{"class":120,"line":1736},[118,8643,8644],{"class":128},"    Teacher t;\n",[118,8646,8647,8650,8652,8654],{"class":120,"line":1753},[118,8648,8649],{"class":128},"    t.id",[118,8651,174],{"class":124},[118,8653,439],{"class":177},[118,8655,1294],{"class":128},[118,8657,8658,8661,8663,8666],{"class":120,"line":1758},[118,8659,8660],{"class":128},"    t.name",[118,8662,174],{"class":124},[118,8664,8665],{"class":233},"\"老王\"",[118,8667,1294],{"class":128},[118,8669,8670,8673,8675,8677],{"class":120,"line":1763},[118,8671,8672],{"class":128},"    t.age",[118,8674,174],{"class":124},[118,8676,778],{"class":177},[118,8678,1294],{"class":128},[118,8680,8681,8684,8686,8689],{"class":120,"line":1768},[118,8682,8683],{"class":128},"    t.stu.name",[118,8685,174],{"class":124},[118,8687,8688],{"class":233},"\"小王\"",[118,8690,8691],{"class":128},"；\n",[118,8693,8694,8697,8699,8701],{"class":120,"line":1782},[118,8695,8696],{"class":128},"    t.stu.age",[118,8698,174],{"class":124},[118,8700,828],{"class":177},[118,8702,1294],{"class":128},[118,8704,8705,8708,8710,8712],{"class":120,"line":1787},[118,8706,8707],{"class":128},"    t.stu.score",[118,8709,174],{"class":124},[118,8711,472],{"class":177},[118,8713,1294],{"class":128},[118,8715,8716],{"class":120,"line":2581},[118,8717,1569],{"class":128},[60,8719,8721],{"id":8720},"_45结构体做函数参数","4.5结构体做函数参数",[15,8723,8724],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[109,8726,8728],{"className":111,"code":8727,"language":113,"meta":39,"style":39},"#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",[115,8729,8730,8736,8746,8752,8758,8762,8766,8772,8778,8782,8787,8792,8809,8813,8846,8850,8855,8874,8878,8909,8913,8921,8925,8934,8946,8958,8970,8983,8991,9004,9016,9024],{"__ignoreMap":39},[118,8731,8732,8734],{"class":120,"line":121},[118,8733,1953],{"class":124},[118,8735,1956],{"class":233},[118,8737,8738,8740,8742,8744],{"class":120,"line":40},[118,8739,1961],{"class":124},[118,8741,1964],{"class":124},[118,8743,1968],{"class":1967},[118,8745,1294],{"class":128},[118,8747,8748,8750],{"class":120,"line":1183},[118,8749,1953],{"class":124},[118,8751,7754],{"class":233},[118,8753,8754,8756],{"class":120,"line":1198},[118,8755,7764],{"class":124},[118,8757,7767],{"class":1967},[118,8759,8760],{"class":120,"line":1204},[118,8761,1550],{"class":128},[118,8763,8764],{"class":120,"line":1218},[118,8765,7790],{"class":128},[118,8767,8768,8770],{"class":120,"line":1224},[118,8769,1989],{"class":124},[118,8771,7802],{"class":128},[118,8773,8774,8776],{"class":120,"line":1315},[118,8775,1989],{"class":124},[118,8777,7814],{"class":128},[118,8779,8780],{"class":120,"line":1321},[118,8781,3999],{"class":128},[118,8783,8784],{"class":120,"line":1333},[118,8785,8786],{"class":187},"\u002F\u002F打印学生信息的函数\n",[118,8788,8789],{"class":120,"line":1616},[118,8790,8791],{"class":187},"\u002F\u002F值传递\n",[118,8793,8794,8796,8799,8801,8803,8805,8807],{"class":120,"line":1621},[118,8795,5369],{"class":124},[118,8797,8798],{"class":1967}," printStudent1",[118,8800,129],{"class":128},[118,8802,7764],{"class":124},[118,8804,7903],{"class":1967},[118,8806,8433],{"class":5221},[118,8808,135],{"class":128},[118,8810,8811],{"class":120,"line":1627},[118,8812,1550],{"class":128},[118,8814,8815,8817,8819,8822,8824,8827,8829,8832,8834,8836,8838,8841,8843],{"class":120,"line":1632},[118,8816,6534],{"class":128},[118,8818,1172],{"class":124},[118,8820,8821],{"class":128}," s.name ",[118,8823,1172],{"class":124},[118,8825,8826],{"class":233}," \" \"",[118,8828,1448],{"class":124},[118,8830,8831],{"class":128}," s.age ",[118,8833,1172],{"class":124},[118,8835,8826],{"class":233},[118,8837,1448],{"class":124},[118,8839,8840],{"class":128}," s.score ",[118,8842,1172],{"class":124},[118,8844,8845],{"class":128}," endl;\n",[118,8847,8848],{"class":120,"line":1646},[118,8849,1569],{"class":128},[118,8851,8852],{"class":120,"line":1651},[118,8853,8854],{"class":187},"\u002F\u002F地址传递\n",[118,8856,8857,8859,8862,8864,8866,8868,8870,8872],{"class":120,"line":1657},[118,8858,5369],{"class":124},[118,8860,8861],{"class":1967}," printStudent2",[118,8863,129],{"class":128},[118,8865,7764],{"class":124},[118,8867,7903],{"class":1967},[118,8869,6523],{"class":124},[118,8871,823],{"class":5221},[118,8873,135],{"class":128},[118,8875,8876],{"class":120,"line":1678},[118,8877,1550],{"class":128},[118,8879,8880,8882,8884,8887,8889,8891,8893,8896,8898,8900,8902,8905,8907],{"class":120,"line":1683},[118,8881,6534],{"class":128},[118,8883,1172],{"class":124},[118,8885,8886],{"class":128}," s->name ",[118,8888,1172],{"class":124},[118,8890,8826],{"class":233},[118,8892,1448],{"class":124},[118,8894,8895],{"class":128}," s->age ",[118,8897,1172],{"class":124},[118,8899,8826],{"class":233},[118,8901,1448],{"class":124},[118,8903,8904],{"class":128}," s->score ",[118,8906,1172],{"class":124},[118,8908,8845],{"class":128},[118,8910,8911],{"class":120,"line":1697},[118,8912,1569],{"class":128},[118,8914,8915,8917,8919],{"class":120,"line":1702},[118,8916,132],{"class":124},[118,8918,1977],{"class":1967},[118,8920,1980],{"class":128},[118,8922,8923],{"class":120,"line":1731},[118,8924,1550],{"class":128},[118,8926,8927,8929,8931],{"class":120,"line":1736},[118,8928,7900],{"class":124},[118,8930,7903],{"class":1967},[118,8932,8933],{"class":128}," s;\n",[118,8935,8936,8939,8941,8944],{"class":120,"line":1753},[118,8937,8938],{"class":128},"    s.name ",[118,8940,174],{"class":124},[118,8942,8943],{"class":233}," \"张三\"",[118,8945,1294],{"class":128},[118,8947,8948,8951,8953,8956],{"class":120,"line":1758},[118,8949,8950],{"class":128},"    s.age ",[118,8952,174],{"class":124},[118,8954,8955],{"class":177}," 20",[118,8957,1294],{"class":128},[118,8959,8960,8963,8965,8968],{"class":120,"line":1763},[118,8961,8962],{"class":128},"    s.score ",[118,8964,174],{"class":124},[118,8966,8967],{"class":177}," 85",[118,8969,1294],{"class":128},[118,8971,8972,8974,8976,8979,8981],{"class":120,"line":1768},[118,8973,1555],{"class":128},[118,8975,1172],{"class":124},[118,8977,8978],{"class":233},"\"值传递:\"",[118,8980,1172],{"class":124},[118,8982,1195],{"class":128},[118,8984,8985,8988],{"class":120,"line":1782},[118,8986,8987],{"class":1967},"    printStudent1",[118,8989,8990],{"class":128},"(s);\n",[118,8992,8993,8995,8997,9000,9002],{"class":120,"line":1787},[118,8994,1555],{"class":128},[118,8996,1172],{"class":124},[118,8998,8999],{"class":233},"\"地址传递:\"",[118,9001,1172],{"class":124},[118,9003,1195],{"class":128},[118,9005,9006,9009,9011,9013],{"class":120,"line":2581},[118,9007,9008],{"class":1967},"    printStudent2",[118,9010,129],{"class":128},[118,9012,481],{"class":124},[118,9014,9015],{"class":128},"s); \n",[118,9017,9018,9020,9022],{"class":120,"line":2595},[118,9019,4094],{"class":124},[118,9021,4097],{"class":177},[118,9023,1294],{"class":128},[118,9025,9026],{"class":120,"line":2603},[118,9027,1569],{"class":128},[15,9029,9030],{},"注意：",[1135,9032,9033,9036],{},[75,9034,9035],{},"1.先定义结构体，不要在函数中写结构体的定义",[75,9037,9038],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[60,9040,9042],{"id":9041},"_46结构体中const使用场景","4.6结构体中const使用场景",[15,9044,9045],{},"用const防止误操作",[109,9047,9049],{"className":111,"code":9048,"language":113,"meta":39,"style":39},"#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",[115,9050,9051,9057,9067,9073,9078,9082,9086,9092,9098,9102,9118,9122,9145,9149,9157,9161,9182,9189,9193],{"__ignoreMap":39},[118,9052,9053,9055],{"class":120,"line":121},[118,9054,1953],{"class":124},[118,9056,1956],{"class":233},[118,9058,9059,9061,9063,9065],{"class":120,"line":40},[118,9060,1961],{"class":124},[118,9062,1964],{"class":124},[118,9064,1968],{"class":1967},[118,9066,1294],{"class":128},[118,9068,9069,9071],{"class":120,"line":1183},[118,9070,1953],{"class":124},[118,9072,7754],{"class":233},[118,9074,9075],{"class":120,"line":1198},[118,9076,9077],{"class":128},"sctuct Student\n",[118,9079,9080],{"class":120,"line":1204},[118,9081,1550],{"class":128},[118,9083,9084],{"class":120,"line":1218},[118,9085,7790],{"class":128},[118,9087,9088,9090],{"class":120,"line":1224},[118,9089,1989],{"class":124},[118,9091,7802],{"class":128},[118,9093,9094,9096],{"class":120,"line":1315},[118,9095,1989],{"class":124},[118,9097,7814],{"class":128},[118,9099,9100],{"class":120,"line":1321},[118,9101,3999],{"class":128},[118,9103,9104,9106,9109,9111,9114,9116],{"class":120,"line":1333},[118,9105,5369],{"class":124},[118,9107,9108],{"class":1967}," printStudents",[118,9110,129],{"class":128},[118,9112,9113],{"class":1967},"student",[118,9115,8433],{"class":5221},[118,9117,135],{"class":128},[118,9119,9120],{"class":120,"line":1616},[118,9121,1550],{"class":128},[118,9123,9124,9126,9128,9131,9133,9136,9138,9141,9143],{"class":120,"line":1621},[118,9125,1555],{"class":128},[118,9127,1172],{"class":124},[118,9129,9130],{"class":128},"s.name",[118,9132,1172],{"class":124},[118,9134,9135],{"class":128},"s.age",[118,9137,1172],{"class":124},[118,9139,9140],{"class":128},"s.score",[118,9142,1172],{"class":124},[118,9144,1195],{"class":128},[118,9146,9147],{"class":120,"line":1627},[118,9148,1569],{"class":128},[118,9150,9151,9153,9155],{"class":120,"line":1632},[118,9152,132],{"class":124},[118,9154,1977],{"class":1967},[118,9156,5983],{"class":128},[118,9158,9159],{"class":120,"line":1646},[118,9160,1550],{"class":128},[118,9162,9163,9166,9168,9170,9172,9174,9176,9178,9180],{"class":120,"line":1651},[118,9164,9165],{"class":128},"    Student s",[118,9167,174],{"class":124},[118,9169,1024],{"class":128},[118,9171,7921],{"class":233},[118,9173,506],{"class":128},[118,9175,778],{"class":177},[118,9177,506],{"class":128},[118,9179,778],{"class":177},[118,9181,3999],{"class":128},[118,9183,9184,9187],{"class":120,"line":1657},[118,9185,9186],{"class":1967},"    printStudent",[118,9188,8990],{"class":128},[118,9190,9191],{"class":120,"line":1678},[118,9192,2404],{"emptyLinePlaceholder":45},[118,9194,9195],{"class":120,"line":1683},[118,9196,1569],{"class":128},[15,9198,9030],{},[1135,9200,9201,9204,9207],{},[75,9202,9203],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[75,9205,9206],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[75,9208,9209],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[109,9211,9213],{"className":111,"code":9212,"language":113,"meta":39,"style":39},"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",[115,9214,9215,9234,9238,9243,9263],{"__ignoreMap":39},[118,9216,9217,9219,9221,9223,9225,9228,9230,9232],{"class":120,"line":121},[118,9218,5369],{"class":124},[118,9220,9108],{"class":1967},[118,9222,129],{"class":128},[118,9224,6797],{"class":124},[118,9226,9227],{"class":1967}," student",[118,9229,6523],{"class":124},[118,9231,823],{"class":5221},[118,9233,135],{"class":128},[118,9235,9236],{"class":120,"line":40},[118,9237,1550],{"class":128},[118,9239,9240],{"class":120,"line":1183},[118,9241,9242],{"class":187},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[118,9244,9245,9247,9249,9251,9253,9255,9257,9259,9261],{"class":120,"line":1198},[118,9246,1555],{"class":128},[118,9248,1172],{"class":124},[118,9250,9130],{"class":128},[118,9252,1172],{"class":124},[118,9254,9135],{"class":128},[118,9256,1172],{"class":124},[118,9258,9140],{"class":128},[118,9260,1172],{"class":124},[118,9262,1195],{"class":128},[118,9264,9265],{"class":120,"line":1204},[118,9266,1569],{"class":128},[60,9268,9270],{"id":9269},"_47案例","4.7案例",[72,9272,9273],{},[75,9274,9275],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[109,9277,9279],{"className":111,"code":9278,"language":113,"meta":39,"style":39},"#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",[115,9280,9281,9287,9297,9303,9310,9314,9320,9324,9329,9335,9341,9345,9349,9355,9359,9364,9369,9382,9386,9391,9417,9421,9433,9460,9464,9476,9486,9490,9495,9524,9528,9540,9549,9576,9587,9597,9601,9605,9609,9614,9638,9642,9666,9670,9689,9715,9719,9744,9767,9791,9796,9801,9806,9815,9820,9826,9847,9853,9867,9873,9900,9909,9915,9923,9928],{"__ignoreMap":39},[118,9282,9283,9285],{"class":120,"line":121},[118,9284,1953],{"class":124},[118,9286,1956],{"class":233},[118,9288,9289,9291,9293,9295],{"class":120,"line":40},[118,9290,1961],{"class":124},[118,9292,1964],{"class":124},[118,9294,1968],{"class":1967},[118,9296,1294],{"class":128},[118,9298,9299,9301],{"class":120,"line":1183},[118,9300,1953],{"class":124},[118,9302,7754],{"class":233},[118,9304,9305,9307],{"class":120,"line":1198},[118,9306,1953],{"class":124},[118,9308,9309],{"class":233},"\u003Cctime>\n",[118,9311,9312],{"class":120,"line":1204},[118,9313,8543],{"class":187},[118,9315,9316,9318],{"class":120,"line":1218},[118,9317,7764],{"class":124},[118,9319,7767],{"class":1967},[118,9321,9322],{"class":120,"line":1224},[118,9323,1550],{"class":128},[118,9325,9326],{"class":120,"line":1315},[118,9327,9328],{"class":128},"    string sName;\n",[118,9330,9331,9333],{"class":120,"line":1321},[118,9332,1989],{"class":124},[118,9334,7802],{"class":128},[118,9336,9337,9339],{"class":120,"line":1333},[118,9338,1989],{"class":124},[118,9340,7814],{"class":128},[118,9342,9343],{"class":120,"line":1616},[118,9344,3999],{"class":128},[118,9346,9347],{"class":120,"line":1621},[118,9348,8580],{"class":187},[118,9350,9351,9353],{"class":120,"line":1627},[118,9352,7764],{"class":124},[118,9354,8587],{"class":1967},[118,9356,9357],{"class":120,"line":1632},[118,9358,1550],{"class":128},[118,9360,9361],{"class":120,"line":1646},[118,9362,9363],{"class":128},"    string tName;\n",[118,9365,9366],{"class":120,"line":1651},[118,9367,9368],{"class":187},"    \u002F\u002F学生数组\n",[118,9370,9371,9373,9375,9378,9380],{"class":120,"line":1657},[118,9372,7900],{"class":124},[118,9374,7903],{"class":1967},[118,9376,9377],{"class":128}," sArray[",[118,9379,447],{"class":177},[118,9381,4694],{"class":128},[118,9383,9384],{"class":120,"line":1678},[118,9385,3999],{"class":128},[118,9387,9388],{"class":120,"line":1683},[118,9389,9390],{"class":187},"\u002F\u002F给老师和学生赋值的函数\n",[118,9392,9393,9395,9398,9400,9402,9405,9408,9411,9413,9415],{"class":120,"line":1697},[118,9394,5369],{"class":124},[118,9396,9397],{"class":1967}," allocateSpace",[118,9399,129],{"class":128},[118,9401,7764],{"class":124},[118,9403,9404],{"class":1967}," Teacher",[118,9406,9407],{"class":5221}," tArray",[118,9409,9410],{"class":128},"[],",[118,9412,132],{"class":124},[118,9414,7336],{"class":5221},[118,9416,135],{"class":128},[118,9418,9419],{"class":120,"line":1702},[118,9420,1550],{"class":128},[118,9422,9423,9426,9428,9431],{"class":120,"line":1731},[118,9424,9425],{"class":128},"    string nameSeed",[118,9427,174],{"class":124},[118,9429,9430],{"class":233},"\"ABCDE\"",[118,9432,1294],{"class":128},[118,9434,9435,9437,9439,9441,9444,9446,9448,9451,9453,9456,9458],{"class":120,"line":1736},[118,9436,3205],{"class":124},[118,9438,1662],{"class":128},[118,9440,132],{"class":124},[118,9442,9443],{"class":128}," i ",[118,9445,174],{"class":124},[118,9447,4097],{"class":177},[118,9449,9450],{"class":128},"; i ",[118,9452,1038],{"class":124},[118,9454,9455],{"class":128}," len; i",[118,9457,2296],{"class":124},[118,9459,135],{"class":128},[118,9461,9462],{"class":120,"line":1753},[118,9463,2034],{"class":128},[118,9465,9466,9469,9471,9474],{"class":120,"line":1758},[118,9467,9468],{"class":128},"        tArray[i].tName ",[118,9470,174],{"class":124},[118,9472,9473],{"class":233}," \"Teacher_\"",[118,9475,1294],{"class":128},[118,9477,9478,9480,9483],{"class":120,"line":1763},[118,9479,9468],{"class":128},[118,9481,9482],{"class":124},"+=",[118,9484,9485],{"class":128},"nameSeed[i];\n",[118,9487,9488],{"class":120,"line":1768},[118,9489,2404],{"emptyLinePlaceholder":45},[118,9491,9492],{"class":120,"line":1782},[118,9493,9494],{"class":187},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[118,9496,9497,9499,9501,9503,9506,9508,9510,9513,9515,9517,9520,9522],{"class":120,"line":1787},[118,9498,3407],{"class":124},[118,9500,1662],{"class":128},[118,9502,132],{"class":124},[118,9504,9505],{"class":128}," j ",[118,9507,174],{"class":124},[118,9509,4097],{"class":177},[118,9511,9512],{"class":128},"; j ",[118,9514,1038],{"class":124},[118,9516,2152],{"class":177},[118,9518,9519],{"class":128},"; j",[118,9521,2296],{"class":124},[118,9523,135],{"class":128},[118,9525,9526],{"class":120,"line":2581},[118,9527,2514],{"class":128},[118,9529,9530,9533,9535,9538],{"class":120,"line":2595},[118,9531,9532],{"class":128},"            tArray[i].sArray[j].sName ",[118,9534,174],{"class":124},[118,9536,9537],{"class":233}," \"Student_\"",[118,9539,1294],{"class":128},[118,9541,9542,9544,9546],{"class":120,"line":2603},[118,9543,9532],{"class":128},[118,9545,9482],{"class":124},[118,9547,9548],{"class":128}," nameSeed[j];\n",[118,9550,9551,9554,9557,9559,9561,9563,9565,9567,9569,9571,9573],{"class":120,"line":2608},[118,9552,9553],{"class":124},"            int",[118,9555,9556],{"class":128}," random",[118,9558,174],{"class":124},[118,9560,2428],{"class":1967},[118,9562,2431],{"class":128},[118,9564,456],{"class":124},[118,9566,1035],{"class":177},[118,9568,609],{"class":124},[118,9570,529],{"class":177},[118,9572,184],{"class":128},[118,9574,9575],{"class":187},"\u002F\u002F40~99\n",[118,9577,9578,9581,9583,9585],{"class":120,"line":2614},[118,9579,9580],{"class":128},"            tArray[i].sArray[j].age ",[118,9582,174],{"class":124},[118,9584,8955],{"class":177},[118,9586,1294],{"class":128},[118,9588,9589,9592,9594],{"class":120,"line":2620},[118,9590,9591],{"class":128},"            tArray[i].sArray[j].score ",[118,9593,174],{"class":124},[118,9595,9596],{"class":128}," random;\n",[118,9598,9599],{"class":120,"line":2625},[118,9600,2533],{"class":128},[118,9602,9603],{"class":120,"line":7953},[118,9604,2191],{"class":128},[118,9606,9607],{"class":120,"line":7977},[118,9608,1569],{"class":128},[118,9610,9611],{"class":120,"line":7982},[118,9612,9613],{"class":187},"\u002F\u002F打印所有信息的函数\n",[118,9615,9616,9618,9621,9623,9625,9627,9629,9632,9634,9636],{"class":120,"line":7988},[118,9617,5369],{"class":124},[118,9619,9620],{"class":1967}," printInfo",[118,9622,129],{"class":128},[118,9624,7764],{"class":124},[118,9626,9404],{"class":1967},[118,9628,9407],{"class":5221},[118,9630,9631],{"class":128},"[], ",[118,9633,132],{"class":124},[118,9635,7336],{"class":5221},[118,9637,135],{"class":128},[118,9639,9640],{"class":120,"line":8015},[118,9641,1550],{"class":128},[118,9643,9644,9646,9648,9650,9652,9654,9656,9658,9660,9662,9664],{"class":120,"line":8020},[118,9645,3205],{"class":124},[118,9647,1662],{"class":128},[118,9649,132],{"class":124},[118,9651,9443],{"class":128},[118,9653,174],{"class":124},[118,9655,4097],{"class":177},[118,9657,9450],{"class":128},[118,9659,1038],{"class":124},[118,9661,9455],{"class":128},[118,9663,2296],{"class":124},[118,9665,135],{"class":128},[118,9667,9668],{"class":120,"line":8026},[118,9669,2034],{"class":128},[118,9671,9672,9675,9677,9680,9682,9685,9687],{"class":120,"line":8038},[118,9673,9674],{"class":128},"        cout ",[118,9676,1172],{"class":124},[118,9678,9679],{"class":233}," \"Teacher: \"",[118,9681,1448],{"class":124},[118,9683,9684],{"class":128}," tArray[i].tName ",[118,9686,1172],{"class":124},[118,9688,8845],{"class":128},[118,9690,9691,9693,9695,9697,9699,9701,9703,9705,9707,9709,9711,9713],{"class":120,"line":8050},[118,9692,3407],{"class":124},[118,9694,1662],{"class":128},[118,9696,132],{"class":124},[118,9698,9505],{"class":128},[118,9700,174],{"class":124},[118,9702,4097],{"class":177},[118,9704,9512],{"class":128},[118,9706,1038],{"class":124},[118,9708,2152],{"class":177},[118,9710,9519],{"class":128},[118,9712,2296],{"class":124},[118,9714,135],{"class":128},[118,9716,9717],{"class":120,"line":8062},[118,9718,2514],{"class":128},[118,9720,9722,9725,9727,9730,9732,9735,9737,9740,9742],{"class":120,"line":9721},47,[118,9723,9724],{"class":128},"            cout ",[118,9726,1172],{"class":124},[118,9728,9729],{"class":233}," \"",[118,9731,1234],{"class":177},[118,9733,9734],{"class":233},"Student: \"",[118,9736,1448],{"class":124},[118,9738,9739],{"class":128}," tArray[i].sArray[j].sName",[118,9741,1172],{"class":124},[118,9743,1195],{"class":128},[118,9745,9747,9749,9751,9753,9755,9758,9760,9763,9765],{"class":120,"line":9746},48,[118,9748,9724],{"class":128},[118,9750,1172],{"class":124},[118,9752,9729],{"class":233},[118,9754,1234],{"class":177},[118,9756,9757],{"class":233},"Age: \"",[118,9759,1448],{"class":124},[118,9761,9762],{"class":128}," tArray[i].sArray[j].age ",[118,9764,1172],{"class":124},[118,9766,8845],{"class":128},[118,9768,9770,9772,9774,9776,9778,9781,9783,9786,9788],{"class":120,"line":9769},49,[118,9771,9724],{"class":128},[118,9773,1172],{"class":124},[118,9775,9729],{"class":233},[118,9777,1234],{"class":177},[118,9779,9780],{"class":233},"Score: \"",[118,9782,1448],{"class":124},[118,9784,9785],{"class":128}," tArray[i].sArray[j].score ",[118,9787,1172],{"class":124},[118,9789,9790],{"class":128}," endl;   \n",[118,9792,9794],{"class":120,"line":9793},50,[118,9795,2533],{"class":128},[118,9797,9799],{"class":120,"line":9798},51,[118,9800,2191],{"class":128},[118,9802,9804],{"class":120,"line":9803},52,[118,9805,1569],{"class":128},[118,9807,9809,9811,9813],{"class":120,"line":9808},53,[118,9810,132],{"class":124},[118,9812,1977],{"class":1967},[118,9814,1980],{"class":128},[118,9816,9818],{"class":120,"line":9817},54,[118,9819,1550],{"class":128},[118,9821,9823],{"class":120,"line":9822},55,[118,9824,9825],{"class":187},"    \u002F\u002F随机数种子\n",[118,9827,9829,9831,9833,9835,9837,9839,9841,9843,9845],{"class":120,"line":9828},56,[118,9830,2377],{"class":1967},[118,9832,2380],{"class":128},[118,9834,2383],{"class":124},[118,9836,2386],{"class":124},[118,9838,557],{"class":128},[118,9840,2391],{"class":1967},[118,9842,129],{"class":128},[118,9844,2396],{"class":177},[118,9846,2399],{"class":128},[118,9848,9850],{"class":120,"line":9849},57,[118,9851,9852],{"class":187},"    \u002F\u002F1.创建3名老师的数组\n",[118,9854,9856,9858,9860,9863,9865],{"class":120,"line":9855},58,[118,9857,7900],{"class":124},[118,9859,9404],{"class":1967},[118,9861,9862],{"class":128}," tArray[",[118,9864,200],{"class":177},[118,9866,4694],{"class":128},[118,9868,9870],{"class":120,"line":9869},59,[118,9871,9872],{"class":187},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[118,9874,9876,9878,9881,9883,9886,9889,9891,9893,9896,9898],{"class":120,"line":9875},60,[118,9877,1989],{"class":124},[118,9879,9880],{"class":128}," len ",[118,9882,174],{"class":124},[118,9884,9885],{"class":124}," sizeof",[118,9887,9888],{"class":128},"(tArray) ",[118,9890,712],{"class":124},[118,9892,9885],{"class":124},[118,9894,9895],{"class":128},"(tArray[",[118,9897,320],{"class":177},[118,9899,3860],{"class":128},[118,9901,9903,9906],{"class":120,"line":9902},61,[118,9904,9905],{"class":1967},"    allocateSpace",[118,9907,9908],{"class":128},"(tArray, len);\n",[118,9910,9912],{"class":120,"line":9911},62,[118,9913,9914],{"class":187},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[118,9916,9918,9921],{"class":120,"line":9917},63,[118,9919,9920],{"class":1967},"    printInfo",[118,9922,9908],{"class":128},[118,9924,9926],{"class":120,"line":9925},64,[118,9927,2404],{"emptyLinePlaceholder":45},[118,9929,9931],{"class":120,"line":9930},65,[118,9932,1569],{"class":128},[72,9934,9935],{"start":40},[75,9936,9937,9940],{},[278,9938,9939],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[15,9942,9943],{},"五名英雄信息如下：",[109,9945,9949],{"className":9946,"code":9947,"language":9948,"meta":39,"style":39},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[115,9950,9951,9969,9986,10003,10020],{"__ignoreMap":39},[118,9952,9953,9955,9958,9960,9962,9964,9967],{"class":120,"line":121},[118,9954,4921],{"class":128},[118,9956,9957],{"class":233},"\"刘备\"",[118,9959,506],{"class":128},[118,9961,903],{"class":177},[118,9963,506],{"class":128},[118,9965,9966],{"class":233},"\"男\"",[118,9968,4934],{"class":128},[118,9970,9971,9973,9976,9978,9980,9982,9984],{"class":120,"line":40},[118,9972,4921],{"class":128},[118,9974,9975],{"class":233},"\"关羽\"",[118,9977,506],{"class":128},[118,9979,878],{"class":177},[118,9981,506],{"class":128},[118,9983,9966],{"class":233},[118,9985,4934],{"class":128},[118,9987,9988,9990,9993,9995,9997,9999,10001],{"class":120,"line":1183},[118,9989,4921],{"class":128},[118,9991,9992],{"class":233},"\"张飞\"",[118,9994,506],{"class":128},[118,9996,828],{"class":177},[118,9998,506],{"class":128},[118,10000,9966],{"class":233},[118,10002,4934],{"class":128},[118,10004,10005,10007,10010,10012,10014,10016,10018],{"class":120,"line":1198},[118,10006,4921],{"class":128},[118,10008,10009],{"class":233},"\"赵云\"",[118,10011,506],{"class":128},[118,10013,853],{"class":177},[118,10015,506],{"class":128},[118,10017,9966],{"class":233},[118,10019,4934],{"class":128},[118,10021,10022,10024,10027,10029,10031,10033,10036],{"class":120,"line":1204},[118,10023,4921],{"class":128},[118,10025,10026],{"class":233},"\"貂蝉\"",[118,10028,506],{"class":128},[118,10030,803],{"class":177},[118,10032,506],{"class":128},[118,10034,10035],{"class":233},"\"女\"",[118,10037,4934],{"class":128},[15,10039,10040],{},"代码：",[109,10042,10044],{"className":111,"code":10043,"language":113,"meta":39,"style":39},"#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",[115,10045,10046,10052,10062,10068,10075,10079,10083,10089,10094,10098,10103,10126,10130,10155,10159,10192,10197,10226,10231,10246,10272,10292,10297,10302,10306,10310,10315,10337,10341,10365,10369,10431,10435,10439,10447,10451,10456,10467,10471,10487,10503,10519,10535,10551,10555,10575,10597,10602,10615,10622,10627,10633,10638,10651,10657],{"__ignoreMap":39},[118,10047,10048,10050],{"class":120,"line":121},[118,10049,1953],{"class":124},[118,10051,1956],{"class":233},[118,10053,10054,10056,10058,10060],{"class":120,"line":40},[118,10055,1961],{"class":124},[118,10057,1964],{"class":124},[118,10059,1968],{"class":1967},[118,10061,1294],{"class":128},[118,10063,10064,10066],{"class":120,"line":1183},[118,10065,1953],{"class":124},[118,10067,7754],{"class":233},[118,10069,10070,10072],{"class":120,"line":1198},[118,10071,7764],{"class":124},[118,10073,10074],{"class":1967}," Sanguo\n",[118,10076,10077],{"class":120,"line":1204},[118,10078,1550],{"class":128},[118,10080,10081],{"class":120,"line":1218},[118,10082,7790],{"class":128},[118,10084,10085,10087],{"class":120,"line":1224},[118,10086,1989],{"class":124},[118,10088,7802],{"class":128},[118,10090,10091],{"class":120,"line":1315},[118,10092,10093],{"class":128},"    string gender;\n",[118,10095,10096],{"class":120,"line":1321},[118,10097,3999],{"class":128},[118,10099,10100],{"class":120,"line":1333},[118,10101,10102],{"class":187},"\u002F\u002F定义排序函数\n",[118,10104,10105,10107,10109,10111,10114,10116,10118,10120,10122,10124],{"class":120,"line":1616},[118,10106,5369],{"class":124},[118,10108,7321],{"class":1967},[118,10110,129],{"class":128},[118,10112,10113],{"class":1967},"Sanguo",[118,10115,6523],{"class":124},[118,10117,823],{"class":5221},[118,10119,506],{"class":128},[118,10121,132],{"class":124},[118,10123,7336],{"class":5221},[118,10125,135],{"class":128},[118,10127,10128],{"class":120,"line":1621},[118,10129,1550],{"class":128},[118,10131,10132,10134,10136,10138,10140,10142,10144,10146,10148,10151,10153],{"class":120,"line":1627},[118,10133,3205],{"class":124},[118,10135,129],{"class":128},[118,10137,132],{"class":124},[118,10139,3036],{"class":128},[118,10141,174],{"class":124},[118,10143,320],{"class":177},[118,10145,3043],{"class":128},[118,10147,1038],{"class":124},[118,10149,10150],{"class":128},"len;i",[118,10152,2296],{"class":124},[118,10154,135],{"class":128},[118,10156,10157],{"class":120,"line":1632},[118,10158,2034],{"class":128},[118,10160,10161,10164,10166,10168,10170,10172,10174,10176,10178,10180,10182,10184,10186,10188,10190],{"class":120,"line":1646},[118,10162,10163],{"class":124},"     for",[118,10165,1662],{"class":128},[118,10167,132],{"class":124},[118,10169,3414],{"class":128},[118,10171,174],{"class":124},[118,10173,320],{"class":177},[118,10175,3421],{"class":128},[118,10177,1038],{"class":124},[118,10179,7363],{"class":128},[118,10181,660],{"class":124},[118,10183,346],{"class":177},[118,10185,660],{"class":124},[118,10187,3554],{"class":128},[118,10189,2296],{"class":124},[118,10191,135],{"class":128},[118,10193,10194],{"class":120,"line":1651},[118,10195,10196],{"class":128},"     {\n",[118,10198,10199,10202,10205,10207,10210,10212,10215,10217,10219,10221,10223],{"class":120,"line":1657},[118,10200,10201],{"class":124},"         if",[118,10203,10204],{"class":128}," ((s",[118,10206,609],{"class":124},[118,10208,10209],{"class":128},"j)->age ",[118,10211,1088],{"class":124},[118,10213,10214],{"class":128}," (s",[118,10216,609],{"class":124},[118,10218,595],{"class":128},[118,10220,609],{"class":124},[118,10222,346],{"class":177},[118,10224,10225],{"class":128},")->age)\n",[118,10227,10228],{"class":120,"line":1678},[118,10229,10230],{"class":128},"         {\n",[118,10232,10233,10236,10238,10241,10243],{"class":120,"line":1683},[118,10234,10235],{"class":128},"             Sanguo temp",[118,10237,7158],{"class":124},[118,10239,10240],{"class":128},"(s",[118,10242,609],{"class":124},[118,10244,10245],{"class":128},"j);\n",[118,10247,10248,10251,10253,10255,10258,10260,10262,10264,10266,10268,10270],{"class":120,"line":1697},[118,10249,10250],{"class":124},"             *",[118,10252,10240],{"class":128},[118,10254,609],{"class":124},[118,10256,10257],{"class":128},"j)",[118,10259,7158],{"class":124},[118,10261,10240],{"class":128},[118,10263,609],{"class":124},[118,10265,595],{"class":128},[118,10267,609],{"class":124},[118,10269,346],{"class":177},[118,10271,2723],{"class":128},[118,10273,10274,10276,10278,10280,10282,10284,10286,10288,10290],{"class":120,"line":1702},[118,10275,10250],{"class":124},[118,10277,10240],{"class":128},[118,10279,609],{"class":124},[118,10281,595],{"class":128},[118,10283,609],{"class":124},[118,10285,346],{"class":177},[118,10287,557],{"class":128},[118,10289,174],{"class":124},[118,10291,4284],{"class":128},[118,10293,10294],{"class":120,"line":1731},[118,10295,10296],{"class":128},"         }\n",[118,10298,10299],{"class":120,"line":1736},[118,10300,10301],{"class":128},"     }\n",[118,10303,10304],{"class":120,"line":1753},[118,10305,2191],{"class":128},[118,10307,10308],{"class":120,"line":1758},[118,10309,1569],{"class":128},[118,10311,10312],{"class":120,"line":1763},[118,10313,10314],{"class":187},"\u002F\u002F定义打印函数\n",[118,10316,10317,10319,10321,10323,10325,10327,10329,10331,10333,10335],{"class":120,"line":1768},[118,10318,5369],{"class":124},[118,10320,9620],{"class":1967},[118,10322,129],{"class":128},[118,10324,10113],{"class":1967},[118,10326,6523],{"class":124},[118,10328,823],{"class":5221},[118,10330,506],{"class":128},[118,10332,132],{"class":124},[118,10334,7336],{"class":5221},[118,10336,135],{"class":128},[118,10338,10339],{"class":120,"line":1782},[118,10340,1550],{"class":128},[118,10342,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361,10363],{"class":120,"line":1787},[118,10344,3205],{"class":124},[118,10346,1662],{"class":128},[118,10348,132],{"class":124},[118,10350,3036],{"class":128},[118,10352,174],{"class":124},[118,10354,320],{"class":177},[118,10356,3043],{"class":128},[118,10358,1038],{"class":124},[118,10360,10150],{"class":128},[118,10362,2296],{"class":124},[118,10364,135],{"class":128},[118,10366,10367],{"class":120,"line":2581},[118,10368,2034],{"class":128},[118,10370,10371,10373,10375,10377,10379,10382,10384,10386,10388,10391,10393,10395,10397,10400,10402,10404,10406,10409,10411,10413,10415,10418,10420,10422,10424,10427,10429],{"class":120,"line":2595},[118,10372,3455],{"class":128},[118,10374,1172],{"class":124},[118,10376,379],{"class":233},[118,10378,1234],{"class":177},[118,10380,10381],{"class":233},"姓名：\"",[118,10383,1172],{"class":124},[118,10385,10240],{"class":128},[118,10387,609],{"class":124},[118,10389,10390],{"class":128},"i)->name",[118,10392,1172],{"class":124},[118,10394,379],{"class":233},[118,10396,1234],{"class":177},[118,10398,10399],{"class":233},"年龄：\"",[118,10401,1172],{"class":124},[118,10403,10240],{"class":128},[118,10405,609],{"class":124},[118,10407,10408],{"class":128},"i)->age",[118,10410,1172],{"class":124},[118,10412,379],{"class":233},[118,10414,1234],{"class":177},[118,10416,10417],{"class":233},"性别：\"",[118,10419,1172],{"class":124},[118,10421,10240],{"class":128},[118,10423,609],{"class":124},[118,10425,10426],{"class":128},"i)->gender",[118,10428,1172],{"class":124},[118,10430,1195],{"class":128},[118,10432,10433],{"class":120,"line":2603},[118,10434,2191],{"class":128},[118,10436,10437],{"class":120,"line":2608},[118,10438,1569],{"class":128},[118,10440,10441,10443,10445],{"class":120,"line":2614},[118,10442,132],{"class":124},[118,10444,1977],{"class":1967},[118,10446,1980],{"class":128},[118,10448,10449],{"class":120,"line":2620},[118,10450,1550],{"class":128},[118,10452,10453],{"class":120,"line":2625},[118,10454,10455],{"class":187},"    \u002F\u002F定义结构体变量\n",[118,10457,10458,10461,10463,10465],{"class":120,"line":7953},[118,10459,10460],{"class":128},"    Sanguo s1[",[118,10462,447],{"class":177},[118,10464,1068],{"class":128},[118,10466,4912],{"class":124},[118,10468,10469],{"class":120,"line":7977},[118,10470,2034],{"class":128},[118,10472,10473,10475,10477,10479,10481,10483,10485],{"class":120,"line":7982},[118,10474,4921],{"class":128},[118,10476,9957],{"class":233},[118,10478,506],{"class":128},[118,10480,903],{"class":177},[118,10482,506],{"class":128},[118,10484,9966],{"class":233},[118,10486,4934],{"class":128},[118,10488,10489,10491,10493,10495,10497,10499,10501],{"class":120,"line":7988},[118,10490,4921],{"class":128},[118,10492,9975],{"class":233},[118,10494,506],{"class":128},[118,10496,878],{"class":177},[118,10498,506],{"class":128},[118,10500,9966],{"class":233},[118,10502,4934],{"class":128},[118,10504,10505,10507,10509,10511,10513,10515,10517],{"class":120,"line":8015},[118,10506,4921],{"class":128},[118,10508,9992],{"class":233},[118,10510,506],{"class":128},[118,10512,828],{"class":177},[118,10514,506],{"class":128},[118,10516,9966],{"class":233},[118,10518,4934],{"class":128},[118,10520,10521,10523,10525,10527,10529,10531,10533],{"class":120,"line":8020},[118,10522,4921],{"class":128},[118,10524,10009],{"class":233},[118,10526,506],{"class":128},[118,10528,853],{"class":177},[118,10530,506],{"class":128},[118,10532,9966],{"class":233},[118,10534,4934],{"class":128},[118,10536,10537,10539,10541,10543,10545,10547,10549],{"class":120,"line":8026},[118,10538,4921],{"class":128},[118,10540,10026],{"class":233},[118,10542,506],{"class":128},[118,10544,803],{"class":177},[118,10546,506],{"class":128},[118,10548,10035],{"class":233},[118,10550,4934],{"class":128},[118,10552,10553],{"class":120,"line":8038},[118,10554,4955],{"class":128},[118,10556,10557,10559,10561,10563,10566,10568,10571,10573],{"class":120,"line":8050},[118,10558,1989],{"class":124},[118,10560,7336],{"class":128},[118,10562,4207],{"class":124},[118,10564,10565],{"class":128},"(s1)",[118,10567,4213],{"class":124},[118,10569,10570],{"class":128},"(s1[",[118,10572,320],{"class":177},[118,10574,3860],{"class":128},[118,10576,10577,10580,10582,10585,10587,10590,10593,10595],{"class":120,"line":8062},[118,10578,10579],{"class":128},"    Sanguo ",[118,10581,583],{"class":124},[118,10583,10584],{"class":128},"s ",[118,10586,174],{"class":124},[118,10588,10589],{"class":124}," &",[118,10591,10592],{"class":128},"s1[",[118,10594,320],{"class":177},[118,10596,4694],{"class":128},[118,10598,10599],{"class":120,"line":9721},[118,10600,10601],{"class":187},"    \u002F\u002F排序前：\n",[118,10603,10604,10606,10608,10611,10613],{"class":120,"line":9746},[118,10605,6534],{"class":128},[118,10607,1172],{"class":124},[118,10609,10610],{"class":233}," \"排序前：\"",[118,10612,1448],{"class":124},[118,10614,8845],{"class":128},[118,10616,10617,10619],{"class":120,"line":9769},[118,10618,9920],{"class":1967},[118,10620,10621],{"class":128},"(s,len);\n",[118,10623,10624],{"class":120,"line":9793},[118,10625,10626],{"class":187},"    \u002F\u002F调用排序函数\n",[118,10628,10629,10631],{"class":120,"line":9798},[118,10630,7603],{"class":1967},[118,10632,10621],{"class":128},[118,10634,10635],{"class":120,"line":9803},[118,10636,10637],{"class":187},"    \u002F\u002F排序后\n",[118,10639,10640,10642,10644,10647,10649],{"class":120,"line":9808},[118,10641,6534],{"class":128},[118,10643,1172],{"class":124},[118,10645,10646],{"class":233}," \"排序后：\"",[118,10648,1448],{"class":124},[118,10650,8845],{"class":128},[118,10652,10653,10655],{"class":120,"line":9817},[118,10654,9920],{"class":1967},[118,10656,10621],{"class":128},[118,10658,10659],{"class":120,"line":9822},[118,10660,1569],{"class":128},[15,10662,10663,10664,10666],{},"注意：使用指针时直接用传首地址**&s",[118,10665,320],{},"**",[5131,10668,10669],{},"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":39,"searchDepth":40,"depth":40,"links":10671},[10672,10673,10674,10675,10676,10677,10678],{"id":7708,"depth":40,"text":7709},{"id":8070,"depth":40,"text":8071},{"id":8339,"depth":40,"text":8340},{"id":8504,"depth":40,"text":8505},{"id":8720,"depth":40,"text":8721},{"id":9041,"depth":40,"text":9042},{"id":9269,"depth":40,"text":9270},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7697,"description":7705},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10685,"title":10686,"body":10687,"description":39,"extension":43,"meta":12030,"navigation":45,"path":12031,"seo":12032,"stem":12033,"__hash__":12034},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10688,"toc":12024},[10689,10692,10696,10702,10716,10721,10724,10728,10735,10741,10744,10751,10757,10762,10765,10768,10771,11335,11338,11352,11356,11361,11377,11517,11520,11526,11529,11534,11542,11650,11653,11658,11661,11666,11669,11675,11678,12021],[10,10690,10686],{"id":10691},"_5程序内存模型",[60,10693,10695],{"id":10694},"_51内存分区模型","5.1内存分区模型",[15,10697,10698,10699],{},"C++程序在执行时，将内存大方向划分为",[278,10700,10701],{},"4个区域",[1135,10703,10704,10707,10710,10713],{},[75,10705,10706],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[75,10708,10709],{},"全局区：存放全局变量和静态变量以及常量",[75,10711,10712],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[75,10714,10715],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[15,10717,10718],{},[278,10719,10720],{},"内存四区意义：",[15,10722,10723],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[89,10725,10727],{"id":10726},"_511程序运行前","5.1.1程序运行前",[15,10729,10730,10731,10734],{},"​\t在程序编译后，生成了exe可执行程序，",[278,10732,10733],{},"未执行该程序前","分为两个区域",[15,10736,10737,10738],{},"​\t",[278,10739,10740],{},"代码区：",[15,10742,10743],{},"​\t\t存放 CPU 执行的机器指令",[15,10745,10746,10747,10750],{},"​\t\t代码区是",[278,10748,10749],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[15,10752,10746,10753,10756],{},[278,10754,10755],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[15,10758,10737,10759],{},[278,10760,10761],{},"全局区：",[15,10763,10764],{},"​\t\t全局变量和静态变量存放在此.",[15,10766,10767],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[15,10769,10770],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[109,10772,10774],{"className":111,"code":10773,"language":113,"meta":39,"style":39},"\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",[115,10775,10776,10781,10794,10807,10811,10816,10831,10846,10850,10859,10863,10868,10881,10894,10898,10903,10929,10955,10959,10986,11012,11016,11021,11037,11052,11056,11082,11108,11112,11137,11162,11166,11192,11218,11222,11238,11253,11279,11305,11309,11319,11323,11331],{"__ignoreMap":39},[118,10777,10778],{"class":120,"line":121},[118,10779,10780],{"class":187},"\u002F\u002F全局变量\n",[118,10782,10783,10785,10788,10790,10792],{"class":120,"line":40},[118,10784,132],{"class":124},[118,10786,10787],{"class":128}," g_a ",[118,10789,174],{"class":124},[118,10791,2042],{"class":177},[118,10793,1294],{"class":128},[118,10795,10796,10798,10801,10803,10805],{"class":120,"line":1183},[118,10797,132],{"class":124},[118,10799,10800],{"class":128}," g_b ",[118,10802,174],{"class":124},[118,10804,2042],{"class":177},[118,10806,1294],{"class":128},[118,10808,10809],{"class":120,"line":1198},[118,10810,2404],{"emptyLinePlaceholder":45},[118,10812,10813],{"class":120,"line":1204},[118,10814,10815],{"class":187},"\u002F\u002F全局常量\n",[118,10817,10818,10820,10822,10825,10827,10829],{"class":120,"line":1218},[118,10819,6797],{"class":124},[118,10821,2386],{"class":124},[118,10823,10824],{"class":128}," c_g_a ",[118,10826,174],{"class":124},[118,10828,2042],{"class":177},[118,10830,1294],{"class":128},[118,10832,10833,10835,10837,10840,10842,10844],{"class":120,"line":1224},[118,10834,6797],{"class":124},[118,10836,2386],{"class":124},[118,10838,10839],{"class":128}," c_g_b ",[118,10841,174],{"class":124},[118,10843,2042],{"class":177},[118,10845,1294],{"class":128},[118,10847,10848],{"class":120,"line":1315},[118,10849,2404],{"emptyLinePlaceholder":45},[118,10851,10852,10854,10856],{"class":120,"line":1321},[118,10853,132],{"class":124},[118,10855,1977],{"class":1967},[118,10857,10858],{"class":128},"() {\n",[118,10860,10861],{"class":120,"line":1333},[118,10862,2404],{"emptyLinePlaceholder":45},[118,10864,10865],{"class":120,"line":1616},[118,10866,10867],{"class":187},"    \u002F\u002F局部变量\n",[118,10869,10870,10872,10875,10877,10879],{"class":120,"line":1621},[118,10871,1989],{"class":124},[118,10873,10874],{"class":128}," a ",[118,10876,174],{"class":124},[118,10878,2042],{"class":177},[118,10880,1294],{"class":128},[118,10882,10883,10885,10888,10890,10892],{"class":120,"line":1627},[118,10884,1989],{"class":124},[118,10886,10887],{"class":128}," b ",[118,10889,174],{"class":124},[118,10891,2042],{"class":177},[118,10893,1294],{"class":128},[118,10895,10896],{"class":120,"line":1632},[118,10897,2404],{"emptyLinePlaceholder":45},[118,10899,10900],{"class":120,"line":1646},[118,10901,10902],{"class":187},"    \u002F\u002F打印地址\n",[118,10904,10905,10907,10909,10912,10914,10916,10918,10920,10922,10925,10927],{"class":120,"line":1651},[118,10906,6534],{"class":128},[118,10908,1172],{"class":124},[118,10910,10911],{"class":233}," \"局部变量a地址为： \"",[118,10913,1448],{"class":124},[118,10915,1662],{"class":128},[118,10917,132],{"class":124},[118,10919,557],{"class":128},[118,10921,481],{"class":124},[118,10923,10924],{"class":128},"a ",[118,10926,1172],{"class":124},[118,10928,8845],{"class":128},[118,10930,10931,10933,10935,10938,10940,10942,10944,10946,10948,10951,10953],{"class":120,"line":1657},[118,10932,6534],{"class":128},[118,10934,1172],{"class":124},[118,10936,10937],{"class":233}," \"局部变量b地址为： \"",[118,10939,1448],{"class":124},[118,10941,1662],{"class":128},[118,10943,132],{"class":124},[118,10945,557],{"class":128},[118,10947,481],{"class":124},[118,10949,10950],{"class":128},"b ",[118,10952,1172],{"class":124},[118,10954,8845],{"class":128},[118,10956,10957],{"class":120,"line":1678},[118,10958,2404],{"emptyLinePlaceholder":45},[118,10960,10961,10963,10965,10968,10970,10973,10975,10977,10979,10982,10984],{"class":120,"line":1683},[118,10962,6534],{"class":128},[118,10964,1172],{"class":124},[118,10966,10967],{"class":233}," \"全局变量g_a地址为： \"",[118,10969,1448],{"class":124},[118,10971,10972],{"class":128},"  (",[118,10974,132],{"class":124},[118,10976,557],{"class":128},[118,10978,481],{"class":124},[118,10980,10981],{"class":128},"g_a ",[118,10983,1172],{"class":124},[118,10985,8845],{"class":128},[118,10987,10988,10990,10992,10995,10997,10999,11001,11003,11005,11008,11010],{"class":120,"line":1697},[118,10989,6534],{"class":128},[118,10991,1172],{"class":124},[118,10993,10994],{"class":233}," \"全局变量g_b地址为： \"",[118,10996,1448],{"class":124},[118,10998,10972],{"class":128},[118,11000,132],{"class":124},[118,11002,557],{"class":128},[118,11004,481],{"class":124},[118,11006,11007],{"class":128},"g_b ",[118,11009,1172],{"class":124},[118,11011,8845],{"class":128},[118,11013,11014],{"class":120,"line":1702},[118,11015,2404],{"emptyLinePlaceholder":45},[118,11017,11018],{"class":120,"line":1731},[118,11019,11020],{"class":187},"    \u002F\u002F静态变量\n",[118,11022,11023,11026,11028,11031,11033,11035],{"class":120,"line":1736},[118,11024,11025],{"class":124},"    static",[118,11027,2386],{"class":124},[118,11029,11030],{"class":128}," s_a ",[118,11032,174],{"class":124},[118,11034,2042],{"class":177},[118,11036,1294],{"class":128},[118,11038,11039,11041,11043,11046,11048,11050],{"class":120,"line":1753},[118,11040,11025],{"class":124},[118,11042,2386],{"class":124},[118,11044,11045],{"class":128}," s_b ",[118,11047,174],{"class":124},[118,11049,2042],{"class":177},[118,11051,1294],{"class":128},[118,11053,11054],{"class":120,"line":1758},[118,11055,2404],{"emptyLinePlaceholder":45},[118,11057,11058,11060,11062,11065,11067,11069,11071,11073,11075,11078,11080],{"class":120,"line":1763},[118,11059,6534],{"class":128},[118,11061,1172],{"class":124},[118,11063,11064],{"class":233}," \"静态变量s_a地址为： \"",[118,11066,1448],{"class":124},[118,11068,1662],{"class":128},[118,11070,132],{"class":124},[118,11072,557],{"class":128},[118,11074,481],{"class":124},[118,11076,11077],{"class":128},"s_a ",[118,11079,1172],{"class":124},[118,11081,8845],{"class":128},[118,11083,11084,11086,11088,11091,11093,11095,11097,11099,11101,11104,11106],{"class":120,"line":1768},[118,11085,6534],{"class":128},[118,11087,1172],{"class":124},[118,11089,11090],{"class":233}," \"静态变量s_b地址为： \"",[118,11092,1448],{"class":124},[118,11094,1662],{"class":128},[118,11096,132],{"class":124},[118,11098,557],{"class":128},[118,11100,481],{"class":124},[118,11102,11103],{"class":128},"s_b ",[118,11105,1172],{"class":124},[118,11107,8845],{"class":128},[118,11109,11110],{"class":120,"line":1782},[118,11111,2404],{"emptyLinePlaceholder":45},[118,11113,11114,11116,11118,11121,11123,11125,11127,11129,11131,11133,11135],{"class":120,"line":1787},[118,11115,6534],{"class":128},[118,11117,1172],{"class":124},[118,11119,11120],{"class":233}," \"字符串常量地址为： \"",[118,11122,1448],{"class":124},[118,11124,1662],{"class":128},[118,11126,132],{"class":124},[118,11128,557],{"class":128},[118,11130,481],{"class":124},[118,11132,1190],{"class":233},[118,11134,1448],{"class":124},[118,11136,8845],{"class":128},[118,11138,11139,11141,11143,11145,11147,11149,11151,11153,11155,11158,11160],{"class":120,"line":2581},[118,11140,6534],{"class":128},[118,11142,1172],{"class":124},[118,11144,11120],{"class":233},[118,11146,1448],{"class":124},[118,11148,1662],{"class":128},[118,11150,132],{"class":124},[118,11152,557],{"class":128},[118,11154,481],{"class":124},[118,11156,11157],{"class":233},"\"hello world1\"",[118,11159,1448],{"class":124},[118,11161,8845],{"class":128},[118,11163,11164],{"class":120,"line":2595},[118,11165,2404],{"emptyLinePlaceholder":45},[118,11167,11168,11170,11172,11175,11177,11179,11181,11183,11185,11188,11190],{"class":120,"line":2603},[118,11169,6534],{"class":128},[118,11171,1172],{"class":124},[118,11173,11174],{"class":233}," \"全局常量c_g_a地址为： \"",[118,11176,1448],{"class":124},[118,11178,1662],{"class":128},[118,11180,132],{"class":124},[118,11182,557],{"class":128},[118,11184,481],{"class":124},[118,11186,11187],{"class":128},"c_g_a ",[118,11189,1172],{"class":124},[118,11191,8845],{"class":128},[118,11193,11194,11196,11198,11201,11203,11205,11207,11209,11211,11214,11216],{"class":120,"line":2608},[118,11195,6534],{"class":128},[118,11197,1172],{"class":124},[118,11199,11200],{"class":233}," \"全局常量c_g_b地址为： \"",[118,11202,1448],{"class":124},[118,11204,1662],{"class":128},[118,11206,132],{"class":124},[118,11208,557],{"class":128},[118,11210,481],{"class":124},[118,11212,11213],{"class":128},"c_g_b ",[118,11215,1172],{"class":124},[118,11217,8845],{"class":128},[118,11219,11220],{"class":120,"line":2614},[118,11221,2404],{"emptyLinePlaceholder":45},[118,11223,11224,11227,11229,11232,11234,11236],{"class":120,"line":2620},[118,11225,11226],{"class":124},"    const",[118,11228,2386],{"class":124},[118,11230,11231],{"class":128}," c_l_a ",[118,11233,174],{"class":124},[118,11235,2042],{"class":177},[118,11237,1294],{"class":128},[118,11239,11240,11242,11244,11247,11249,11251],{"class":120,"line":2625},[118,11241,11226],{"class":124},[118,11243,2386],{"class":124},[118,11245,11246],{"class":128}," c_l_b ",[118,11248,174],{"class":124},[118,11250,2042],{"class":177},[118,11252,1294],{"class":128},[118,11254,11255,11257,11259,11262,11264,11266,11268,11270,11272,11275,11277],{"class":120,"line":7953},[118,11256,6534],{"class":128},[118,11258,1172],{"class":124},[118,11260,11261],{"class":233}," \"局部常量c_l_a地址为： \"",[118,11263,1448],{"class":124},[118,11265,1662],{"class":128},[118,11267,132],{"class":124},[118,11269,557],{"class":128},[118,11271,481],{"class":124},[118,11273,11274],{"class":128},"c_l_a ",[118,11276,1172],{"class":124},[118,11278,8845],{"class":128},[118,11280,11281,11283,11285,11288,11290,11292,11294,11296,11298,11301,11303],{"class":120,"line":7977},[118,11282,6534],{"class":128},[118,11284,1172],{"class":124},[118,11286,11287],{"class":233}," \"局部常量c_l_b地址为： \"",[118,11289,1448],{"class":124},[118,11291,1662],{"class":128},[118,11293,132],{"class":124},[118,11295,557],{"class":128},[118,11297,481],{"class":124},[118,11299,11300],{"class":128},"c_l_b ",[118,11302,1172],{"class":124},[118,11304,8845],{"class":128},[118,11306,11307],{"class":120,"line":7982},[118,11308,2404],{"emptyLinePlaceholder":45},[118,11310,11311,11313,11315,11317],{"class":120,"line":7988},[118,11312,2307],{"class":1967},[118,11314,129],{"class":128},[118,11316,2312],{"class":233},[118,11318,2723],{"class":128},[118,11320,11321],{"class":120,"line":8015},[118,11322,2404],{"emptyLinePlaceholder":45},[118,11324,11325,11327,11329],{"class":120,"line":8020},[118,11326,4094],{"class":124},[118,11328,4097],{"class":177},[118,11330,1294],{"class":128},[118,11332,11333],{"class":120,"line":8026},[118,11334,1569],{"class":128},[15,11336,11337],{},"总结：",[1135,11339,11340,11343,11346,11349],{},[75,11341,11342],{},"c++中程序运行前分为全局区和代码区",[75,11344,11345],{},"代码区特点是共享和只读",[75,11347,11348],{},"全局区中存放全局变量、静态变量、常量",[75,11350,11351],{},"常量区中存放const修饰的全局常量和字符串常量",[89,11353,11355],{"id":11354},"_512程序运行后","5.1.2程序运行后",[72,11357,11358],{},[75,11359,11360],{},"栈区：",[1135,11362,11363,11370],{},[75,11364,11365,11366,11369],{},"由编译器自动分配释放, 存放",[278,11367,11368],{},"函数的参数值,局部变量","等",[75,11371,11372,11373,11376],{},"注意事项：",[278,11374,11375],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[109,11378,11380],{"className":111,"code":11379,"language":113,"meta":39,"style":39},"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",[115,11381,11382,11393,11397,11412,11424,11428,11432,11440,11445,11460,11478,11495,11505,11513],{"__ignoreMap":39},[118,11383,11384,11386,11388,11391],{"class":120,"line":121},[118,11385,132],{"class":124},[118,11387,6523],{"class":124},[118,11389,11390],{"class":1967}," func",[118,11392,1980],{"class":128},[118,11394,11395],{"class":120,"line":40},[118,11396,1550],{"class":128},[118,11398,11399,11401,11403,11405,11407,11409],{"class":120,"line":1183},[118,11400,1989],{"class":124},[118,11402,10874],{"class":128},[118,11404,174],{"class":124},[118,11406,2042],{"class":177},[118,11408,184],{"class":128},[118,11410,11411],{"class":187}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[118,11413,11414,11416,11418,11421],{"class":120,"line":1198},[118,11415,4094],{"class":124},[118,11417,10589],{"class":124},[118,11419,11420],{"class":128},"a;",[118,11422,11423],{"class":187}," \u002F\u002F放回局部变量的地址\n",[118,11425,11426],{"class":120,"line":1204},[118,11427,1569],{"class":128},[118,11429,11430],{"class":120,"line":1218},[118,11431,2404],{"emptyLinePlaceholder":45},[118,11433,11434,11436,11438],{"class":120,"line":1224},[118,11435,132],{"class":124},[118,11437,1977],{"class":1967},[118,11439,10858],{"class":128},[118,11441,11442],{"class":120,"line":1315},[118,11443,11444],{"class":187},"    \u002F\u002F接受func的返回值\n",[118,11446,11447,11449,11451,11454,11456,11458],{"class":120,"line":1321},[118,11448,1989],{"class":124},[118,11450,6523],{"class":124},[118,11452,11453],{"class":128},"p ",[118,11455,174],{"class":124},[118,11457,11390],{"class":1967},[118,11459,5641],{"class":128},[118,11461,11462,11464,11466,11468,11470,11472,11475],{"class":120,"line":1333},[118,11463,6534],{"class":128},[118,11465,1172],{"class":124},[118,11467,6523],{"class":124},[118,11469,11453],{"class":128},[118,11471,1172],{"class":124},[118,11473,11474],{"class":128}," endl;",[118,11476,11477],{"class":187}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[118,11479,11480,11482,11484,11486,11488,11490,11492],{"class":120,"line":1616},[118,11481,6534],{"class":128},[118,11483,1172],{"class":124},[118,11485,6523],{"class":124},[118,11487,11453],{"class":128},[118,11489,1172],{"class":124},[118,11491,11474],{"class":128},[118,11493,11494],{"class":187}," \u002F\u002F第二次这个数据不再保留\n",[118,11496,11497,11499,11501,11503],{"class":120,"line":1621},[118,11498,2307],{"class":1967},[118,11500,129],{"class":128},[118,11502,2312],{"class":233},[118,11504,2723],{"class":128},[118,11506,11507,11509,11511],{"class":120,"line":1627},[118,11508,4094],{"class":124},[118,11510,4097],{"class":177},[118,11512,1294],{"class":128},[118,11514,11515],{"class":120,"line":1632},[118,11516,1569],{"class":128},[15,11518,11519],{},"输出结果：",[15,11521,11522],{},[1466,11523],{"alt":11524,"src":11525},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[15,11527,11528],{},"总结：不要返回局部变量的地址",[72,11530,11531],{"start":40},[75,11532,11533],{},"堆区",[1135,11535,11536,11539],{},[75,11537,11538],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[75,11540,11541],{},"在c++中主要利用new在堆区开辟内存",[109,11543,11545],{"className":111,"code":11544,"language":113,"meta":39,"style":39},"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",[115,11546,11547,11562,11566,11571,11592,11599,11603,11611,11615,11620,11634,11646],{"__ignoreMap":39},[118,11548,11549,11551,11554,11557,11559],{"class":120,"line":121},[118,11550,132],{"class":124},[118,11552,11553],{"class":124},"  *",[118,11555,11556],{"class":1967},"func",[118,11558,2431],{"class":128},[118,11560,11561],{"class":187},"  \u002F\u002F函数返回指针\n",[118,11563,11564],{"class":120,"line":40},[118,11565,1550],{"class":128},[118,11567,11568],{"class":120,"line":1183},[118,11569,11570],{"class":187},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[118,11572,11573,11575,11577,11579,11581,11584,11586,11588,11590],{"class":120,"line":1198},[118,11574,4151],{"class":124},[118,11576,6523],{"class":124},[118,11578,15],{"class":128},[118,11580,174],{"class":124},[118,11582,11583],{"class":124}," new",[118,11585,2386],{"class":124},[118,11587,129],{"class":128},[118,11589,574],{"class":177},[118,11591,2723],{"class":128},[118,11593,11594,11596],{"class":120,"line":1204},[118,11595,4385],{"class":124},[118,11597,11598],{"class":128}," p;\n",[118,11600,11601],{"class":120,"line":1218},[118,11602,1569],{"class":128},[118,11604,11605,11607,11609],{"class":120,"line":1224},[118,11606,132],{"class":124},[118,11608,1977],{"class":1967},[118,11610,1980],{"class":128},[118,11612,11613],{"class":120,"line":1315},[118,11614,1550],{"class":128},[118,11616,11617],{"class":120,"line":1321},[118,11618,11619],{"class":187},"    \u002F\u002F在堆区开辟数据\n",[118,11621,11622,11624,11626,11628,11630,11632],{"class":120,"line":1333},[118,11623,1989],{"class":124},[118,11625,6523],{"class":124},[118,11627,15],{"class":128},[118,11629,174],{"class":124},[118,11631,11556],{"class":1967},[118,11633,5641],{"class":128},[118,11635,11636,11638,11640,11642,11644],{"class":120,"line":1616},[118,11637,1555],{"class":128},[118,11639,6424],{"class":124},[118,11641,15],{"class":128},[118,11643,1172],{"class":124},[118,11645,1195],{"class":128},[118,11647,11648],{"class":120,"line":1621},[118,11649,1569],{"class":128},[15,11651,11652],{},"图片展示：",[15,11654,11655],{},[1466,11656],{"alt":11524,"src":11657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[15,11659,11660],{},"堆区内存由程序员管生死！！！",[72,11662,11663],{"start":1183},[75,11664,11665],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[15,11667,11668],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[15,11670,11671,11672],{},"​语法：",[115,11673,11674],{}," new 数据类型",[15,11676,11677],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[109,11679,11681],{"className":111,"code":11680,"language":113,"meta":39,"style":39},"\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",[115,11682,11683,11688,11698,11702,11707,11712,11734,11738,11746,11750,11764,11776,11788,11800,11805,11810,11821,11825,11830,11838,11842,11847,11869,11895,11899,11917,11921,11947,11951,11963,11967,11972,11977,11985,11989,11993,12001,12005,12011,12017],{"__ignoreMap":39},[118,11684,11685],{"class":120,"line":121},[118,11686,11687],{"class":187},"\u002F\u002F1.new的基本语法\n",[118,11689,11690,11692,11694,11696],{"class":120,"line":40},[118,11691,132],{"class":124},[118,11693,6523],{"class":124},[118,11695,11556],{"class":1967},[118,11697,1980],{"class":128},[118,11699,11700],{"class":120,"line":1183},[118,11701,1550],{"class":128},[118,11703,11704],{"class":120,"line":1198},[118,11705,11706],{"class":187},"    \u002F\u002F在堆区创建整型数据\n",[118,11708,11709],{"class":120,"line":1204},[118,11710,11711],{"class":187},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[118,11713,11714,11716,11718,11720,11723,11725,11727,11729,11731],{"class":120,"line":1218},[118,11715,1989],{"class":124},[118,11717,6523],{"class":124},[118,11719,15],{"class":128},[118,11721,11722],{"class":124},"=new",[118,11724,2386],{"class":124},[118,11726,129],{"class":128},[118,11728,574],{"class":177},[118,11730,5971],{"class":128},[118,11732,11733],{"class":187},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[118,11735,11736],{"class":120,"line":1224},[118,11737,1569],{"class":128},[118,11739,11740,11742,11744],{"class":120,"line":1315},[118,11741,5369],{"class":124},[118,11743,5593],{"class":1967},[118,11745,1980],{"class":128},[118,11747,11748],{"class":120,"line":1321},[118,11749,1550],{"class":128},[118,11751,11752,11754,11756,11758,11760,11762],{"class":120,"line":1333},[118,11753,1989],{"class":124},[118,11755,6523],{"class":124},[118,11757,15],{"class":128},[118,11759,174],{"class":124},[118,11761,11556],{"class":1967},[118,11763,5641],{"class":128},[118,11765,11766,11768,11770,11772,11774],{"class":120,"line":1616},[118,11767,1555],{"class":128},[118,11769,6424],{"class":124},[118,11771,15],{"class":128},[118,11773,1172],{"class":124},[118,11775,1195],{"class":128},[118,11777,11778,11780,11782,11784,11786],{"class":120,"line":1621},[118,11779,1555],{"class":128},[118,11781,6424],{"class":124},[118,11783,15],{"class":128},[118,11785,1172],{"class":124},[118,11787,1195],{"class":128},[118,11789,11790,11792,11794,11796,11798],{"class":120,"line":1627},[118,11791,1555],{"class":128},[118,11793,6424],{"class":124},[118,11795,15],{"class":128},[118,11797,1172],{"class":124},[118,11799,1195],{"class":128},[118,11801,11802],{"class":120,"line":1632},[118,11803,11804],{"class":187},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[118,11806,11807],{"class":120,"line":1646},[118,11808,11809],{"class":187},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[118,11811,11812,11815,11818],{"class":120,"line":1651},[118,11813,11814],{"class":124},"    delete",[118,11816,11817],{"class":128}," p;",[118,11819,11820],{"class":187},"\u002F\u002F删除这块地址\n",[118,11822,11823],{"class":120,"line":1657},[118,11824,1569],{"class":128},[118,11826,11827],{"class":120,"line":1678},[118,11828,11829],{"class":187},"\u002F\u002F2.在堆区利用new开辟数组\n",[118,11831,11832,11834,11836],{"class":120,"line":1683},[118,11833,5369],{"class":124},[118,11835,5662],{"class":1967},[118,11837,1980],{"class":128},[118,11839,11840],{"class":120,"line":1697},[118,11841,1550],{"class":128},[118,11843,11844],{"class":120,"line":1702},[118,11845,11846],{"class":187},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[118,11848,11849,11851,11853,11855,11857,11859,11861,11863,11866],{"class":120,"line":1731},[118,11850,1989],{"class":124},[118,11852,6523],{"class":124},[118,11854,3884],{"class":128},[118,11856,11722],{"class":124},[118,11858,2386],{"class":124},[118,11860,1018],{"class":128},[118,11862,574],{"class":177},[118,11864,11865],{"class":128},"];",[118,11867,11868],{"class":187},"\u002F\u002F10代表数组有10个元素\n",[118,11870,11871,11873,11875,11877,11879,11881,11883,11885,11887,11889,11891,11893],{"class":120,"line":1736},[118,11872,3205],{"class":124},[118,11874,1662],{"class":128},[118,11876,132],{"class":124},[118,11878,3036],{"class":128},[118,11880,174],{"class":124},[118,11882,320],{"class":177},[118,11884,3043],{"class":128},[118,11886,1038],{"class":124},[118,11888,574],{"class":177},[118,11890,3043],{"class":128},[118,11892,2296],{"class":124},[118,11894,135],{"class":128},[118,11896,11897],{"class":120,"line":1753},[118,11898,2034],{"class":128},[118,11900,11901,11904,11906,11908,11910,11912,11914],{"class":120,"line":1758},[118,11902,11903],{"class":128},"        arr[i]",[118,11905,174],{"class":124},[118,11907,569],{"class":128},[118,11909,609],{"class":124},[118,11911,439],{"class":177},[118,11913,184],{"class":128},[118,11915,11916],{"class":187},"\u002F\u002F给10个元素赋值100～109\n",[118,11918,11919],{"class":120,"line":1763},[118,11920,2191],{"class":128},[118,11922,11923,11925,11927,11929,11931,11933,11935,11937,11939,11941,11943,11945],{"class":120,"line":1768},[118,11924,3205],{"class":124},[118,11926,1662],{"class":128},[118,11928,132],{"class":124},[118,11930,3036],{"class":128},[118,11932,174],{"class":124},[118,11934,320],{"class":177},[118,11936,3043],{"class":128},[118,11938,1038],{"class":124},[118,11940,574],{"class":177},[118,11942,3043],{"class":128},[118,11944,2296],{"class":124},[118,11946,135],{"class":128},[118,11948,11949],{"class":120,"line":1782},[118,11950,2034],{"class":128},[118,11952,11953,11955,11957,11959,11961],{"class":120,"line":1787},[118,11954,3455],{"class":128},[118,11956,1172],{"class":124},[118,11958,4358],{"class":128},[118,11960,1172],{"class":124},[118,11962,1195],{"class":128},[118,11964,11965],{"class":120,"line":2581},[118,11966,2191],{"class":128},[118,11968,11969],{"class":120,"line":2595},[118,11970,11971],{"class":187},"    \u002F\u002F释放堆区数组\n",[118,11973,11974],{"class":120,"line":2603},[118,11975,11976],{"class":187},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[118,11978,11979,11982],{"class":120,"line":2608},[118,11980,11981],{"class":124},"    delete[]",[118,11983,11984],{"class":128}," arr;\n",[118,11986,11987],{"class":120,"line":2614},[118,11988,1569],{"class":128},[118,11990,11991],{"class":120,"line":2620},[118,11992,2404],{"emptyLinePlaceholder":45},[118,11994,11995,11997,11999],{"class":120,"line":2625},[118,11996,132],{"class":124},[118,11998,1977],{"class":1967},[118,12000,1980],{"class":128},[118,12002,12003],{"class":120,"line":7953},[118,12004,1550],{"class":128},[118,12006,12007,12009],{"class":120,"line":7977},[118,12008,5638],{"class":1967},[118,12010,5641],{"class":128},[118,12012,12013,12015],{"class":120,"line":7982},[118,12014,5707],{"class":1967},[118,12016,5641],{"class":128},[118,12018,12019],{"class":120,"line":7988},[118,12020,1569],{"class":128},[5131,12022,12023],{},"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":39,"searchDepth":40,"depth":40,"links":12025},[12026],{"id":10694,"depth":40,"text":10695,"children":12027},[12028,12029],{"id":10726,"depth":1183,"text":10727},{"id":11354,"depth":1183,"text":11355},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10686,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12036,"title":12037,"body":12038,"description":39,"extension":43,"meta":13519,"navigation":45,"path":13520,"seo":13521,"stem":13522,"__hash__":13523},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12039,"toc":13511},[12040,12043,12047,12050,12053,12222,12226,12231,12248,12253,12405,12409,12412,12415,12809,12813,12816,12821,12824,13136,13140,13146,13306,13308,13316,13320,13323,13330,13508],[10,12041,12037],{"id":12042},"_6引用",[60,12044,12046],{"id":12045},"_61引用基本用法","6.1引用基本用法",[15,12048,12049],{},"引用的本质：给变量起别名",[15,12051,12052],{},"语法：数据类型 &别名=原名",[109,12054,12056],{"className":111,"code":12055,"language":113,"meta":39,"style":39},"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",[115,12057,12058,12066,12070,12082,12094,12098,12117,12136,12140,12151,12155,12174,12192,12196,12206,12210,12218],{"__ignoreMap":39},[118,12059,12060,12062,12064],{"class":120,"line":121},[118,12061,132],{"class":124},[118,12063,1977],{"class":1967},[118,12065,10858],{"class":128},[118,12067,12068],{"class":120,"line":40},[118,12069,2404],{"emptyLinePlaceholder":45},[118,12071,12072,12074,12076,12078,12080],{"class":120,"line":1183},[118,12073,1989],{"class":124},[118,12075,10874],{"class":128},[118,12077,174],{"class":124},[118,12079,2042],{"class":177},[118,12081,1294],{"class":128},[118,12083,12084,12086,12088,12090,12092],{"class":120,"line":1198},[118,12085,1989],{"class":124},[118,12087,10589],{"class":124},[118,12089,10950],{"class":128},[118,12091,174],{"class":124},[118,12093,1436],{"class":128},[118,12095,12096],{"class":120,"line":1204},[118,12097,2404],{"emptyLinePlaceholder":45},[118,12099,12100,12102,12104,12107,12109,12111,12113,12115],{"class":120,"line":1218},[118,12101,6534],{"class":128},[118,12103,1172],{"class":124},[118,12105,12106],{"class":233}," \"a = \"",[118,12108,1448],{"class":124},[118,12110,10874],{"class":128},[118,12112,1172],{"class":124},[118,12114,11474],{"class":128},[118,12116,7273],{"class":187},[118,12118,12119,12121,12123,12126,12128,12130,12132,12134],{"class":120,"line":1224},[118,12120,6534],{"class":128},[118,12122,1172],{"class":124},[118,12124,12125],{"class":233}," \"b = \"",[118,12127,1448],{"class":124},[118,12129,10887],{"class":128},[118,12131,1172],{"class":124},[118,12133,11474],{"class":128},[118,12135,7273],{"class":187},[118,12137,12138],{"class":120,"line":1315},[118,12139,2404],{"emptyLinePlaceholder":45},[118,12141,12142,12145,12147,12149],{"class":120,"line":1321},[118,12143,12144],{"class":128},"    b ",[118,12146,174],{"class":124},[118,12148,5759],{"class":177},[118,12150,1294],{"class":128},[118,12152,12153],{"class":120,"line":1333},[118,12154,2404],{"emptyLinePlaceholder":45},[118,12156,12157,12159,12161,12163,12165,12167,12169,12171],{"class":120,"line":1616},[118,12158,6534],{"class":128},[118,12160,1172],{"class":124},[118,12162,12106],{"class":233},[118,12164,1448],{"class":124},[118,12166,10874],{"class":128},[118,12168,1172],{"class":124},[118,12170,11474],{"class":128},[118,12172,12173],{"class":187},"\u002F\u002F100\n",[118,12175,12176,12178,12180,12182,12184,12186,12188,12190],{"class":120,"line":1621},[118,12177,6534],{"class":128},[118,12179,1172],{"class":124},[118,12181,12125],{"class":233},[118,12183,1448],{"class":124},[118,12185,10887],{"class":128},[118,12187,1172],{"class":124},[118,12189,11474],{"class":128},[118,12191,12173],{"class":187},[118,12193,12194],{"class":120,"line":1627},[118,12195,2404],{"emptyLinePlaceholder":45},[118,12197,12198,12200,12202,12204],{"class":120,"line":1632},[118,12199,2307],{"class":1967},[118,12201,129],{"class":128},[118,12203,2312],{"class":233},[118,12205,2723],{"class":128},[118,12207,12208],{"class":120,"line":1646},[118,12209,2404],{"emptyLinePlaceholder":45},[118,12211,12212,12214,12216],{"class":120,"line":1651},[118,12213,4094],{"class":124},[118,12215,4097],{"class":177},[118,12217,1294],{"class":128},[118,12219,12220],{"class":120,"line":1657},[118,12221,1569],{"class":128},[60,12223,12225],{"id":12224},"_62引用的注意事项","6.2引用的注意事项",[72,12227,12228],{},[75,12229,12230],{},"引用必须要初始化",[109,12232,12234],{"className":111,"code":12233,"language":113,"meta":39,"style":39},"int &b;\u002F\u002F非常错误！\n",[115,12235,12236],{"__ignoreMap":39},[118,12237,12238,12240,12242,12245],{"class":120,"line":121},[118,12239,132],{"class":124},[118,12241,10589],{"class":124},[118,12243,12244],{"class":128},"b;",[118,12246,12247],{"class":187},"\u002F\u002F非常错误！\n",[72,12249,12250],{"start":40},[75,12251,12252],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[109,12254,12256],{"className":111,"code":12255,"language":113,"meta":39,"style":39},"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",[115,12257,12258,12266,12278,12290,12298,12314,12327,12345,12363,12383,12393,12401],{"__ignoreMap":39},[118,12259,12260,12262,12264],{"class":120,"line":121},[118,12261,132],{"class":124},[118,12263,1977],{"class":1967},[118,12265,10858],{"class":128},[118,12267,12268,12270,12272,12274,12276],{"class":120,"line":40},[118,12269,1989],{"class":124},[118,12271,10874],{"class":128},[118,12273,174],{"class":124},[118,12275,2042],{"class":177},[118,12277,1294],{"class":128},[118,12279,12280,12282,12284,12286,12288],{"class":120,"line":1183},[118,12281,1989],{"class":124},[118,12283,10887],{"class":128},[118,12285,174],{"class":124},[118,12287,8955],{"class":177},[118,12289,1294],{"class":128},[118,12291,12292,12295],{"class":120,"line":1198},[118,12293,12294],{"class":187},"    \u002F\u002Fint &c;",[118,12296,12297],{"class":187}," \u002F\u002F错误，引用必须初始化\n",[118,12299,12300,12302,12304,12306,12308,12311],{"class":120,"line":1204},[118,12301,1989],{"class":124},[118,12303,10589],{"class":124},[118,12305,2950],{"class":128},[118,12307,174],{"class":124},[118,12309,12310],{"class":128}," a;",[118,12312,12313],{"class":187}," \u002F\u002F一旦初始化后，就不可以更改\n",[118,12315,12316,12319,12321,12324],{"class":120,"line":1218},[118,12317,12318],{"class":128},"    c ",[118,12320,174],{"class":124},[118,12322,12323],{"class":128}," b;",[118,12325,12326],{"class":187}," \u002F\u002F这是赋值操作，不是更改引用\n",[118,12328,12329,12331,12333,12335,12337,12339,12341,12343],{"class":120,"line":1224},[118,12330,6534],{"class":128},[118,12332,1172],{"class":124},[118,12334,12106],{"class":233},[118,12336,1448],{"class":124},[118,12338,10874],{"class":128},[118,12340,1172],{"class":124},[118,12342,11474],{"class":128},[118,12344,7258],{"class":187},[118,12346,12347,12349,12351,12353,12355,12357,12359,12361],{"class":120,"line":1315},[118,12348,6534],{"class":128},[118,12350,1172],{"class":124},[118,12352,12125],{"class":233},[118,12354,1448],{"class":124},[118,12356,10887],{"class":128},[118,12358,1172],{"class":124},[118,12360,11474],{"class":128},[118,12362,7258],{"class":187},[118,12364,12365,12367,12369,12372,12374,12377,12379,12381],{"class":120,"line":1321},[118,12366,6534],{"class":128},[118,12368,1172],{"class":124},[118,12370,12371],{"class":233}," \"c = \"",[118,12373,1448],{"class":124},[118,12375,12376],{"class":128}," c ",[118,12378,1172],{"class":124},[118,12380,11474],{"class":128},[118,12382,7258],{"class":187},[118,12384,12385,12387,12389,12391],{"class":120,"line":1333},[118,12386,2307],{"class":1967},[118,12388,129],{"class":128},[118,12390,2312],{"class":233},[118,12392,2723],{"class":128},[118,12394,12395,12397,12399],{"class":120,"line":1616},[118,12396,4094],{"class":124},[118,12398,4097],{"class":177},[118,12400,1294],{"class":128},[118,12402,12403],{"class":120,"line":1621},[118,12404,1569],{"class":128},[60,12406,12408],{"id":12407},"_63引用做函数参数","6.3引用做函数参数",[15,12410,12411],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[15,12413,12414],{},"优点：可以简化指针修改实参",[109,12416,12418],{"className":111,"code":12417,"language":113,"meta":39,"style":39},"\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",[115,12419,12420,12425,12448,12459,12469,12478,12482,12486,12491,12513,12525,12537,12547,12551,12555,12560,12582,12592,12600,12608,12612,12616,12624,12628,12640,12652,12656,12667,12693,12697,12717,12741,12745,12755,12779,12783,12793,12797,12805],{"__ignoreMap":39},[118,12421,12422],{"class":120,"line":121},[118,12423,12424],{"class":187},"\u002F\u002F1. 值传递\n",[118,12426,12427,12429,12432,12434,12436,12438,12441,12443,12445],{"class":120,"line":40},[118,12428,5369],{"class":124},[118,12430,12431],{"class":1967}," mySwap01",[118,12433,129],{"class":128},[118,12435,132],{"class":124},[118,12437,1402],{"class":5221},[118,12439,12440],{"class":128},", ",[118,12442,132],{"class":124},[118,12444,2837],{"class":5221},[118,12446,12447],{"class":128},") {\n",[118,12449,12450,12452,12455,12457],{"class":120,"line":1183},[118,12451,1989],{"class":124},[118,12453,12454],{"class":128}," temp ",[118,12456,174],{"class":124},[118,12458,1436],{"class":128},[118,12460,12461,12464,12466],{"class":120,"line":1198},[118,12462,12463],{"class":128},"    a ",[118,12465,174],{"class":124},[118,12467,12468],{"class":128}," b;\n",[118,12470,12471,12473,12475],{"class":120,"line":1204},[118,12472,12144],{"class":128},[118,12474,174],{"class":124},[118,12476,12477],{"class":128}," temp;\n",[118,12479,12480],{"class":120,"line":1218},[118,12481,1569],{"class":128},[118,12483,12484],{"class":120,"line":1224},[118,12485,2404],{"emptyLinePlaceholder":45},[118,12487,12488],{"class":120,"line":1315},[118,12489,12490],{"class":187},"\u002F\u002F2. 地址传递\n",[118,12492,12493,12495,12498,12500,12503,12505,12507,12509,12511],{"class":120,"line":1321},[118,12494,5369],{"class":124},[118,12496,12497],{"class":1967}," mySwap02",[118,12499,129],{"class":128},[118,12501,12502],{"class":124},"int*",[118,12504,1402],{"class":5221},[118,12506,12440],{"class":128},[118,12508,12502],{"class":124},[118,12510,2837],{"class":5221},[118,12512,12447],{"class":128},[118,12514,12515,12517,12519,12521,12523],{"class":120,"line":1333},[118,12516,1989],{"class":124},[118,12518,12454],{"class":128},[118,12520,174],{"class":124},[118,12522,6523],{"class":124},[118,12524,6202],{"class":128},[118,12526,12527,12529,12531,12533,12535],{"class":120,"line":1616},[118,12528,6408],{"class":124},[118,12530,10924],{"class":128},[118,12532,174],{"class":124},[118,12534,6523],{"class":124},[118,12536,6074],{"class":128},[118,12538,12539,12541,12543,12545],{"class":120,"line":1621},[118,12540,6408],{"class":124},[118,12542,10950],{"class":128},[118,12544,174],{"class":124},[118,12546,12477],{"class":128},[118,12548,12549],{"class":120,"line":1627},[118,12550,1569],{"class":128},[118,12552,12553],{"class":120,"line":1632},[118,12554,2404],{"emptyLinePlaceholder":45},[118,12556,12557],{"class":120,"line":1646},[118,12558,12559],{"class":187},"\u002F\u002F3. 引用传递\n",[118,12561,12562,12564,12567,12569,12572,12574,12576,12578,12580],{"class":120,"line":1651},[118,12563,5369],{"class":124},[118,12565,12566],{"class":1967}," mySwap03",[118,12568,129],{"class":128},[118,12570,12571],{"class":124},"int&",[118,12573,1402],{"class":5221},[118,12575,12440],{"class":128},[118,12577,12571],{"class":124},[118,12579,2837],{"class":5221},[118,12581,12447],{"class":128},[118,12583,12584,12586,12588,12590],{"class":120,"line":1657},[118,12585,1989],{"class":124},[118,12587,12454],{"class":128},[118,12589,174],{"class":124},[118,12591,1436],{"class":128},[118,12593,12594,12596,12598],{"class":120,"line":1678},[118,12595,12463],{"class":128},[118,12597,174],{"class":124},[118,12599,12468],{"class":128},[118,12601,12602,12604,12606],{"class":120,"line":1683},[118,12603,12144],{"class":128},[118,12605,174],{"class":124},[118,12607,12477],{"class":128},[118,12609,12610],{"class":120,"line":1697},[118,12611,1569],{"class":128},[118,12613,12614],{"class":120,"line":1702},[118,12615,2404],{"emptyLinePlaceholder":45},[118,12617,12618,12620,12622],{"class":120,"line":1731},[118,12619,132],{"class":124},[118,12621,1977],{"class":1967},[118,12623,10858],{"class":128},[118,12625,12626],{"class":120,"line":1736},[118,12627,2404],{"emptyLinePlaceholder":45},[118,12629,12630,12632,12634,12636,12638],{"class":120,"line":1753},[118,12631,1989],{"class":124},[118,12633,10874],{"class":128},[118,12635,174],{"class":124},[118,12637,2042],{"class":177},[118,12639,1294],{"class":128},[118,12641,12642,12644,12646,12648,12650],{"class":120,"line":1758},[118,12643,1989],{"class":124},[118,12645,10887],{"class":128},[118,12647,174],{"class":124},[118,12649,8955],{"class":177},[118,12651,1294],{"class":128},[118,12653,12654],{"class":120,"line":1763},[118,12655,2404],{"emptyLinePlaceholder":45},[118,12657,12658,12661,12664],{"class":120,"line":1768},[118,12659,12660],{"class":1967},"    mySwap01",[118,12662,12663],{"class":128},"(a, b);",[118,12665,12666],{"class":187},"\u002F\u002F值传递，形参不会修饰实参\n",[118,12668,12669,12671,12673,12676,12678,12680,12682,12685,12687,12689,12691],{"class":120,"line":1782},[118,12670,6534],{"class":128},[118,12672,1172],{"class":124},[118,12674,12675],{"class":233}," \"a:\"",[118,12677,1448],{"class":124},[118,12679,10874],{"class":128},[118,12681,1172],{"class":124},[118,12683,12684],{"class":233}," \" b:\"",[118,12686,1448],{"class":124},[118,12688,10887],{"class":128},[118,12690,1172],{"class":124},[118,12692,8845],{"class":128},[118,12694,12695],{"class":120,"line":1787},[118,12696,2404],{"emptyLinePlaceholder":45},[118,12698,12699,12702,12704,12706,12709,12711,12714],{"class":120,"line":2581},[118,12700,12701],{"class":1967},"    mySwap02",[118,12703,129],{"class":128},[118,12705,481],{"class":124},[118,12707,12708],{"class":128},"a, ",[118,12710,481],{"class":124},[118,12712,12713],{"class":128},"b);",[118,12715,12716],{"class":187},"\u002F\u002F地址传递，形参会修饰实参\n",[118,12718,12719,12721,12723,12725,12727,12729,12731,12733,12735,12737,12739],{"class":120,"line":2595},[118,12720,6534],{"class":128},[118,12722,1172],{"class":124},[118,12724,12675],{"class":233},[118,12726,1448],{"class":124},[118,12728,10874],{"class":128},[118,12730,1172],{"class":124},[118,12732,12684],{"class":233},[118,12734,1448],{"class":124},[118,12736,10887],{"class":128},[118,12738,1172],{"class":124},[118,12740,8845],{"class":128},[118,12742,12743],{"class":120,"line":2603},[118,12744,2404],{"emptyLinePlaceholder":45},[118,12746,12747,12750,12752],{"class":120,"line":2608},[118,12748,12749],{"class":1967},"    mySwap03",[118,12751,12663],{"class":128},[118,12753,12754],{"class":187},"\u002F\u002F引用传递，形参会修饰实参\n",[118,12756,12757,12759,12761,12763,12765,12767,12769,12771,12773,12775,12777],{"class":120,"line":2614},[118,12758,6534],{"class":128},[118,12760,1172],{"class":124},[118,12762,12675],{"class":233},[118,12764,1448],{"class":124},[118,12766,10874],{"class":128},[118,12768,1172],{"class":124},[118,12770,12684],{"class":233},[118,12772,1448],{"class":124},[118,12774,10887],{"class":128},[118,12776,1172],{"class":124},[118,12778,8845],{"class":128},[118,12780,12781],{"class":120,"line":2620},[118,12782,2404],{"emptyLinePlaceholder":45},[118,12784,12785,12787,12789,12791],{"class":120,"line":2625},[118,12786,2307],{"class":1967},[118,12788,129],{"class":128},[118,12790,2312],{"class":233},[118,12792,2723],{"class":128},[118,12794,12795],{"class":120,"line":7953},[118,12796,2404],{"emptyLinePlaceholder":45},[118,12798,12799,12801,12803],{"class":120,"line":7977},[118,12800,4094],{"class":124},[118,12802,4097],{"class":177},[118,12804,1294],{"class":128},[118,12806,12807],{"class":120,"line":7982},[118,12808,1569],{"class":128},[60,12810,12812],{"id":12811},"_64引用做函数的返回值","6.4引用做函数的返回值",[15,12814,12815],{},"作用：引用是可以作为函数的返回值存在的",[15,12817,9030,12818],{},[278,12819,12820],{},"不要返回局部变量引用",[15,12822,12823],{},"用法：函数调用作为左值",[109,12825,12827],{"className":9946,"code":12826,"language":9948,"meta":39,"style":39},"\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",[115,12828,12829,12834,12842,12857,12863,12867,12871,12876,12884,12901,12907,12911,12915,12923,12927,12932,12946,12966,12985,12989,12994,13007,13027,13045,13049,13065,13069,13088,13106,13110,13120,13124,13132],{"__ignoreMap":39},[118,12830,12831],{"class":120,"line":121},[118,12832,12833],{"class":187},"\u002F\u002F返回局部变量引用\n",[118,12835,12836,12838,12840],{"class":120,"line":40},[118,12837,12571],{"class":124},[118,12839,5593],{"class":1967},[118,12841,10858],{"class":128},[118,12843,12844,12846,12848,12850,12852,12854],{"class":120,"line":1183},[118,12845,1989],{"class":124},[118,12847,10874],{"class":128},[118,12849,174],{"class":124},[118,12851,2042],{"class":177},[118,12853,184],{"class":128},[118,12855,12856],{"class":187}," \u002F\u002F局部变量\n",[118,12858,12859,12861],{"class":120,"line":1198},[118,12860,4094],{"class":124},[118,12862,1436],{"class":128},[118,12864,12865],{"class":120,"line":1204},[118,12866,1569],{"class":128},[118,12868,12869],{"class":120,"line":1218},[118,12870,2404],{"emptyLinePlaceholder":45},[118,12872,12873],{"class":120,"line":1224},[118,12874,12875],{"class":187},"\u002F\u002F返回静态变量引用\n",[118,12877,12878,12880,12882],{"class":120,"line":1315},[118,12879,12571],{"class":124},[118,12881,5662],{"class":1967},[118,12883,10858],{"class":128},[118,12885,12886,12888,12890,12892,12894,12896,12898],{"class":120,"line":1321},[118,12887,11025],{"class":124},[118,12889,2386],{"class":124},[118,12891,10874],{"class":128},[118,12893,174],{"class":124},[118,12895,8955],{"class":177},[118,12897,184],{"class":128},[118,12899,12900],{"class":187},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[118,12902,12903,12905],{"class":120,"line":1333},[118,12904,4094],{"class":124},[118,12906,1436],{"class":128},[118,12908,12909],{"class":120,"line":1616},[118,12910,1569],{"class":128},[118,12912,12913],{"class":120,"line":1621},[118,12914,2404],{"emptyLinePlaceholder":45},[118,12916,12917,12919,12921],{"class":120,"line":1627},[118,12918,132],{"class":124},[118,12920,1977],{"class":1967},[118,12922,10858],{"class":128},[118,12924,12925],{"class":120,"line":1632},[118,12926,2404],{"emptyLinePlaceholder":45},[118,12928,12929],{"class":120,"line":1646},[118,12930,12931],{"class":187},"    \u002F\u002F不能返回局部变量的引用\n",[118,12933,12934,12937,12940,12942,12944],{"class":120,"line":1651},[118,12935,12936],{"class":124},"    int&",[118,12938,12939],{"class":128}," ref ",[118,12941,174],{"class":124},[118,12943,5593],{"class":1967},[118,12945,5641],{"class":128},[118,12947,12948,12950,12952,12955,12957,12959,12961,12963],{"class":120,"line":1657},[118,12949,6534],{"class":128},[118,12951,1172],{"class":124},[118,12953,12954],{"class":233}," \"ref = \"",[118,12956,1448],{"class":124},[118,12958,12939],{"class":128},[118,12960,1172],{"class":124},[118,12962,11474],{"class":128},[118,12964,12965],{"class":187},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[118,12967,12968,12970,12972,12974,12976,12978,12980,12982],{"class":120,"line":1678},[118,12969,6534],{"class":128},[118,12971,1172],{"class":124},[118,12973,12954],{"class":233},[118,12975,1448],{"class":124},[118,12977,12939],{"class":128},[118,12979,1172],{"class":124},[118,12981,11474],{"class":128},[118,12983,12984],{"class":187},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[118,12986,12987],{"class":120,"line":1683},[118,12988,2404],{"emptyLinePlaceholder":45},[118,12990,12991],{"class":120,"line":1697},[118,12992,12993],{"class":187},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[118,12995,12996,12998,13001,13003,13005],{"class":120,"line":1702},[118,12997,12936],{"class":124},[118,12999,13000],{"class":128}," ref2 ",[118,13002,174],{"class":124},[118,13004,5662],{"class":1967},[118,13006,5641],{"class":128},[118,13008,13009,13011,13013,13016,13018,13020,13022,13024],{"class":120,"line":1731},[118,13010,6534],{"class":128},[118,13012,1172],{"class":124},[118,13014,13015],{"class":233}," \"ref2 = \"",[118,13017,1448],{"class":124},[118,13019,13000],{"class":128},[118,13021,1172],{"class":124},[118,13023,11474],{"class":128},[118,13025,13026],{"class":187}," \u002F\u002F20\n",[118,13028,13029,13031,13033,13035,13037,13039,13041,13043],{"class":120,"line":1736},[118,13030,6534],{"class":128},[118,13032,1172],{"class":124},[118,13034,13015],{"class":233},[118,13036,1448],{"class":124},[118,13038,13000],{"class":128},[118,13040,1172],{"class":124},[118,13042,11474],{"class":128},[118,13044,13026],{"class":187},[118,13046,13047],{"class":120,"line":1753},[118,13048,2404],{"emptyLinePlaceholder":45},[118,13050,13051,13053,13056,13058,13060,13062],{"class":120,"line":1758},[118,13052,5707],{"class":1967},[118,13054,13055],{"class":128},"() ",[118,13057,174],{"class":124},[118,13059,3003],{"class":177},[118,13061,184],{"class":128},[118,13063,13064],{"class":187},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[118,13066,13067],{"class":120,"line":1763},[118,13068,2404],{"emptyLinePlaceholder":45},[118,13070,13071,13073,13075,13077,13079,13081,13083,13085],{"class":120,"line":1768},[118,13072,6534],{"class":128},[118,13074,1172],{"class":124},[118,13076,13015],{"class":233},[118,13078,1448],{"class":124},[118,13080,13000],{"class":128},[118,13082,1172],{"class":124},[118,13084,11474],{"class":128},[118,13086,13087],{"class":187}," \u002F\u002F1000\n",[118,13089,13090,13092,13094,13096,13098,13100,13102,13104],{"class":120,"line":1782},[118,13091,6534],{"class":128},[118,13093,1172],{"class":124},[118,13095,13015],{"class":233},[118,13097,1448],{"class":124},[118,13099,13000],{"class":128},[118,13101,1172],{"class":124},[118,13103,11474],{"class":128},[118,13105,13087],{"class":187},[118,13107,13108],{"class":120,"line":1787},[118,13109,2404],{"emptyLinePlaceholder":45},[118,13111,13112,13114,13116,13118],{"class":120,"line":2581},[118,13113,2307],{"class":1967},[118,13115,129],{"class":128},[118,13117,2312],{"class":233},[118,13119,2723],{"class":128},[118,13121,13122],{"class":120,"line":2595},[118,13123,2404],{"emptyLinePlaceholder":45},[118,13125,13126,13128,13130],{"class":120,"line":2603},[118,13127,4094],{"class":124},[118,13129,4097],{"class":177},[118,13131,1294],{"class":128},[118,13133,13134],{"class":120,"line":2608},[118,13135,1569],{"class":128},[60,13137,13139],{"id":13138},"_65引用的本质","6.5引用的本质",[15,13141,13142,13143],{},"本质：",[278,13144,13145],{},"引用的本质在c++内部实现是一个指针常量.",[109,13147,13149],{"className":111,"code":13148,"language":113,"meta":39,"style":39},"\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",[115,13150,13151,13156,13172,13186,13190,13199,13211,13216,13221,13232,13245,13249,13265,13282,13286,13294,13302],{"__ignoreMap":39},[118,13152,13153],{"class":120,"line":121},[118,13154,13155],{"class":187},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[118,13157,13158,13160,13162,13164,13166,13169],{"class":120,"line":40},[118,13159,5369],{"class":124},[118,13161,11390],{"class":1967},[118,13163,129],{"class":128},[118,13165,12571],{"class":124},[118,13167,13168],{"class":5221}," ref",[118,13170,13171],{"class":128},"){\n",[118,13173,13174,13177,13179,13181,13183],{"class":120,"line":1183},[118,13175,13176],{"class":128},"    ref ",[118,13178,174],{"class":124},[118,13180,5759],{"class":177},[118,13182,184],{"class":128},[118,13184,13185],{"class":187}," \u002F\u002F ref是引用，转换为*ref = 100\n",[118,13187,13188],{"class":120,"line":1198},[118,13189,1569],{"class":128},[118,13191,13192,13194,13196],{"class":120,"line":1204},[118,13193,132],{"class":124},[118,13195,1977],{"class":1967},[118,13197,13198],{"class":128},"(){\n",[118,13200,13201,13203,13205,13207,13209],{"class":120,"line":1218},[118,13202,1989],{"class":124},[118,13204,10874],{"class":128},[118,13206,174],{"class":124},[118,13208,2042],{"class":177},[118,13210,1294],{"class":128},[118,13212,13213],{"class":120,"line":1224},[118,13214,13215],{"class":128},"    \n",[118,13217,13218],{"class":120,"line":1315},[118,13219,13220],{"class":187},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[118,13222,13223,13225,13227,13229],{"class":120,"line":1321},[118,13224,12936],{"class":124},[118,13226,12939],{"class":128},[118,13228,174],{"class":124},[118,13230,13231],{"class":128}," a; \n",[118,13233,13234,13236,13238,13240,13242],{"class":120,"line":1333},[118,13235,13176],{"class":128},[118,13237,174],{"class":124},[118,13239,8955],{"class":177},[118,13241,184],{"class":128},[118,13243,13244],{"class":187}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[118,13246,13247],{"class":120,"line":1616},[118,13248,13215],{"class":128},[118,13250,13251,13253,13255,13257,13259,13261,13263],{"class":120,"line":1621},[118,13252,6534],{"class":128},[118,13254,1172],{"class":124},[118,13256,12675],{"class":233},[118,13258,1448],{"class":124},[118,13260,10874],{"class":128},[118,13262,1172],{"class":124},[118,13264,8845],{"class":128},[118,13266,13267,13269,13271,13274,13276,13278,13280],{"class":120,"line":1627},[118,13268,6534],{"class":128},[118,13270,1172],{"class":124},[118,13272,13273],{"class":233}," \"ref:\"",[118,13275,1448],{"class":124},[118,13277,12939],{"class":128},[118,13279,1172],{"class":124},[118,13281,8845],{"class":128},[118,13283,13284],{"class":120,"line":1632},[118,13285,13215],{"class":128},[118,13287,13288,13291],{"class":120,"line":1646},[118,13289,13290],{"class":1967},"    func",[118,13292,13293],{"class":128},"(a);\n",[118,13295,13296,13298,13300],{"class":120,"line":1651},[118,13297,4094],{"class":124},[118,13299,4097],{"class":177},[118,13301,1294],{"class":128},[118,13303,13304],{"class":120,"line":1657},[118,13305,1569],{"class":128},[15,13307,11337],{},[72,13309,13310,13313],{},[75,13311,13312],{},"引用的本质，就是一个指针常量",[75,13314,13315],{},"引用一旦初始化，就不可以发生改变",[60,13317,13319],{"id":13318},"_66常量引用","6.6常量引用",[15,13321,13322],{},"作用：常量引用主要用来修饰形参",[15,13324,13325,13326,13329],{},"在函数形参列表中，可以加",[278,13327,13328],{},"const修饰形参","，防止形参改变实参",[109,13331,13333],{"className":111,"code":13332,"language":113,"meta":39,"style":39},"\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",[115,13334,13335,13340,13345,13364,13369,13382,13386,13390,13398,13402,13407,13412,13426,13430,13438,13450,13454,13459,13471,13478,13482,13492,13496,13504],{"__ignoreMap":39},[118,13336,13337],{"class":120,"line":121},[118,13338,13339],{"class":187},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[118,13341,13342],{"class":120,"line":40},[118,13343,13344],{"class":187},"\u002F\u002F加上const就不能修改实参的\n",[118,13346,13347,13349,13352,13354,13356,13359,13362],{"class":120,"line":1183},[118,13348,5369],{"class":124},[118,13350,13351],{"class":1967}," showValue",[118,13353,129],{"class":128},[118,13355,6797],{"class":124},[118,13357,13358],{"class":124}," int&",[118,13360,13361],{"class":5221}," v",[118,13363,12447],{"class":128},[118,13365,13366],{"class":120,"line":1198},[118,13367,13368],{"class":187},"    \u002F\u002Fv += 100;\n",[118,13370,13371,13373,13375,13378,13380],{"class":120,"line":1204},[118,13372,6534],{"class":128},[118,13374,1172],{"class":124},[118,13376,13377],{"class":128}," v ",[118,13379,1172],{"class":124},[118,13381,8845],{"class":128},[118,13383,13384],{"class":120,"line":1218},[118,13385,1569],{"class":128},[118,13387,13388],{"class":120,"line":1224},[118,13389,2404],{"emptyLinePlaceholder":45},[118,13391,13392,13394,13396],{"class":120,"line":1315},[118,13393,132],{"class":124},[118,13395,1977],{"class":1967},[118,13397,10858],{"class":128},[118,13399,13400],{"class":120,"line":1321},[118,13401,2404],{"emptyLinePlaceholder":45},[118,13403,13404],{"class":120,"line":1333},[118,13405,13406],{"class":187},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[118,13408,13409],{"class":120,"line":1616},[118,13410,13411],{"class":187},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[118,13413,13414,13416,13418,13420,13422,13424],{"class":120,"line":1621},[118,13415,11226],{"class":124},[118,13417,13358],{"class":124},[118,13419,12939],{"class":128},[118,13421,174],{"class":124},[118,13423,2042],{"class":177},[118,13425,1294],{"class":128},[118,13427,13428],{"class":120,"line":1627},[118,13429,2404],{"emptyLinePlaceholder":45},[118,13431,13432,13435],{"class":120,"line":1632},[118,13433,13434],{"class":187},"    \u002F\u002Fref = 100;",[118,13436,13437],{"class":187},"  \u002F\u002F加入const后不可以修改变量\n",[118,13439,13440,13442,13444,13446,13448],{"class":120,"line":1646},[118,13441,6534],{"class":128},[118,13443,1172],{"class":124},[118,13445,12939],{"class":128},[118,13447,1172],{"class":124},[118,13449,8845],{"class":128},[118,13451,13452],{"class":120,"line":1651},[118,13453,2404],{"emptyLinePlaceholder":45},[118,13455,13456],{"class":120,"line":1657},[118,13457,13458],{"class":187},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[118,13460,13461,13463,13465,13467,13469],{"class":120,"line":1678},[118,13462,1989],{"class":124},[118,13464,10874],{"class":128},[118,13466,174],{"class":124},[118,13468,2042],{"class":177},[118,13470,1294],{"class":128},[118,13472,13473,13476],{"class":120,"line":1683},[118,13474,13475],{"class":1967},"    showValue",[118,13477,13293],{"class":128},[118,13479,13480],{"class":120,"line":1697},[118,13481,2404],{"emptyLinePlaceholder":45},[118,13483,13484,13486,13488,13490],{"class":120,"line":1702},[118,13485,2307],{"class":1967},[118,13487,129],{"class":128},[118,13489,2312],{"class":233},[118,13491,2723],{"class":128},[118,13493,13494],{"class":120,"line":1731},[118,13495,2404],{"emptyLinePlaceholder":45},[118,13497,13498,13500,13502],{"class":120,"line":1736},[118,13499,4094],{"class":124},[118,13501,4097],{"class":177},[118,13503,1294],{"class":128},[118,13505,13506],{"class":120,"line":1753},[118,13507,1569],{"class":128},[5131,13509,13510],{},"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":39,"searchDepth":40,"depth":40,"links":13512},[13513,13514,13515,13516,13517,13518],{"id":12045,"depth":40,"text":12046},{"id":12224,"depth":40,"text":12225},{"id":12407,"depth":40,"text":12408},{"id":12811,"depth":40,"text":12812},{"id":13138,"depth":40,"text":13139},{"id":13318,"depth":40,"text":13319},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12037,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13525,"title":13526,"body":13527,"description":39,"extension":43,"meta":14608,"navigation":45,"path":14609,"seo":14610,"stem":14611,"__hash__":14612},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13528,"toc":14600},[13529,13532,13536,13539,13544,13776,13778,13789,13793,13796,13804,13908,13911,13915,13918,13922,13925,13930,13952,13958,14285,14288,14292,14300,14597],[10,13530,13526],{"id":13531},"_7函数高级部分",[60,13533,13535],{"id":13534},"_71函数默认参数","7.1函数默认参数",[15,13537,13538],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[15,13540,5186,13541],{},[115,13542,13543],{}," 返回值类型  函数名 （参数= 默认值）{}",[109,13545,13547],{"className":111,"code":13546,"language":113,"meta":39,"style":39},"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",[115,13548,13549,13584,13599,13603,13607,13612,13617,13646,13666,13676,13680,13684,13692,13696,13724,13746,13750,13760,13764,13772],{"__ignoreMap":39},[118,13550,13551,13553,13555,13557,13559,13561,13563,13565,13567,13570,13572,13574,13576,13578,13580,13582],{"class":120,"line":121},[118,13552,132],{"class":124},[118,13554,11390],{"class":1967},[118,13556,129],{"class":128},[118,13558,132],{"class":124},[118,13560,1402],{"class":5221},[118,13562,12440],{"class":128},[118,13564,132],{"class":124},[118,13566,2837],{"class":5221},[118,13568,13569],{"class":124}," =",[118,13571,2042],{"class":177},[118,13573,12440],{"class":128},[118,13575,132],{"class":124},[118,13577,2853],{"class":5221},[118,13579,13569],{"class":124},[118,13581,2042],{"class":177},[118,13583,12447],{"class":128},[118,13585,13586,13588,13590,13592,13594,13596],{"class":120,"line":40},[118,13587,4094],{"class":124},[118,13589,10874],{"class":128},[118,13591,609],{"class":124},[118,13593,10887],{"class":128},[118,13595,609],{"class":124},[118,13597,13598],{"class":128}," c;\n",[118,13600,13601],{"class":120,"line":1183},[118,13602,1569],{"class":128},[118,13604,13605],{"class":120,"line":1198},[118,13606,2404],{"emptyLinePlaceholder":45},[118,13608,13609],{"class":120,"line":1204},[118,13610,13611],{"class":187},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[118,13613,13614],{"class":120,"line":1218},[118,13615,13616],{"class":187},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[118,13618,13619,13621,13624,13626,13628,13630,13632,13634,13636,13638,13640,13642,13644],{"class":120,"line":1224},[118,13620,132],{"class":124},[118,13622,13623],{"class":1967}," func2",[118,13625,129],{"class":128},[118,13627,132],{"class":124},[118,13629,1402],{"class":5221},[118,13631,13569],{"class":124},[118,13633,2042],{"class":177},[118,13635,12440],{"class":128},[118,13637,132],{"class":124},[118,13639,2837],{"class":5221},[118,13641,13569],{"class":124},[118,13643,2042],{"class":177},[118,13645,2723],{"class":128},[118,13647,13648,13650,13652,13654,13656,13658,13660,13662,13664],{"class":120,"line":1315},[118,13649,132],{"class":124},[118,13651,13623],{"class":1967},[118,13653,129],{"class":128},[118,13655,132],{"class":124},[118,13657,1402],{"class":5221},[118,13659,12440],{"class":128},[118,13661,132],{"class":124},[118,13663,2837],{"class":5221},[118,13665,12447],{"class":128},[118,13667,13668,13670,13672,13674],{"class":120,"line":1321},[118,13669,4094],{"class":124},[118,13671,10874],{"class":128},[118,13673,609],{"class":124},[118,13675,12468],{"class":128},[118,13677,13678],{"class":120,"line":1333},[118,13679,1569],{"class":128},[118,13681,13682],{"class":120,"line":1616},[118,13683,2404],{"emptyLinePlaceholder":45},[118,13685,13686,13688,13690],{"class":120,"line":1621},[118,13687,132],{"class":124},[118,13689,1977],{"class":1967},[118,13691,10858],{"class":128},[118,13693,13694],{"class":120,"line":1627},[118,13695,2404],{"emptyLinePlaceholder":45},[118,13697,13698,13700,13702,13705,13707,13709,13711,13713,13715,13717,13720,13722],{"class":120,"line":1632},[118,13699,6534],{"class":128},[118,13701,1172],{"class":124},[118,13703,13704],{"class":233}," \"ret = \"",[118,13706,1448],{"class":124},[118,13708,11390],{"class":1967},[118,13710,129],{"class":128},[118,13712,828],{"class":177},[118,13714,12440],{"class":128},[118,13716,828],{"class":177},[118,13718,13719],{"class":128},") ",[118,13721,1172],{"class":124},[118,13723,8845],{"class":128},[118,13725,13726,13728,13730,13732,13734,13736,13738,13740,13742,13744],{"class":120,"line":1646},[118,13727,6534],{"class":128},[118,13729,1172],{"class":124},[118,13731,13704],{"class":233},[118,13733,1448],{"class":124},[118,13735,11390],{"class":1967},[118,13737,129],{"class":128},[118,13739,439],{"class":177},[118,13741,13719],{"class":128},[118,13743,1172],{"class":124},[118,13745,8845],{"class":128},[118,13747,13748],{"class":120,"line":1651},[118,13749,2404],{"emptyLinePlaceholder":45},[118,13751,13752,13754,13756,13758],{"class":120,"line":1657},[118,13753,2307],{"class":1967},[118,13755,129],{"class":128},[118,13757,2312],{"class":233},[118,13759,2723],{"class":128},[118,13761,13762],{"class":120,"line":1678},[118,13763,2404],{"emptyLinePlaceholder":45},[118,13765,13766,13768,13770],{"class":120,"line":1683},[118,13767,4094],{"class":124},[118,13769,4097],{"class":177},[118,13771,1294],{"class":128},[118,13773,13774],{"class":120,"line":1697},[118,13775,1569],{"class":128},[15,13777,11337],{},[72,13779,13780,13783,13786],{},[75,13781,13782],{},"我传就用我；没传就用你",[75,13784,13785],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[75,13787,13788],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[60,13790,13792],{"id":13791},"_72函数的占位参数","7.2函数的占位参数",[15,13794,13795],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[15,13797,13798,13800,13801],{},[278,13799,5186],{}," ",[115,13802,13803],{},"返回值类型 函数名 (数据类型){}",[109,13805,13807],{"className":111,"code":13806,"language":113,"meta":39,"style":39},"\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",[115,13808,13809,13814,13832,13845,13849,13857,13861,13878,13882,13892,13896,13904],{"__ignoreMap":39},[118,13810,13811],{"class":120,"line":121},[118,13812,13813],{"class":187},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[118,13815,13816,13818,13820,13822,13824,13826,13828,13830],{"class":120,"line":40},[118,13817,5369],{"class":124},[118,13819,11390],{"class":1967},[118,13821,129],{"class":128},[118,13823,132],{"class":124},[118,13825,1402],{"class":5221},[118,13827,12440],{"class":128},[118,13829,132],{"class":124},[118,13831,12447],{"class":128},[118,13833,13834,13836,13838,13841,13843],{"class":120,"line":1183},[118,13835,6534],{"class":128},[118,13837,1172],{"class":124},[118,13839,13840],{"class":233}," \"this is func\"",[118,13842,1448],{"class":124},[118,13844,8845],{"class":128},[118,13846,13847],{"class":120,"line":1198},[118,13848,1569],{"class":128},[118,13850,13851,13853,13855],{"class":120,"line":1204},[118,13852,132],{"class":124},[118,13854,1977],{"class":1967},[118,13856,10858],{"class":128},[118,13858,13859],{"class":120,"line":1218},[118,13860,2404],{"emptyLinePlaceholder":45},[118,13862,13863,13865,13867,13869,13871,13873,13875],{"class":120,"line":1224},[118,13864,13290],{"class":1967},[118,13866,129],{"class":128},[118,13868,574],{"class":177},[118,13870,506],{"class":128},[118,13872,574],{"class":177},[118,13874,5971],{"class":128},[118,13876,13877],{"class":187}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[118,13879,13880],{"class":120,"line":1315},[118,13881,2404],{"emptyLinePlaceholder":45},[118,13883,13884,13886,13888,13890],{"class":120,"line":1321},[118,13885,2307],{"class":1967},[118,13887,129],{"class":128},[118,13889,2312],{"class":233},[118,13891,2723],{"class":128},[118,13893,13894],{"class":120,"line":1333},[118,13895,2404],{"emptyLinePlaceholder":45},[118,13897,13898,13900,13902],{"class":120,"line":1616},[118,13899,4094],{"class":124},[118,13901,4097],{"class":177},[118,13903,1294],{"class":128},[118,13905,13906],{"class":120,"line":1621},[118,13907,1569],{"class":128},[15,13909,13910],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[60,13912,13914],{"id":13913},"_73函数重载","7.3函数重载",[15,13916,13917],{},"意思是函数名是可以相同的",[89,13919,13921],{"id":13920},"_731基本语法","7.3.1基本语法",[15,13923,13924],{},"作用：函数名可以相同，提高复用性",[15,13926,13927],{},[278,13928,13929],{},"函数重载满足条件：",[1135,13931,13932,13935,13938],{},[75,13933,13934],{},"同一个作用域下",[75,13936,13937],{},"函数名称相同",[75,13939,13940,13941,13944,13945,13948,13949],{},"函数参数",[278,13942,13943],{},"类型不同","  或者 ",[278,13946,13947],{},"个数不同"," 或者 ",[278,13950,13951],{},"顺序不同",[15,13953,13954,13957],{},[278,13955,13956],{},"注意:","  函数的返回值不可以作为函数重载的条件",[109,13959,13961],{"className":9946,"code":13960,"language":9948,"meta":39,"style":39},"\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",[115,13962,13963,13968,13976,13980,13993,13997,14011,14015,14028,14032,14047,14051,14064,14068,14089,14093,14106,14110,14130,14134,14147,14151,14155,14160,14165,14170,14175,14180,14184,14188,14196,14200,14206,14216,14226,14240,14255,14259,14269,14273,14281],{"__ignoreMap":39},[118,13964,13965],{"class":120,"line":121},[118,13966,13967],{"class":187},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[118,13969,13970,13972,13974],{"class":120,"line":40},[118,13971,5369],{"class":124},[118,13973,11390],{"class":1967},[118,13975,1980],{"class":128},[118,13977,13978],{"class":120,"line":1183},[118,13979,1550],{"class":128},[118,13981,13982,13984,13986,13989,13991],{"class":120,"line":1198},[118,13983,6534],{"class":128},[118,13985,1172],{"class":124},[118,13987,13988],{"class":233}," \"func 的调用！\"",[118,13990,1448],{"class":124},[118,13992,8845],{"class":128},[118,13994,13995],{"class":120,"line":1204},[118,13996,1569],{"class":128},[118,13998,13999,14001,14003,14005,14007,14009],{"class":120,"line":1218},[118,14000,5369],{"class":124},[118,14002,11390],{"class":1967},[118,14004,129],{"class":128},[118,14006,132],{"class":124},[118,14008,1402],{"class":5221},[118,14010,135],{"class":128},[118,14012,14013],{"class":120,"line":1224},[118,14014,1550],{"class":128},[118,14016,14017,14019,14021,14024,14026],{"class":120,"line":1315},[118,14018,6534],{"class":128},[118,14020,1172],{"class":124},[118,14022,14023],{"class":233}," \"func (int a) 的调用！\"",[118,14025,1448],{"class":124},[118,14027,8845],{"class":128},[118,14029,14030],{"class":120,"line":1321},[118,14031,1569],{"class":128},[118,14033,14034,14036,14038,14040,14043,14045],{"class":120,"line":1333},[118,14035,5369],{"class":124},[118,14037,11390],{"class":1967},[118,14039,129],{"class":128},[118,14041,14042],{"class":124},"double",[118,14044,1402],{"class":5221},[118,14046,135],{"class":128},[118,14048,14049],{"class":120,"line":1616},[118,14050,1550],{"class":128},[118,14052,14053,14055,14057,14060,14062],{"class":120,"line":1621},[118,14054,6534],{"class":128},[118,14056,1172],{"class":124},[118,14058,14059],{"class":233}," \"func (double a)的调用！\"",[118,14061,1448],{"class":124},[118,14063,8845],{"class":128},[118,14065,14066],{"class":120,"line":1627},[118,14067,1569],{"class":128},[118,14069,14070,14072,14074,14076,14078,14080,14083,14085,14087],{"class":120,"line":1632},[118,14071,5369],{"class":124},[118,14073,11390],{"class":1967},[118,14075,129],{"class":128},[118,14077,132],{"class":124},[118,14079,1402],{"class":5221},[118,14081,14082],{"class":128}," ,",[118,14084,14042],{"class":124},[118,14086,2837],{"class":5221},[118,14088,135],{"class":128},[118,14090,14091],{"class":120,"line":1646},[118,14092,1550],{"class":128},[118,14094,14095,14097,14099,14102,14104],{"class":120,"line":1651},[118,14096,6534],{"class":128},[118,14098,1172],{"class":124},[118,14100,14101],{"class":233}," \"func (int a ,double b) 的调用！\"",[118,14103,1448],{"class":124},[118,14105,8845],{"class":128},[118,14107,14108],{"class":120,"line":1657},[118,14109,1569],{"class":128},[118,14111,14112,14114,14116,14118,14120,14122,14124,14126,14128],{"class":120,"line":1678},[118,14113,5369],{"class":124},[118,14115,11390],{"class":1967},[118,14117,129],{"class":128},[118,14119,14042],{"class":124},[118,14121,1402],{"class":5221},[118,14123,14082],{"class":128},[118,14125,132],{"class":124},[118,14127,2837],{"class":5221},[118,14129,135],{"class":128},[118,14131,14132],{"class":120,"line":1683},[118,14133,1550],{"class":128},[118,14135,14136,14138,14140,14143,14145],{"class":120,"line":1697},[118,14137,6534],{"class":128},[118,14139,1172],{"class":124},[118,14141,14142],{"class":233}," \"func (double a ,int b)的调用！\"",[118,14144,1448],{"class":124},[118,14146,8845],{"class":128},[118,14148,14149],{"class":120,"line":1702},[118,14150,1569],{"class":128},[118,14152,14153],{"class":120,"line":1731},[118,14154,2404],{"emptyLinePlaceholder":45},[118,14156,14157],{"class":120,"line":1736},[118,14158,14159],{"class":187},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[118,14161,14162],{"class":120,"line":1753},[118,14163,14164],{"class":187},"\u002F\u002Fint func(double a, int b)\n",[118,14166,14167],{"class":120,"line":1758},[118,14168,14169],{"class":187},"\u002F\u002F{\n",[118,14171,14172],{"class":120,"line":1763},[118,14173,14174],{"class":187},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[118,14176,14177],{"class":120,"line":1768},[118,14178,14179],{"class":187},"\u002F\u002F}\n",[118,14181,14182],{"class":120,"line":1782},[118,14183,2404],{"emptyLinePlaceholder":45},[118,14185,14186],{"class":120,"line":1787},[118,14187,2404],{"emptyLinePlaceholder":45},[118,14189,14190,14192,14194],{"class":120,"line":2581},[118,14191,132],{"class":124},[118,14193,1977],{"class":1967},[118,14195,10858],{"class":128},[118,14197,14198],{"class":120,"line":2595},[118,14199,2404],{"emptyLinePlaceholder":45},[118,14201,14202,14204],{"class":120,"line":2603},[118,14203,13290],{"class":1967},[118,14205,5641],{"class":128},[118,14207,14208,14210,14212,14214],{"class":120,"line":2608},[118,14209,13290],{"class":1967},[118,14211,129],{"class":128},[118,14213,574],{"class":177},[118,14215,2723],{"class":128},[118,14217,14218,14220,14222,14224],{"class":120,"line":2614},[118,14219,13290],{"class":1967},[118,14221,129],{"class":128},[118,14223,178],{"class":177},[118,14225,2723],{"class":128},[118,14227,14228,14230,14232,14234,14236,14238],{"class":120,"line":2620},[118,14229,13290],{"class":1967},[118,14231,129],{"class":128},[118,14233,574],{"class":177},[118,14235,506],{"class":128},[118,14237,178],{"class":177},[118,14239,2723],{"class":128},[118,14241,14242,14244,14246,14248,14251,14253],{"class":120,"line":2625},[118,14243,13290],{"class":1967},[118,14245,129],{"class":128},[118,14247,178],{"class":177},[118,14249,14250],{"class":128}," , ",[118,14252,574],{"class":177},[118,14254,2723],{"class":128},[118,14256,14257],{"class":120,"line":7953},[118,14258,13215],{"class":128},[118,14260,14261,14263,14265,14267],{"class":120,"line":7977},[118,14262,2307],{"class":1967},[118,14264,129],{"class":128},[118,14266,2312],{"class":233},[118,14268,2723],{"class":128},[118,14270,14271],{"class":120,"line":7982},[118,14272,2404],{"emptyLinePlaceholder":45},[118,14274,14275,14277,14279],{"class":120,"line":7988},[118,14276,4094],{"class":124},[118,14278,4097],{"class":177},[118,14280,1294],{"class":128},[118,14282,14283],{"class":120,"line":8015},[118,14284,1569],{"class":128},[15,14286,14287],{},"重点：函数返回值不可以作为函数重载条件！",[89,14289,14291],{"id":14290},"_732注意事项","7.3.2注意事项",[1135,14293,14294,14297],{},[75,14295,14296],{},"引用作为重载条件!!!",[75,14298,14299],{},"函数重载碰到函数默认参数",[109,14301,14303],{"className":111,"code":14302,"language":113,"meta":39,"style":39},"\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",[115,14304,14305,14310,14315,14319,14335,14339,14352,14356,14360,14378,14382,14395,14399,14403,14407,14412,14416,14440,14444,14457,14461,14465,14479,14483,14496,14500,14504,14512,14516,14528,14538,14551,14555,14559,14567,14571,14581,14585,14593],{"__ignoreMap":39},[118,14306,14307],{"class":120,"line":121},[118,14308,14309],{"class":187},"\u002F\u002F函数重载注意事项\n",[118,14311,14312],{"class":120,"line":40},[118,14313,14314],{"class":187},"\u002F\u002F1、引用作为重载条件\n",[118,14316,14317],{"class":120,"line":1183},[118,14318,2404],{"emptyLinePlaceholder":45},[118,14320,14321,14323,14325,14327,14329,14331,14333],{"class":120,"line":1198},[118,14322,5369],{"class":124},[118,14324,11390],{"class":1967},[118,14326,129],{"class":128},[118,14328,132],{"class":124},[118,14330,10589],{"class":124},[118,14332,21],{"class":5221},[118,14334,135],{"class":128},[118,14336,14337],{"class":120,"line":1204},[118,14338,1550],{"class":128},[118,14340,14341,14343,14345,14348,14350],{"class":120,"line":1218},[118,14342,6534],{"class":128},[118,14344,1172],{"class":124},[118,14346,14347],{"class":233}," \"func (int &a) 调用 \"",[118,14349,1448],{"class":124},[118,14351,8845],{"class":128},[118,14353,14354],{"class":120,"line":1224},[118,14355,1569],{"class":128},[118,14357,14358],{"class":120,"line":1315},[118,14359,2404],{"emptyLinePlaceholder":45},[118,14361,14362,14364,14366,14368,14370,14372,14374,14376],{"class":120,"line":1321},[118,14363,5369],{"class":124},[118,14365,11390],{"class":1967},[118,14367,129],{"class":128},[118,14369,6797],{"class":124},[118,14371,2386],{"class":124},[118,14373,10589],{"class":124},[118,14375,21],{"class":5221},[118,14377,135],{"class":128},[118,14379,14380],{"class":120,"line":1333},[118,14381,1550],{"class":128},[118,14383,14384,14386,14388,14391,14393],{"class":120,"line":1616},[118,14385,6534],{"class":128},[118,14387,1172],{"class":124},[118,14389,14390],{"class":233}," \"func (const int &a) 调用 \"",[118,14392,1448],{"class":124},[118,14394,8845],{"class":128},[118,14396,14397],{"class":120,"line":1621},[118,14398,1569],{"class":128},[118,14400,14401],{"class":120,"line":1627},[118,14402,2404],{"emptyLinePlaceholder":45},[118,14404,14405],{"class":120,"line":1632},[118,14406,2404],{"emptyLinePlaceholder":45},[118,14408,14409],{"class":120,"line":1646},[118,14410,14411],{"class":187},"\u002F\u002F2、函数重载碰到函数默认参数\n",[118,14413,14414],{"class":120,"line":1651},[118,14415,2404],{"emptyLinePlaceholder":45},[118,14417,14418,14420,14422,14424,14426,14428,14430,14432,14434,14436,14438],{"class":120,"line":1657},[118,14419,5369],{"class":124},[118,14421,13623],{"class":1967},[118,14423,129],{"class":128},[118,14425,132],{"class":124},[118,14427,1402],{"class":5221},[118,14429,12440],{"class":128},[118,14431,132],{"class":124},[118,14433,2837],{"class":5221},[118,14435,13569],{"class":124},[118,14437,2042],{"class":177},[118,14439,135],{"class":128},[118,14441,14442],{"class":120,"line":1678},[118,14443,1550],{"class":128},[118,14445,14446,14448,14450,14453,14455],{"class":120,"line":1683},[118,14447,6534],{"class":128},[118,14449,1172],{"class":124},[118,14451,14452],{"class":233}," \"func2(int a, int b = 10) 调用\"",[118,14454,1448],{"class":124},[118,14456,8845],{"class":128},[118,14458,14459],{"class":120,"line":1697},[118,14460,1569],{"class":128},[118,14462,14463],{"class":120,"line":1702},[118,14464,2404],{"emptyLinePlaceholder":45},[118,14466,14467,14469,14471,14473,14475,14477],{"class":120,"line":1731},[118,14468,5369],{"class":124},[118,14470,13623],{"class":1967},[118,14472,129],{"class":128},[118,14474,132],{"class":124},[118,14476,1402],{"class":5221},[118,14478,135],{"class":128},[118,14480,14481],{"class":120,"line":1736},[118,14482,1550],{"class":128},[118,14484,14485,14487,14489,14492,14494],{"class":120,"line":1753},[118,14486,6534],{"class":128},[118,14488,1172],{"class":124},[118,14490,14491],{"class":233}," \"func2(int a) 调用\"",[118,14493,1448],{"class":124},[118,14495,8845],{"class":128},[118,14497,14498],{"class":120,"line":1758},[118,14499,1569],{"class":128},[118,14501,14502],{"class":120,"line":1763},[118,14503,2404],{"emptyLinePlaceholder":45},[118,14505,14506,14508,14510],{"class":120,"line":1768},[118,14507,132],{"class":124},[118,14509,1977],{"class":1967},[118,14511,10858],{"class":128},[118,14513,14514],{"class":120,"line":1782},[118,14515,13215],{"class":128},[118,14517,14518,14520,14522,14524,14526],{"class":120,"line":1787},[118,14519,1989],{"class":124},[118,14521,10874],{"class":128},[118,14523,174],{"class":124},[118,14525,2042],{"class":177},[118,14527,1294],{"class":128},[118,14529,14530,14532,14535],{"class":120,"line":2581},[118,14531,13290],{"class":1967},[118,14533,14534],{"class":128},"(a);",[118,14536,14537],{"class":187}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[118,14539,14540,14542,14544,14546,14548],{"class":120,"line":2595},[118,14541,13290],{"class":1967},[118,14543,129],{"class":128},[118,14545,574],{"class":177},[118,14547,5971],{"class":128},[118,14549,14550],{"class":187},"\u002F\u002F调用有const   10是个常量\n",[118,14552,14553],{"class":120,"line":2603},[118,14554,2404],{"emptyLinePlaceholder":45},[118,14556,14557],{"class":120,"line":2608},[118,14558,2404],{"emptyLinePlaceholder":45},[118,14560,14561,14564],{"class":120,"line":2614},[118,14562,14563],{"class":187},"    \u002F\u002Ffunc2(10);",[118,14565,14566],{"class":187}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[118,14568,14569],{"class":120,"line":2620},[118,14570,2404],{"emptyLinePlaceholder":45},[118,14572,14573,14575,14577,14579],{"class":120,"line":2625},[118,14574,2307],{"class":1967},[118,14576,129],{"class":128},[118,14578,2312],{"class":233},[118,14580,2723],{"class":128},[118,14582,14583],{"class":120,"line":7953},[118,14584,2404],{"emptyLinePlaceholder":45},[118,14586,14587,14589,14591],{"class":120,"line":7977},[118,14588,4094],{"class":124},[118,14590,4097],{"class":177},[118,14592,1294],{"class":128},[118,14594,14595],{"class":120,"line":7982},[118,14596,1569],{"class":128},[5131,14598,14599],{},"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":39,"searchDepth":40,"depth":40,"links":14601},[14602,14603,14604],{"id":13534,"depth":40,"text":13535},{"id":13791,"depth":40,"text":13792},{"id":13913,"depth":40,"text":13914,"children":14605},[14606,14607],{"id":13920,"depth":1183,"text":13921},{"id":14290,"depth":1183,"text":14291},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13526,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14614,"title":14615,"body":14616,"description":23370,"extension":43,"meta":23371,"navigation":45,"path":23372,"seo":23373,"stem":23374,"__hash__":23375},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14617,"toc":23351},[14618,14621,14627,14634,14639,14642,14645,14648,14652,14656,14659,14662,14670,14675,14678,14685,14690,14849,14852,15105,15108,15111,15114,15119,15122,15125,15136,15141,15377,15381,15391,15394,15402,15549,15553,15556,15559,15563,16008,16012,16020,16028,16940,16947,16952,17580,17583,17586,17589,17708,17711,17798,17801,17927,17930,18024,18027,18380,18384,18392,18396,18403,18406,18409,18420,18426,18431,18443,18451,18471,18479,18496,18682,18685,18689,18692,18695,18698,18701,18704,18707,18710,19170,19176,19180,19183,19194,19781,19784,20273,20277,20280,20283,20286,20289,20292,20300,20696,20700,20703,20706,21153,21156,21159,21164,21167,21172,21175,21179,21182,21184,21190,21193,21499,21509,21550,21554,21557,21559,21592,21595,21902,21904,21919,21922,21945,21954,21960,21963,21967,21970,21973,21978,21989,21994,22002,22007,22137,22140,22143,22318,22323,22535,22539,22542,22656,22661,22900,22904,22908,22911,22914,22919,23024,23027,23030,23033,23037,23148,23151,23154,23159,23211,23214,23217,23222,23268,23271,23276,23344,23346,23349],[10,14619,14615],{"id":14620},"_8类和对象",[15,14622,14623,14624],{},"C++面向对象的三大特性为",[278,14625,14626],{},"封装、继承、多态",[15,14628,14629,14630,14633],{},"C++认为",[278,14631,14632],{},"万事万物都皆为对象","，对象上有其属性和行为",[15,14635,14636],{},[278,14637,14638],{},"例如：",[15,14640,14641],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[15,14643,14644],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[15,14646,14647],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[60,14649,14651],{"id":14650},"_81封装","8.1封装",[89,14653,14655],{"id":14654},"_811封装的意义","8.1.1封装的意义",[15,14657,14658],{},"封装是C++面向对象三大特性之一",[15,14660,14661],{},"封装的意义：",[1135,14663,14664,14667],{},[75,14665,14666],{},"将属性和行为作为一个整体，表现生活中的事物",[75,14668,14669],{},"将属性和行为加以权限控制",[15,14671,14672],{},[278,14673,14674],{},"封装意义一：",[15,14676,14677],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[15,14679,14680,13800,14682],{},[278,14681,5186],{},[115,14683,14684],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[72,14686,14687],{},[75,14688,14689],{},"**示例1：**设计一个圆类，求圆的周长",[109,14691,14693],{"className":111,"code":14692,"language":113,"meta":39,"style":39},"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",[115,14694,14695,14703,14707,14712,14717,14722,14727,14734,14739,14749,14753,14771,14775,14779,14787,14791,14796,14801,14806,14811,14822,14845],{"__ignoreMap":39},[118,14696,14697,14700],{"class":120,"line":121},[118,14698,14699],{"class":124},"class",[118,14701,14702],{"class":1967}," Circle\n",[118,14704,14705],{"class":120,"line":40},[118,14706,1550],{"class":128},[118,14708,14709],{"class":120,"line":1183},[118,14710,14711],{"class":187},"    \u002F\u002F访问权限\n",[118,14713,14714],{"class":120,"line":1198},[118,14715,14716],{"class":187},"    \u002F\u002F公共权限\n",[118,14718,14719],{"class":120,"line":1204},[118,14720,14721],{"class":124},"public:\n",[118,14723,14724],{"class":120,"line":1218},[118,14725,14726],{"class":187},"    \u002F\u002F属性\n",[118,14728,14729,14731],{"class":120,"line":1224},[118,14730,1989],{"class":124},[118,14732,14733],{"class":128}," m_r;\n",[118,14735,14736],{"class":120,"line":1315},[118,14737,14738],{"class":187},"    \u002F\u002F行为\n",[118,14740,14741,14744,14747],{"class":120,"line":1321},[118,14742,14743],{"class":124},"    double",[118,14745,14746],{"class":1967}," calculateZC",[118,14748,1980],{"class":128},[118,14750,14751],{"class":120,"line":1333},[118,14752,2034],{"class":128},[118,14754,14755,14758,14761,14763,14766,14768],{"class":120,"line":1616},[118,14756,14757],{"class":124},"        return",[118,14759,14760],{"class":177}," 2",[118,14762,583],{"class":124},[118,14764,14765],{"class":128},"PI",[118,14767,583],{"class":124},[118,14769,14770],{"class":128},"m_r;\n",[118,14772,14773],{"class":120,"line":1621},[118,14774,2191],{"class":128},[118,14776,14777],{"class":120,"line":1627},[118,14778,3999],{"class":128},[118,14780,14781,14783,14785],{"class":120,"line":1632},[118,14782,132],{"class":124},[118,14784,1977],{"class":1967},[118,14786,1980],{"class":128},[118,14788,14789],{"class":120,"line":1646},[118,14790,1550],{"class":128},[118,14792,14793],{"class":120,"line":1651},[118,14794,14795],{"class":187},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[118,14797,14798],{"class":120,"line":1657},[118,14799,14800],{"class":187},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[118,14802,14803],{"class":120,"line":1678},[118,14804,14805],{"class":128},"    Circle c1;\n",[118,14807,14808],{"class":120,"line":1683},[118,14809,14810],{"class":187},"    \u002F\u002F给圆对象 的属性进行赋值\n",[118,14812,14813,14816,14818,14820],{"class":120,"line":1697},[118,14814,14815],{"class":128},"    c1.m_r",[118,14817,174],{"class":124},[118,14819,574],{"class":177},[118,14821,1294],{"class":128},[118,14823,14824,14826,14828,14831,14833,14836,14839,14841,14843],{"class":120,"line":1702},[118,14825,1555],{"class":128},[118,14827,1172],{"class":124},[118,14829,14830],{"class":233},"\"圆的周长\"",[118,14832,1172],{"class":124},[118,14834,14835],{"class":128},"c1.",[118,14837,14838],{"class":1967},"calculateZC",[118,14840,2431],{"class":128},[118,14842,1172],{"class":124},[118,14844,1195],{"class":128},[118,14846,14847],{"class":120,"line":1731},[118,14848,1569],{"class":128},[15,14850,14851],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[109,14853,14855],{"className":111,"code":14854,"language":113,"meta":39,"style":39},"#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",[115,14856,14857,14863,14873,14879,14885,14889,14893,14898,14905,14910,14928,14932,14942,14946,14951,14967,14971,14981,14985,14990,14998,15002,15034,15038,15042,15050,15054,15059,15064,15078,15092,15101],{"__ignoreMap":39},[118,14858,14859,14861],{"class":120,"line":121},[118,14860,1953],{"class":124},[118,14862,1956],{"class":233},[118,14864,14865,14867,14869,14871],{"class":120,"line":40},[118,14866,1961],{"class":124},[118,14868,1964],{"class":124},[118,14870,1968],{"class":1967},[118,14872,1294],{"class":128},[118,14874,14875,14877],{"class":120,"line":1183},[118,14876,1953],{"class":124},[118,14878,7754],{"class":233},[118,14880,14881,14883],{"class":120,"line":1198},[118,14882,14699],{"class":124},[118,14884,7767],{"class":1967},[118,14886,14887],{"class":120,"line":1204},[118,14888,1550],{"class":128},[118,14890,14891],{"class":120,"line":1218},[118,14892,14721],{"class":124},[118,14894,14895],{"class":120,"line":1224},[118,14896,14897],{"class":128},"    string m_name;\n",[118,14899,14900,14902],{"class":120,"line":1315},[118,14901,1989],{"class":124},[118,14903,14904],{"class":128}," m_id;\n",[118,14906,14907],{"class":120,"line":1321},[118,14908,14909],{"class":187},"    \u002F\u002F赋值姓名\n",[118,14911,14912,14915,14918,14920,14923,14926],{"class":120,"line":1333},[118,14913,14914],{"class":124},"    void",[118,14916,14917],{"class":1967}," setName",[118,14919,129],{"class":128},[118,14921,14922],{"class":1967},"string",[118,14924,14925],{"class":5221}," name",[118,14927,135],{"class":128},[118,14929,14930],{"class":120,"line":1616},[118,14931,2034],{"class":128},[118,14933,14934,14937,14939],{"class":120,"line":1621},[118,14935,14936],{"class":128},"        m_name",[118,14938,174],{"class":124},[118,14940,14941],{"class":128},"name;\n",[118,14943,14944],{"class":120,"line":1627},[118,14945,2191],{"class":128},[118,14947,14948],{"class":120,"line":1632},[118,14949,14950],{"class":187},"    \u002F\u002F赋值学号\n",[118,14952,14953,14955,14958,14960,14962,14965],{"class":120,"line":1646},[118,14954,14914],{"class":124},[118,14956,14957],{"class":1967}," setId",[118,14959,129],{"class":128},[118,14961,132],{"class":124},[118,14963,14964],{"class":5221}," id",[118,14966,135],{"class":128},[118,14968,14969],{"class":120,"line":1651},[118,14970,2034],{"class":128},[118,14972,14973,14976,14978],{"class":120,"line":1657},[118,14974,14975],{"class":128},"        m_id",[118,14977,174],{"class":124},[118,14979,14980],{"class":128},"id;\n",[118,14982,14983],{"class":120,"line":1678},[118,14984,2191],{"class":128},[118,14986,14987],{"class":120,"line":1683},[118,14988,14989],{"class":187},"    \u002F\u002F打印学生信息\n",[118,14991,14992,14994,14996],{"class":120,"line":1697},[118,14993,14914],{"class":124},[118,14995,9620],{"class":1967},[118,14997,1980],{"class":128},[118,14999,15000],{"class":120,"line":1702},[118,15001,2034],{"class":128},[118,15003,15004,15006,15008,15011,15013,15016,15018,15020,15022,15025,15027,15030,15032],{"class":120,"line":1731},[118,15005,3455],{"class":128},[118,15007,1172],{"class":124},[118,15009,15010],{"class":233},"\"姓名：\"",[118,15012,1172],{"class":124},[118,15014,15015],{"class":128},"m_name",[118,15017,1172],{"class":124},[118,15019,4363],{"class":233},[118,15021,1172],{"class":124},[118,15023,15024],{"class":233},"\"学号：\"",[118,15026,1172],{"class":124},[118,15028,15029],{"class":128},"m_id",[118,15031,1172],{"class":124},[118,15033,1195],{"class":128},[118,15035,15036],{"class":120,"line":1736},[118,15037,2191],{"class":128},[118,15039,15040],{"class":120,"line":1753},[118,15041,3999],{"class":128},[118,15043,15044,15046,15048],{"class":120,"line":1758},[118,15045,132],{"class":124},[118,15047,1977],{"class":1967},[118,15049,1980],{"class":128},[118,15051,15052],{"class":120,"line":1763},[118,15053,1550],{"class":128},[118,15055,15056],{"class":120,"line":1768},[118,15057,15058],{"class":187},"    \u002F\u002F实例化\n",[118,15060,15061],{"class":120,"line":1782},[118,15062,15063],{"class":128},"    Student s1;\n",[118,15065,15066,15069,15072,15074,15076],{"class":120,"line":1787},[118,15067,15068],{"class":128},"    s1.",[118,15070,15071],{"class":1967},"setName",[118,15073,129],{"class":128},[118,15075,7921],{"class":233},[118,15077,2723],{"class":128},[118,15079,15080,15082,15085,15087,15090],{"class":120,"line":2581},[118,15081,15068],{"class":128},[118,15083,15084],{"class":1967},"setId",[118,15086,129],{"class":128},[118,15088,15089],{"class":177},"123456",[118,15091,2723],{"class":128},[118,15093,15094,15096,15099],{"class":120,"line":2595},[118,15095,15068],{"class":128},[118,15097,15098],{"class":1967},"printInfo",[118,15100,5641],{"class":128},[118,15102,15103],{"class":120,"line":2603},[118,15104,1569],{"class":128},[15,15106,15107],{},"类中的属性和行为统称为成员",[15,15109,15110],{},"属性：成员属性(成员变量)",[15,15112,15113],{},"方法：成员函数(成员方法)",[15,15115,15116],{},[278,15117,15118],{},"封装意义二：",[15,15120,15121],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[15,15123,15124],{},"访问权限有三种：",[72,15126,15127,15130,15133],{},[75,15128,15129],{},"public        公共权限",[75,15131,15132],{},"protected 保护权限",[75,15134,15135],{},"private      私有权限",[15,15137,15138],{},[278,15139,15140],{},"示例：",[109,15142,15144],{"className":9946,"code":15143,"language":9948,"meta":39,"style":39},"\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",[115,15145,15146,15151,15156,15161,15166,15170,15177,15181,15186,15190,15195,15199,15204,15209,15214,15218,15223,15228,15235,15239,15243,15251,15255,15266,15278,15290,15294,15298,15302,15310,15314,15319,15331,15339,15347,15351,15361,15365,15373],{"__ignoreMap":39},[118,15147,15148],{"class":120,"line":121},[118,15149,15150],{"class":187},"\u002F\u002F三种权限\n",[118,15152,15153],{"class":120,"line":40},[118,15154,15155],{"class":187},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[118,15157,15158],{"class":120,"line":1183},[118,15159,15160],{"class":187},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[118,15162,15163],{"class":120,"line":1198},[118,15164,15165],{"class":187},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[118,15167,15168],{"class":120,"line":1204},[118,15169,2404],{"emptyLinePlaceholder":45},[118,15171,15172,15174],{"class":120,"line":1218},[118,15173,14699],{"class":124},[118,15175,15176],{"class":1967}," Person\n",[118,15178,15179],{"class":120,"line":1224},[118,15180,1550],{"class":128},[118,15182,15183],{"class":120,"line":1315},[118,15184,15185],{"class":187},"    \u002F\u002F姓名  公共权限\n",[118,15187,15188],{"class":120,"line":1321},[118,15189,14721],{"class":124},[118,15191,15192],{"class":120,"line":1333},[118,15193,15194],{"class":128},"    string m_Name;\n",[118,15196,15197],{"class":120,"line":1616},[118,15198,2404],{"emptyLinePlaceholder":45},[118,15200,15201],{"class":120,"line":1621},[118,15202,15203],{"class":187},"    \u002F\u002F汽车  保护权限\n",[118,15205,15206],{"class":120,"line":1627},[118,15207,15208],{"class":124},"protected:\n",[118,15210,15211],{"class":120,"line":1632},[118,15212,15213],{"class":128},"    string m_Car;\n",[118,15215,15216],{"class":120,"line":1646},[118,15217,2404],{"emptyLinePlaceholder":45},[118,15219,15220],{"class":120,"line":1651},[118,15221,15222],{"class":187},"    \u002F\u002F银行卡密码  私有权限\n",[118,15224,15225],{"class":120,"line":1657},[118,15226,15227],{"class":124},"private:\n",[118,15229,15230,15232],{"class":120,"line":1678},[118,15231,1989],{"class":124},[118,15233,15234],{"class":128}," m_Password;\n",[118,15236,15237],{"class":120,"line":1683},[118,15238,2404],{"emptyLinePlaceholder":45},[118,15240,15241],{"class":120,"line":1697},[118,15242,14721],{"class":124},[118,15244,15245,15247,15249],{"class":120,"line":1702},[118,15246,14914],{"class":124},[118,15248,11390],{"class":1967},[118,15250,1980],{"class":128},[118,15252,15253],{"class":120,"line":1731},[118,15254,2034],{"class":128},[118,15256,15257,15260,15262,15264],{"class":120,"line":1736},[118,15258,15259],{"class":128},"        m_Name ",[118,15261,174],{"class":124},[118,15263,8943],{"class":233},[118,15265,1294],{"class":128},[118,15267,15268,15271,15273,15276],{"class":120,"line":1753},[118,15269,15270],{"class":128},"        m_Car ",[118,15272,174],{"class":124},[118,15274,15275],{"class":233}," \"拖拉机\"",[118,15277,1294],{"class":128},[118,15279,15280,15283,15285,15288],{"class":120,"line":1758},[118,15281,15282],{"class":128},"        m_Password ",[118,15284,174],{"class":124},[118,15286,15287],{"class":177}," 123456",[118,15289,1294],{"class":128},[118,15291,15292],{"class":120,"line":1763},[118,15293,2191],{"class":128},[118,15295,15296],{"class":120,"line":1768},[118,15297,3999],{"class":128},[118,15299,15300],{"class":120,"line":1782},[118,15301,2404],{"emptyLinePlaceholder":45},[118,15303,15304,15306,15308],{"class":120,"line":1787},[118,15305,132],{"class":124},[118,15307,1977],{"class":1967},[118,15309,10858],{"class":128},[118,15311,15312],{"class":120,"line":2581},[118,15313,2404],{"emptyLinePlaceholder":45},[118,15315,15316],{"class":120,"line":2595},[118,15317,15318],{"class":128},"    Person p;\n",[118,15320,15321,15324,15326,15329],{"class":120,"line":2603},[118,15322,15323],{"class":128},"    p.m_Name ",[118,15325,174],{"class":124},[118,15327,15328],{"class":233}," \"李四\"",[118,15330,1294],{"class":128},[118,15332,15333,15336],{"class":120,"line":2608},[118,15334,15335],{"class":187},"    \u002F\u002Fp.m_Car = \"奔驰\";",[118,15337,15338],{"class":187},"  \u002F\u002F保护权限类外访问不到\n",[118,15340,15341,15344],{"class":120,"line":2614},[118,15342,15343],{"class":187},"    \u002F\u002Fp.m_Password = 123;",[118,15345,15346],{"class":187}," \u002F\u002F私有权限类外访问不到\n",[118,15348,15349],{"class":120,"line":2620},[118,15350,2404],{"emptyLinePlaceholder":45},[118,15352,15353,15355,15357,15359],{"class":120,"line":2625},[118,15354,2307],{"class":1967},[118,15356,129],{"class":128},[118,15358,2312],{"class":233},[118,15360,2723],{"class":128},[118,15362,15363],{"class":120,"line":7953},[118,15364,2404],{"emptyLinePlaceholder":45},[118,15366,15367,15369,15371],{"class":120,"line":7977},[118,15368,4094],{"class":124},[118,15370,4097],{"class":177},[118,15372,1294],{"class":128},[118,15374,15375],{"class":120,"line":7982},[118,15376,1569],{"class":128},[89,15378,15380],{"id":15379},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[15,15382,15383,15384,15387,15388],{},"在C++中 struct和class唯一的",[278,15385,15386],{},"区别","就在于 ",[278,15389,15390],{},"默认的访问权限不同",[15,15392,15393],{},"区别：",[1135,15395,15396,15399],{},[75,15397,15398],{},"struct 默认权限为公共",[75,15400,15401],{},"class   默认权限为私有",[109,15403,15405],{"className":9946,"code":15404,"language":9948,"meta":39,"style":39},"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",[115,15406,15407,15414,15418,15428,15432,15436,15443,15447,15457,15461,15465,15473,15477,15482,15496,15500,15505,15519,15523,15533,15537,15545],{"__ignoreMap":39},[118,15408,15409,15411],{"class":120,"line":121},[118,15410,14699],{"class":124},[118,15412,15413],{"class":1967}," C1\n",[118,15415,15416],{"class":120,"line":40},[118,15417,1550],{"class":128},[118,15419,15420,15422,15425],{"class":120,"line":1183},[118,15421,1989],{"class":124},[118,15423,15424],{"class":128},"  m_A;",[118,15426,15427],{"class":187}," \u002F\u002F默认是私有权限\n",[118,15429,15430],{"class":120,"line":1198},[118,15431,3999],{"class":128},[118,15433,15434],{"class":120,"line":1204},[118,15435,2404],{"emptyLinePlaceholder":45},[118,15437,15438,15440],{"class":120,"line":1218},[118,15439,7764],{"class":124},[118,15441,15442],{"class":1967}," C2\n",[118,15444,15445],{"class":120,"line":1224},[118,15446,1550],{"class":128},[118,15448,15449,15451,15454],{"class":120,"line":1315},[118,15450,1989],{"class":124},[118,15452,15453],{"class":128}," m_A;",[118,15455,15456],{"class":187},"  \u002F\u002F默认是公共权限\n",[118,15458,15459],{"class":120,"line":1321},[118,15460,3999],{"class":128},[118,15462,15463],{"class":120,"line":1333},[118,15464,2404],{"emptyLinePlaceholder":45},[118,15466,15467,15469,15471],{"class":120,"line":1616},[118,15468,132],{"class":124},[118,15470,1977],{"class":1967},[118,15472,10858],{"class":128},[118,15474,15475],{"class":120,"line":1621},[118,15476,2404],{"emptyLinePlaceholder":45},[118,15478,15479],{"class":120,"line":1627},[118,15480,15481],{"class":128},"    C1 c1;\n",[118,15483,15484,15487,15489,15491,15493],{"class":120,"line":1632},[118,15485,15486],{"class":128},"    c1.m_A ",[118,15488,174],{"class":124},[118,15490,2042],{"class":177},[118,15492,184],{"class":128},[118,15494,15495],{"class":187}," \u002F\u002F错误，访问权限是私有\n",[118,15497,15498],{"class":120,"line":1646},[118,15499,2404],{"emptyLinePlaceholder":45},[118,15501,15502],{"class":120,"line":1651},[118,15503,15504],{"class":128},"    C2 c2;\n",[118,15506,15507,15510,15512,15514,15516],{"class":120,"line":1657},[118,15508,15509],{"class":128},"    c2.m_A ",[118,15511,174],{"class":124},[118,15513,2042],{"class":177},[118,15515,184],{"class":128},[118,15517,15518],{"class":187}," \u002F\u002F正确，访问权限是公共\n",[118,15520,15521],{"class":120,"line":1678},[118,15522,2404],{"emptyLinePlaceholder":45},[118,15524,15525,15527,15529,15531],{"class":120,"line":1683},[118,15526,2307],{"class":1967},[118,15528,129],{"class":128},[118,15530,2312],{"class":233},[118,15532,2723],{"class":128},[118,15534,15535],{"class":120,"line":1697},[118,15536,2404],{"emptyLinePlaceholder":45},[118,15538,15539,15541,15543],{"class":120,"line":1702},[118,15540,4094],{"class":124},[118,15542,4097],{"class":177},[118,15544,1294],{"class":128},[118,15546,15547],{"class":120,"line":1731},[118,15548,1569],{"class":128},[89,15550,15552],{"id":15551},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[15,15554,15555],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[15,15557,15558],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[15,15560,15561],{},[278,15562,15140],{},[109,15564,15566],{"className":9946,"code":15565,"language":9948,"meta":39,"style":39},"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",[115,15567,15568,15578,15582,15586,15591,15605,15614,15618,15628,15632,15639,15643,15647,15651,15656,15665,15672,15676,15681,15697,15720,15733,15740,15744,15753,15757,15761,15766,15782,15792,15796,15800,15804,15812,15816,15826,15830,15838,15842,15846,15854,15858,15862,15867,15880,15903,15907,15912,15925,15947,15951,15956,15970,15978,15982,15992,15996,16004],{"__ignoreMap":39},[118,15569,15570,15572,15575],{"class":120,"line":121},[118,15571,14699],{"class":124},[118,15573,15574],{"class":1967}," Person",[118,15576,15577],{"class":128}," {\n",[118,15579,15580],{"class":120,"line":40},[118,15581,14721],{"class":124},[118,15583,15584],{"class":120,"line":1183},[118,15585,2404],{"emptyLinePlaceholder":45},[118,15587,15588],{"class":120,"line":1198},[118,15589,15590],{"class":187},"    \u002F\u002F姓名设置可读可写\n",[118,15592,15593,15595,15597,15599,15601,15603],{"class":120,"line":1204},[118,15594,14914],{"class":124},[118,15596,14917],{"class":1967},[118,15598,129],{"class":128},[118,15600,14922],{"class":1967},[118,15602,14925],{"class":5221},[118,15604,12447],{"class":128},[118,15606,15607,15609,15611],{"class":120,"line":1218},[118,15608,15259],{"class":128},[118,15610,174],{"class":124},[118,15612,15613],{"class":128}," name;\n",[118,15615,15616],{"class":120,"line":1224},[118,15617,2191],{"class":128},[118,15619,15620,15623,15626],{"class":120,"line":1315},[118,15621,15622],{"class":1967},"    string",[118,15624,15625],{"class":1967}," getName",[118,15627,1980],{"class":128},[118,15629,15630],{"class":120,"line":1321},[118,15631,2034],{"class":128},[118,15633,15634,15636],{"class":120,"line":1333},[118,15635,14757],{"class":124},[118,15637,15638],{"class":128}," m_Name;\n",[118,15640,15641],{"class":120,"line":1616},[118,15642,2191],{"class":128},[118,15644,15645],{"class":120,"line":1621},[118,15646,2404],{"emptyLinePlaceholder":45},[118,15648,15649],{"class":120,"line":1627},[118,15650,2404],{"emptyLinePlaceholder":45},[118,15652,15653],{"class":120,"line":1632},[118,15654,15655],{"class":187},"    \u002F\u002F获取年龄 \n",[118,15657,15658,15660,15663],{"class":120,"line":1646},[118,15659,1989],{"class":124},[118,15661,15662],{"class":1967}," getAge",[118,15664,10858],{"class":128},[118,15666,15667,15669],{"class":120,"line":1651},[118,15668,14757],{"class":124},[118,15670,15671],{"class":128}," m_Age;\n",[118,15673,15674],{"class":120,"line":1657},[118,15675,2191],{"class":128},[118,15677,15678],{"class":120,"line":1678},[118,15679,15680],{"class":187},"    \u002F\u002F设置年龄\n",[118,15682,15683,15685,15688,15690,15692,15695],{"class":120,"line":1683},[118,15684,14914],{"class":124},[118,15686,15687],{"class":1967}," setAge",[118,15689,129],{"class":128},[118,15691,132],{"class":124},[118,15693,15694],{"class":5221}," age",[118,15696,12447],{"class":128},[118,15698,15699,15701,15704,15706,15708,15710,15713,15715,15718],{"class":120,"line":1697},[118,15700,2501],{"class":124},[118,15702,15703],{"class":128}," (age ",[118,15705,1038],{"class":124},[118,15707,4097],{"class":177},[118,15709,3259],{"class":124},[118,15711,15712],{"class":128}," age ",[118,15714,1088],{"class":124},[118,15716,15717],{"class":177}," 150",[118,15719,12447],{"class":128},[118,15721,15722,15724,15726,15729,15731],{"class":120,"line":1702},[118,15723,9724],{"class":128},[118,15725,1172],{"class":124},[118,15727,15728],{"class":233}," \"你个老妖精!\"",[118,15730,1448],{"class":124},[118,15732,8845],{"class":128},[118,15734,15735,15738],{"class":120,"line":1731},[118,15736,15737],{"class":124},"            return",[118,15739,1294],{"class":128},[118,15741,15742],{"class":120,"line":1736},[118,15743,2533],{"class":128},[118,15745,15746,15749,15751],{"class":120,"line":1753},[118,15747,15748],{"class":128},"        m_Age ",[118,15750,174],{"class":124},[118,15752,7802],{"class":128},[118,15754,15755],{"class":120,"line":1758},[118,15756,2191],{"class":128},[118,15758,15759],{"class":120,"line":1763},[118,15760,2404],{"emptyLinePlaceholder":45},[118,15762,15763],{"class":120,"line":1768},[118,15764,15765],{"class":187},"    \u002F\u002F情人设置为只写\n",[118,15767,15768,15770,15773,15775,15777,15780],{"class":120,"line":1782},[118,15769,14914],{"class":124},[118,15771,15772],{"class":1967}," setLover",[118,15774,129],{"class":128},[118,15776,14922],{"class":1967},[118,15778,15779],{"class":5221}," lover",[118,15781,12447],{"class":128},[118,15783,15784,15787,15789],{"class":120,"line":1787},[118,15785,15786],{"class":128},"        m_Lover ",[118,15788,174],{"class":124},[118,15790,15791],{"class":128}," lover;\n",[118,15793,15794],{"class":120,"line":2581},[118,15795,2191],{"class":128},[118,15797,15798],{"class":120,"line":2595},[118,15799,2404],{"emptyLinePlaceholder":45},[118,15801,15802],{"class":120,"line":2603},[118,15803,15227],{"class":124},[118,15805,15806,15809],{"class":120,"line":2608},[118,15807,15808],{"class":128},"    string m_Name;",[118,15810,15811],{"class":187}," \u002F\u002F可读可写  姓名\n",[118,15813,15814],{"class":120,"line":2614},[118,15815,13215],{"class":128},[118,15817,15818,15820,15823],{"class":120,"line":2620},[118,15819,1989],{"class":124},[118,15821,15822],{"class":128}," m_Age;",[118,15824,15825],{"class":187}," \u002F\u002F只读  年龄\n",[118,15827,15828],{"class":120,"line":2625},[118,15829,2404],{"emptyLinePlaceholder":45},[118,15831,15832,15835],{"class":120,"line":7953},[118,15833,15834],{"class":128},"    string m_Lover;",[118,15836,15837],{"class":187}," \u002F\u002F只写  情人\n",[118,15839,15840],{"class":120,"line":7977},[118,15841,3999],{"class":128},[118,15843,15844],{"class":120,"line":7982},[118,15845,2404],{"emptyLinePlaceholder":45},[118,15847,15848,15850,15852],{"class":120,"line":7988},[118,15849,132],{"class":124},[118,15851,1977],{"class":1967},[118,15853,10858],{"class":128},[118,15855,15856],{"class":120,"line":8015},[118,15857,2404],{"emptyLinePlaceholder":45},[118,15859,15860],{"class":120,"line":8020},[118,15861,15318],{"class":128},[118,15863,15864],{"class":120,"line":8026},[118,15865,15866],{"class":187},"    \u002F\u002F姓名设置\n",[118,15868,15869,15872,15874,15876,15878],{"class":120,"line":8038},[118,15870,15871],{"class":128},"    p.",[118,15873,15071],{"class":1967},[118,15875,129],{"class":128},[118,15877,7921],{"class":233},[118,15879,2723],{"class":128},[118,15881,15882,15884,15886,15889,15891,15894,15897,15899,15901],{"class":120,"line":8050},[118,15883,6534],{"class":128},[118,15885,1172],{"class":124},[118,15887,15888],{"class":233}," \"姓名： \"",[118,15890,1448],{"class":124},[118,15892,15893],{"class":128}," p.",[118,15895,15896],{"class":1967},"getName",[118,15898,13055],{"class":128},[118,15900,1172],{"class":124},[118,15902,8845],{"class":128},[118,15904,15905],{"class":120,"line":8062},[118,15906,2404],{"emptyLinePlaceholder":45},[118,15908,15909],{"class":120,"line":9721},[118,15910,15911],{"class":187},"    \u002F\u002F年龄设置\n",[118,15913,15914,15916,15919,15921,15923],{"class":120,"line":9746},[118,15915,15871],{"class":128},[118,15917,15918],{"class":1967},"setAge",[118,15920,129],{"class":128},[118,15922,784],{"class":177},[118,15924,2723],{"class":128},[118,15926,15927,15929,15931,15934,15936,15938,15941,15943,15945],{"class":120,"line":9769},[118,15928,6534],{"class":128},[118,15930,1172],{"class":124},[118,15932,15933],{"class":233}," \"年龄： \"",[118,15935,1448],{"class":124},[118,15937,15893],{"class":128},[118,15939,15940],{"class":1967},"getAge",[118,15942,13055],{"class":128},[118,15944,1172],{"class":124},[118,15946,8845],{"class":128},[118,15948,15949],{"class":120,"line":9793},[118,15950,2404],{"emptyLinePlaceholder":45},[118,15952,15953],{"class":120,"line":9798},[118,15954,15955],{"class":187},"    \u002F\u002F情人设置\n",[118,15957,15958,15960,15963,15965,15968],{"class":120,"line":9803},[118,15959,15871],{"class":128},[118,15961,15962],{"class":1967},"setLover",[118,15964,129],{"class":128},[118,15966,15967],{"class":233},"\"苍井\"",[118,15969,2723],{"class":128},[118,15971,15972,15975],{"class":120,"line":9808},[118,15973,15974],{"class":187},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[118,15976,15977],{"class":187},"  \u002F\u002F只写属性，不可以读取\n",[118,15979,15980],{"class":120,"line":9817},[118,15981,2404],{"emptyLinePlaceholder":45},[118,15983,15984,15986,15988,15990],{"class":120,"line":9822},[118,15985,2307],{"class":1967},[118,15987,129],{"class":128},[118,15989,2312],{"class":233},[118,15991,2723],{"class":128},[118,15993,15994],{"class":120,"line":9828},[118,15995,2404],{"emptyLinePlaceholder":45},[118,15997,15998,16000,16002],{"class":120,"line":9849},[118,15999,4094],{"class":124},[118,16001,4097],{"class":177},[118,16003,1294],{"class":128},[118,16005,16006],{"class":120,"line":9855},[118,16007,1569],{"class":128},[89,16009,16011],{"id":16010},"_814封装案例","8.1.4封装案例",[72,16013,16014],{},[75,16015,16016,16019],{},[278,16017,16018],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1135,16021,16022,16025],{},[75,16023,16024],{},"求出立方体的面积和体积",[75,16026,16027],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[109,16029,16031],{"className":111,"code":16030,"language":113,"meta":39,"style":39},"#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",[115,16032,16033,16039,16049,16056,16060,16064,16069,16099,16103,16113,16123,16133,16137,16146,16150,16186,16190,16199,16203,16219,16223,16228,16237,16241,16248,16252,16261,16265,16272,16276,16285,16289,16296,16300,16305,16322,16326,16372,16376,16385,16389,16393,16397,16406,16410,16414,16419,16423,16429,16435,16441,16445,16449,16454,16476,16480,16534,16538,16546,16550,16555,16560,16573,16580,16596,16607,16613,16636,16642,16665,16679,16699,16705,16716,16739,16761,16766,16772,16786,16799,16804,16818,16823,16829,16834,16848,16853,16858,16872,16884,16889,16902,16907,16912,16917,16930,16935],{"__ignoreMap":39},[118,16034,16035,16037],{"class":120,"line":121},[118,16036,1953],{"class":124},[118,16038,1956],{"class":233},[118,16040,16041,16043,16045,16047],{"class":120,"line":40},[118,16042,1961],{"class":124},[118,16044,1964],{"class":124},[118,16046,1968],{"class":1967},[118,16048,1294],{"class":128},[118,16050,16051,16053],{"class":120,"line":1183},[118,16052,14699],{"class":124},[118,16054,16055],{"class":1967}," Cube\n",[118,16057,16058],{"class":120,"line":1198},[118,16059,1550],{"class":128},[118,16061,16062],{"class":120,"line":1204},[118,16063,14721],{"class":124},[118,16065,16066],{"class":120,"line":1218},[118,16067,16068],{"class":187},"    \u002F\u002F输入长宽高\n",[118,16070,16071,16073,16076,16078,16080,16083,16085,16087,16090,16092,16094,16097],{"class":120,"line":1224},[118,16072,14914],{"class":124},[118,16074,16075],{"class":1967}," setLwh",[118,16077,129],{"class":128},[118,16079,132],{"class":124},[118,16081,16082],{"class":5221}," l",[118,16084,506],{"class":128},[118,16086,132],{"class":124},[118,16088,16089],{"class":5221}," w",[118,16091,506],{"class":128},[118,16093,132],{"class":124},[118,16095,16096],{"class":5221}," h",[118,16098,135],{"class":128},[118,16100,16101],{"class":120,"line":1315},[118,16102,2034],{"class":128},[118,16104,16105,16108,16110],{"class":120,"line":1321},[118,16106,16107],{"class":128},"        m_L",[118,16109,174],{"class":124},[118,16111,16112],{"class":128},"l;\n",[118,16114,16115,16118,16120],{"class":120,"line":1333},[118,16116,16117],{"class":128},"        m_W",[118,16119,174],{"class":124},[118,16121,16122],{"class":128},"w;\n",[118,16124,16125,16128,16130],{"class":120,"line":1616},[118,16126,16127],{"class":128},"        m_H",[118,16129,174],{"class":124},[118,16131,16132],{"class":128},"h;\n",[118,16134,16135],{"class":120,"line":1621},[118,16136,2191],{"class":128},[118,16138,16139,16141,16144],{"class":120,"line":1627},[118,16140,1989],{"class":124},[118,16142,16143],{"class":1967}," mianji",[118,16145,1980],{"class":128},[118,16147,16148],{"class":120,"line":1632},[118,16149,2034],{"class":128},[118,16151,16152,16154,16156,16158,16161,16163,16166,16168,16171,16173,16176,16178,16181,16183],{"class":120,"line":1646},[118,16153,14757],{"class":124},[118,16155,14760],{"class":177},[118,16157,583],{"class":124},[118,16159,16160],{"class":128},"(m_L",[118,16162,583],{"class":124},[118,16164,16165],{"class":128},"m_W ",[118,16167,609],{"class":124},[118,16169,16170],{"class":128}," m_L",[118,16172,583],{"class":124},[118,16174,16175],{"class":128},"m_H ",[118,16177,609],{"class":124},[118,16179,16180],{"class":128}," m_W",[118,16182,583],{"class":124},[118,16184,16185],{"class":128},"m_H);\n",[118,16187,16188],{"class":120,"line":1651},[118,16189,2191],{"class":128},[118,16191,16192,16194,16197],{"class":120,"line":1657},[118,16193,1989],{"class":124},[118,16195,16196],{"class":1967}," tiji",[118,16198,1980],{"class":128},[118,16200,16201],{"class":120,"line":1678},[118,16202,2034],{"class":128},[118,16204,16205,16207,16209,16211,16214,16216],{"class":120,"line":1683},[118,16206,14757],{"class":124},[118,16208,16170],{"class":128},[118,16210,583],{"class":124},[118,16212,16213],{"class":128},"m_W",[118,16215,583],{"class":124},[118,16217,16218],{"class":128},"m_H;\n",[118,16220,16221],{"class":120,"line":1697},[118,16222,2191],{"class":128},[118,16224,16225],{"class":120,"line":1702},[118,16226,16227],{"class":187},"    \u002F\u002F获取长宽高\n",[118,16229,16230,16232,16235],{"class":120,"line":1731},[118,16231,1989],{"class":124},[118,16233,16234],{"class":1967}," getLength",[118,16236,1980],{"class":128},[118,16238,16239],{"class":120,"line":1736},[118,16240,2034],{"class":128},[118,16242,16243,16245],{"class":120,"line":1753},[118,16244,14757],{"class":124},[118,16246,16247],{"class":128}," m_L;\n",[118,16249,16250],{"class":120,"line":1758},[118,16251,2191],{"class":128},[118,16253,16254,16256,16259],{"class":120,"line":1763},[118,16255,1989],{"class":124},[118,16257,16258],{"class":1967}," getWidth",[118,16260,1980],{"class":128},[118,16262,16263],{"class":120,"line":1768},[118,16264,2034],{"class":128},[118,16266,16267,16269],{"class":120,"line":1782},[118,16268,14757],{"class":124},[118,16270,16271],{"class":128}," m_W;\n",[118,16273,16274],{"class":120,"line":1787},[118,16275,2191],{"class":128},[118,16277,16278,16280,16283],{"class":120,"line":2581},[118,16279,1989],{"class":124},[118,16281,16282],{"class":1967}," getHeight",[118,16284,1980],{"class":128},[118,16286,16287],{"class":120,"line":2595},[118,16288,2034],{"class":128},[118,16290,16291,16293],{"class":120,"line":2603},[118,16292,14757],{"class":124},[118,16294,16295],{"class":128}," m_H;\n",[118,16297,16298],{"class":120,"line":2608},[118,16299,2191],{"class":128},[118,16301,16302],{"class":120,"line":2614},[118,16303,16304],{"class":187},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[118,16306,16307,16310,16313,16315,16318,16320],{"class":120,"line":2620},[118,16308,16309],{"class":124},"    bool",[118,16311,16312],{"class":1967}," isEqual",[118,16314,129],{"class":128},[118,16316,16317],{"class":1967},"Cube",[118,16319,2853],{"class":5221},[118,16321,135],{"class":128},[118,16323,16324],{"class":120,"line":2625},[118,16325,2034],{"class":128},[118,16327,16328,16330,16333,16336,16338,16340,16343,16345,16348,16351,16353,16355,16358,16360,16362,16365,16367,16369],{"class":120,"line":7953},[118,16329,2501],{"class":124},[118,16331,16332],{"class":128}," (c.",[118,16334,16335],{"class":1967},"getLength",[118,16337,13055],{"class":128},[118,16339,2953],{"class":124},[118,16341,16342],{"class":128}," m_L ",[118,16344,1719],{"class":124},[118,16346,16347],{"class":128}," c.",[118,16349,16350],{"class":1967},"getWidth",[118,16352,13055],{"class":128},[118,16354,2953],{"class":124},[118,16356,16357],{"class":128}," m_W ",[118,16359,1719],{"class":124},[118,16361,16347],{"class":128},[118,16363,16364],{"class":1967},"getHeight",[118,16366,13055],{"class":128},[118,16368,2953],{"class":124},[118,16370,16371],{"class":128}," m_H)\n",[118,16373,16374],{"class":120,"line":7977},[118,16375,2514],{"class":128},[118,16377,16378,16380,16383],{"class":120,"line":7982},[118,16379,15737],{"class":124},[118,16381,16382],{"class":177}," true",[118,16384,1294],{"class":128},[118,16386,16387],{"class":120,"line":7988},[118,16388,2533],{"class":128},[118,16390,16391],{"class":120,"line":8015},[118,16392,2574],{"class":124},[118,16394,16395],{"class":120,"line":8020},[118,16396,2514],{"class":128},[118,16398,16399,16401,16404],{"class":120,"line":8026},[118,16400,15737],{"class":124},[118,16402,16403],{"class":177}," false",[118,16405,1294],{"class":128},[118,16407,16408],{"class":120,"line":8038},[118,16409,2533],{"class":128},[118,16411,16412],{"class":120,"line":8050},[118,16413,2191],{"class":128},[118,16415,16416],{"class":120,"line":8062},[118,16417,16418],{"class":187},"    \u002F\u002F私有属性\n",[118,16420,16421],{"class":120,"line":9721},[118,16422,15227],{"class":124},[118,16424,16425,16427],{"class":120,"line":9746},[118,16426,1989],{"class":124},[118,16428,16247],{"class":128},[118,16430,16431,16433],{"class":120,"line":9769},[118,16432,1989],{"class":124},[118,16434,16271],{"class":128},[118,16436,16437,16439],{"class":120,"line":9793},[118,16438,1989],{"class":124},[118,16440,16295],{"class":128},[118,16442,16443],{"class":120,"line":9798},[118,16444,2404],{"emptyLinePlaceholder":45},[118,16446,16447],{"class":120,"line":9803},[118,16448,3999],{"class":128},[118,16450,16451],{"class":120,"line":9808},[118,16452,16453],{"class":187},"\u002F\u002F全局函数判断两个立方体是否相等\n",[118,16455,16456,16458,16460,16462,16464,16467,16469,16471,16474],{"class":120,"line":9817},[118,16457,1358],{"class":124},[118,16459,16312],{"class":1967},[118,16461,129],{"class":128},[118,16463,16317],{"class":1967},[118,16465,16466],{"class":5221}," c1",[118,16468,506],{"class":128},[118,16470,16317],{"class":1967},[118,16472,16473],{"class":5221}," c2",[118,16475,135],{"class":128},[118,16477,16478],{"class":120,"line":9822},[118,16479,1550],{"class":128},[118,16481,16482,16484,16487,16489,16491,16493,16496,16498,16501,16503,16505,16507,16509,16511,16513,16515,16517,16519,16521,16523,16525,16527,16529,16531],{"class":120,"line":9828},[118,16483,4094],{"class":124},[118,16485,16486],{"class":128}," (c1.",[118,16488,16335],{"class":1967},[118,16490,13055],{"class":128},[118,16492,2953],{"class":124},[118,16494,16495],{"class":128}," c2.",[118,16497,16335],{"class":1967},[118,16499,16500],{"class":128},"()) ",[118,16502,1719],{"class":124},[118,16504,16486],{"class":128},[118,16506,16350],{"class":1967},[118,16508,13055],{"class":128},[118,16510,2953],{"class":124},[118,16512,16495],{"class":128},[118,16514,16350],{"class":1967},[118,16516,16500],{"class":128},[118,16518,1719],{"class":124},[118,16520,16486],{"class":128},[118,16522,16364],{"class":1967},[118,16524,13055],{"class":128},[118,16526,2953],{"class":124},[118,16528,16495],{"class":128},[118,16530,16364],{"class":1967},[118,16532,16533],{"class":128},"());\n",[118,16535,16536],{"class":120,"line":9849},[118,16537,1569],{"class":128},[118,16539,16540,16542,16544],{"class":120,"line":9855},[118,16541,132],{"class":124},[118,16543,1977],{"class":1967},[118,16545,1980],{"class":128},[118,16547,16548],{"class":120,"line":9869},[118,16549,1550],{"class":128},[118,16551,16552],{"class":120,"line":9875},[118,16553,16554],{"class":128},"    Cube c1;\n",[118,16556,16557],{"class":120,"line":9902},[118,16558,16559],{"class":187},"    \u002F\u002F输入立方体的长宽高\n",[118,16561,16562,16564,16566,16569,16571],{"class":120,"line":9911},[118,16563,1555],{"class":128},[118,16565,1172],{"class":124},[118,16567,16568],{"class":233},"\"请输入第一个立方体的长、宽、高：\"",[118,16570,1172],{"class":124},[118,16572,1195],{"class":128},[118,16574,16575,16577],{"class":120,"line":9917},[118,16576,1989],{"class":124},[118,16578,16579],{"class":128}," l,w,h,l1,w1,h1;\n",[118,16581,16582,16584,16586,16588,16590,16592,16594],{"class":120,"line":9925},[118,16583,2016],{"class":128},[118,16585,1433],{"class":124},[118,16587,646],{"class":128},[118,16589,1433],{"class":124},[118,16591,923],{"class":128},[118,16593,1433],{"class":124},[118,16595,16132],{"class":128},[118,16597,16598,16601,16604],{"class":120,"line":9930},[118,16599,16600],{"class":128},"    c1.",[118,16602,16603],{"class":1967},"setLwh",[118,16605,16606],{"class":128},"(l,w,h);\n",[118,16608,16610],{"class":120,"line":16609},66,[118,16611,16612],{"class":187},"    \u002F\u002F面积\n",[118,16614,16616,16618,16620,16623,16625,16627,16630,16632,16634],{"class":120,"line":16615},67,[118,16617,1555],{"class":128},[118,16619,1172],{"class":124},[118,16621,16622],{"class":233},"\"立方体的表面积为：\"",[118,16624,1172],{"class":124},[118,16626,14835],{"class":128},[118,16628,16629],{"class":1967},"mianji",[118,16631,2431],{"class":128},[118,16633,1172],{"class":124},[118,16635,1195],{"class":128},[118,16637,16639],{"class":120,"line":16638},68,[118,16640,16641],{"class":187},"    \u002F\u002F体积\n",[118,16643,16645,16647,16649,16652,16654,16656,16659,16661,16663],{"class":120,"line":16644},69,[118,16646,1555],{"class":128},[118,16648,1172],{"class":124},[118,16650,16651],{"class":233},"\"立方体的体积为：\"",[118,16653,1172],{"class":124},[118,16655,14835],{"class":128},[118,16657,16658],{"class":1967},"tiji",[118,16660,2431],{"class":128},[118,16662,1172],{"class":124},[118,16664,1195],{"class":128},[118,16666,16668,16670,16672,16675,16677],{"class":120,"line":16667},70,[118,16669,1555],{"class":128},[118,16671,1172],{"class":124},[118,16673,16674],{"class":233},"\"请输入第二个立方体的长、宽、高：\"",[118,16676,1172],{"class":124},[118,16678,1195],{"class":128},[118,16680,16682,16684,16686,16689,16691,16694,16696],{"class":120,"line":16681},71,[118,16683,2016],{"class":128},[118,16685,1433],{"class":124},[118,16687,16688],{"class":128},"l1",[118,16690,1433],{"class":124},[118,16692,16693],{"class":128},"w1",[118,16695,1433],{"class":124},[118,16697,16698],{"class":128},"h1;\n",[118,16700,16702],{"class":120,"line":16701},72,[118,16703,16704],{"class":128},"    Cube c2;\n",[118,16706,16708,16711,16713],{"class":120,"line":16707},73,[118,16709,16710],{"class":128},"    c2.",[118,16712,16603],{"class":1967},[118,16714,16715],{"class":128},"(l1,w1,h1);\n",[118,16717,16719,16721,16723,16726,16728,16731,16733,16735,16737],{"class":120,"line":16718},74,[118,16720,1555],{"class":128},[118,16722,1172],{"class":124},[118,16724,16725],{"class":233},"\"第二个立方体的表面积为：\"",[118,16727,1172],{"class":124},[118,16729,16730],{"class":128},"c2.",[118,16732,16629],{"class":1967},[118,16734,2431],{"class":128},[118,16736,1172],{"class":124},[118,16738,1195],{"class":128},[118,16740,16742,16744,16746,16749,16751,16753,16755,16757,16759],{"class":120,"line":16741},75,[118,16743,1555],{"class":128},[118,16745,1172],{"class":124},[118,16747,16748],{"class":233},"\"第二个立方体的体积为：\"",[118,16750,1172],{"class":124},[118,16752,16730],{"class":128},[118,16754,16658],{"class":1967},[118,16756,2431],{"class":128},[118,16758,1172],{"class":124},[118,16760,1195],{"class":128},[118,16762,16764],{"class":120,"line":16763},76,[118,16765,2404],{"emptyLinePlaceholder":45},[118,16767,16769],{"class":120,"line":16768},77,[118,16770,16771],{"class":187},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[118,16773,16775,16777,16779,16782,16784],{"class":120,"line":16774},78,[118,16776,1555],{"class":128},[118,16778,1172],{"class":124},[118,16780,16781],{"class":233},"\"内部函数判断结果：\"",[118,16783,1172],{"class":124},[118,16785,1195],{"class":128},[118,16787,16789,16791,16793,16796],{"class":120,"line":16788},79,[118,16790,3105],{"class":124},[118,16792,16486],{"class":128},[118,16794,16795],{"class":1967},"isEqual",[118,16797,16798],{"class":128},"(c2))\n",[118,16800,16802],{"class":120,"line":16801},80,[118,16803,2034],{"class":128},[118,16805,16807,16809,16811,16814,16816],{"class":120,"line":16806},81,[118,16808,3455],{"class":128},[118,16810,1172],{"class":124},[118,16812,16813],{"class":233},"\"两个立方体相等\"",[118,16815,1172],{"class":124},[118,16817,1195],{"class":128},[118,16819,16821],{"class":120,"line":16820},82,[118,16822,2191],{"class":128},[118,16824,16826],{"class":120,"line":16825},83,[118,16827,16828],{"class":124},"    else\n",[118,16830,16832],{"class":120,"line":16831},84,[118,16833,2034],{"class":128},[118,16835,16837,16839,16841,16844,16846],{"class":120,"line":16836},85,[118,16838,3455],{"class":128},[118,16840,1172],{"class":124},[118,16842,16843],{"class":233},"\"两个立方体不相等\"",[118,16845,1172],{"class":124},[118,16847,1195],{"class":128},[118,16849,16851],{"class":120,"line":16850},86,[118,16852,2191],{"class":128},[118,16854,16856],{"class":120,"line":16855},87,[118,16857,2404],{"emptyLinePlaceholder":45},[118,16859,16861,16863,16865,16868,16870],{"class":120,"line":16860},88,[118,16862,1555],{"class":128},[118,16864,1172],{"class":124},[118,16866,16867],{"class":233},"\"全局函数判断结果：\"",[118,16869,1172],{"class":124},[118,16871,1195],{"class":128},[118,16873,16875,16877,16879,16881],{"class":120,"line":16874},89,[118,16876,3105],{"class":124},[118,16878,1662],{"class":128},[118,16880,16795],{"class":1967},[118,16882,16883],{"class":128},"(c1, c2))\n",[118,16885,16887],{"class":120,"line":16886},90,[118,16888,2034],{"class":128},[118,16890,16892,16894,16896,16898,16900],{"class":120,"line":16891},91,[118,16893,3455],{"class":128},[118,16895,1172],{"class":124},[118,16897,16813],{"class":233},[118,16899,1172],{"class":124},[118,16901,1195],{"class":128},[118,16903,16905],{"class":120,"line":16904},92,[118,16906,2191],{"class":128},[118,16908,16910],{"class":120,"line":16909},93,[118,16911,16828],{"class":124},[118,16913,16915],{"class":120,"line":16914},94,[118,16916,2034],{"class":128},[118,16918,16920,16922,16924,16926,16928],{"class":120,"line":16919},95,[118,16921,3455],{"class":128},[118,16923,1172],{"class":124},[118,16925,16843],{"class":233},[118,16927,1172],{"class":124},[118,16929,1195],{"class":128},[118,16931,16933],{"class":120,"line":16932},96,[118,16934,2191],{"class":128},[118,16936,16938],{"class":120,"line":16937},97,[118,16939,1569],{"class":128},[72,16941,16942],{"start":40},[75,16943,16944],{},[278,16945,16946],{},"练习案例2：点和圆的关系",[1135,16948,16949],{},[75,16950,16951],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[109,16953,16955],{"className":111,"code":16954,"language":113,"meta":39,"style":39},"#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",[115,16956,16957,16963,16973,16980,16987,16991,16995,17000,17034,17039,17055,17069,17073,17077,17084,17091,17095,17101,17105,17109,17113,17135,17158,17163,17177,17192,17196,17200,17206,17211,17216,17220,17246,17250,17280,17308,17336,17353,17357,17370,17374,17378,17382,17395,17399,17403,17411,17415,17419,17423,17428,17432,17443,17450,17459,17469,17480,17487,17500,17511,17521,17532,17539,17553,17558,17568,17576],{"__ignoreMap":39},[118,16958,16959,16961],{"class":120,"line":121},[118,16960,1953],{"class":124},[118,16962,1956],{"class":233},[118,16964,16965,16967,16969,16971],{"class":120,"line":40},[118,16966,1961],{"class":124},[118,16968,1964],{"class":124},[118,16970,1968],{"class":1967},[118,16972,1294],{"class":128},[118,16974,16975,16977],{"class":120,"line":1183},[118,16976,1953],{"class":124},[118,16978,16979],{"class":233},"\u003Ccmath>\n",[118,16981,16982,16984],{"class":120,"line":1198},[118,16983,14699],{"class":124},[118,16985,16986],{"class":1967}," Point\n",[118,16988,16989],{"class":120,"line":1204},[118,16990,1550],{"class":128},[118,16992,16993],{"class":120,"line":1218},[118,16994,14721],{"class":124},[118,16996,16997],{"class":120,"line":1224},[118,16998,16999],{"class":187},"    \u002F\u002F赋值\n",[118,17001,17002,17004,17007,17009,17011,17014,17016,17018,17021,17024,17026,17029,17031],{"class":120,"line":1315},[118,17003,14914],{"class":124},[118,17005,17006],{"class":1967}," setPoint",[118,17008,129],{"class":128},[118,17010,14042],{"class":124},[118,17012,17013],{"class":5221}," x",[118,17015,12440],{"class":128},[118,17017,14042],{"class":124},[118,17019,17020],{"class":5221}," y",[118,17022,17023],{"class":128},") { m_x ",[118,17025,174],{"class":124},[118,17027,17028],{"class":128}," x; m_y ",[118,17030,174],{"class":124},[118,17032,17033],{"class":128}," y; }\n",[118,17035,17036],{"class":120,"line":1321},[118,17037,17038],{"class":187},"    \u002F\u002F获取坐标\n",[118,17040,17041,17043,17046,17049,17052],{"class":120,"line":1333},[118,17042,14743],{"class":124},[118,17044,17045],{"class":1967}," getX",[118,17047,17048],{"class":128},"() { ",[118,17050,17051],{"class":124},"return",[118,17053,17054],{"class":128}," m_x; }\n",[118,17056,17057,17059,17062,17064,17066],{"class":120,"line":1616},[118,17058,14743],{"class":124},[118,17060,17061],{"class":1967}," getY",[118,17063,17048],{"class":128},[118,17065,17051],{"class":124},[118,17067,17068],{"class":128}," m_y; }\n",[118,17070,17071],{"class":120,"line":1621},[118,17072,2404],{"emptyLinePlaceholder":45},[118,17074,17075],{"class":120,"line":1627},[118,17076,15227],{"class":124},[118,17078,17079,17081],{"class":120,"line":1632},[118,17080,14743],{"class":124},[118,17082,17083],{"class":128}," m_x;\n",[118,17085,17086,17088],{"class":120,"line":1646},[118,17087,14743],{"class":124},[118,17089,17090],{"class":128}," m_y;\n",[118,17092,17093],{"class":120,"line":1651},[118,17094,3999],{"class":128},[118,17096,17097,17099],{"class":120,"line":1657},[118,17098,14699],{"class":124},[118,17100,14702],{"class":1967},[118,17102,17103],{"class":120,"line":1678},[118,17104,1550],{"class":128},[118,17106,17107],{"class":120,"line":1683},[118,17108,14721],{"class":124},[118,17110,17111],{"class":120,"line":1697},[118,17112,16999],{"class":187},[118,17114,17115,17117,17120,17122,17124,17127,17130,17132],{"class":120,"line":1702},[118,17116,14914],{"class":124},[118,17118,17119],{"class":1967}," setRadius",[118,17121,129],{"class":128},[118,17123,14042],{"class":124},[118,17125,17126],{"class":5221}," r",[118,17128,17129],{"class":128},") { m_r ",[118,17131,174],{"class":124},[118,17133,17134],{"class":128}," r; }\n",[118,17136,17137,17139,17142,17144,17147,17150,17153,17155],{"class":120,"line":1731},[118,17138,14914],{"class":124},[118,17140,17141],{"class":1967}," setCenter",[118,17143,129],{"class":128},[118,17145,17146],{"class":1967},"Point",[118,17148,17149],{"class":5221}," center",[118,17151,17152],{"class":128},") { m_center ",[118,17154,174],{"class":124},[118,17156,17157],{"class":128}," center; }\n",[118,17159,17160],{"class":120,"line":1736},[118,17161,17162],{"class":187},"    \u002F\u002F获取属性\n",[118,17164,17165,17167,17170,17172,17174],{"class":120,"line":1753},[118,17166,14743],{"class":124},[118,17168,17169],{"class":1967}," getRadius",[118,17171,17048],{"class":128},[118,17173,17051],{"class":124},[118,17175,17176],{"class":128}," m_r; }\n",[118,17178,17179,17182,17185,17187,17189],{"class":120,"line":1758},[118,17180,17181],{"class":1967},"    Point",[118,17183,17184],{"class":1967}," getCenter",[118,17186,17048],{"class":128},[118,17188,17051],{"class":124},[118,17190,17191],{"class":128}," m_center; }\n",[118,17193,17194],{"class":120,"line":1763},[118,17195,2404],{"emptyLinePlaceholder":45},[118,17197,17198],{"class":120,"line":1768},[118,17199,15227],{"class":124},[118,17201,17202,17204],{"class":120,"line":1782},[118,17203,14743],{"class":124},[118,17205,14733],{"class":128},[118,17207,17208],{"class":120,"line":1787},[118,17209,17210],{"class":187},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[118,17212,17213],{"class":120,"line":2581},[118,17214,17215],{"class":128},"    Point m_center;\n",[118,17217,17218],{"class":120,"line":2595},[118,17219,3999],{"class":128},[118,17221,17222,17224,17227,17229,17232,17234,17236,17238,17240,17242,17244],{"class":120,"line":2603},[118,17223,5369],{"class":124},[118,17225,17226],{"class":1967}," isInCircle",[118,17228,129],{"class":128},[118,17230,17231],{"class":1967},"Circle",[118,17233,10589],{"class":124},[118,17235,416],{"class":5221},[118,17237,506],{"class":128},[118,17239,17146],{"class":1967},[118,17241,10589],{"class":124},[118,17243,15],{"class":5221},[118,17245,135],{"class":128},[118,17247,17248],{"class":120,"line":2608},[118,17249,1550],{"class":128},[118,17251,17252,17254,17257,17259,17261,17264,17267,17270,17272,17274,17276,17278],{"class":120,"line":2614},[118,17253,14743],{"class":124},[118,17255,17256],{"class":128}," dx ",[118,17258,174],{"class":124},[118,17260,16347],{"class":128},[118,17262,17263],{"class":1967},"getCenter",[118,17265,17266],{"class":128},"().",[118,17268,17269],{"class":1967},"getX",[118,17271,13055],{"class":128},[118,17273,660],{"class":124},[118,17275,15893],{"class":128},[118,17277,17269],{"class":1967},[118,17279,5641],{"class":128},[118,17281,17282,17284,17287,17289,17291,17293,17295,17298,17300,17302,17304,17306],{"class":120,"line":2620},[118,17283,14743],{"class":124},[118,17285,17286],{"class":128}," dy ",[118,17288,174],{"class":124},[118,17290,16347],{"class":128},[118,17292,17263],{"class":1967},[118,17294,17266],{"class":128},[118,17296,17297],{"class":1967},"getY",[118,17299,13055],{"class":128},[118,17301,660],{"class":124},[118,17303,15893],{"class":128},[118,17305,17297],{"class":1967},[118,17307,5641],{"class":128},[118,17309,17310,17312,17315,17317,17320,17323,17325,17327,17329,17331,17333],{"class":120,"line":2625},[118,17311,14743],{"class":124},[118,17313,17314],{"class":128}," distance ",[118,17316,174],{"class":124},[118,17318,17319],{"class":1967}," sqrt",[118,17321,17322],{"class":128},"(dx ",[118,17324,583],{"class":124},[118,17326,17256],{"class":128},[118,17328,609],{"class":124},[118,17330,17286],{"class":128},[118,17332,583],{"class":124},[118,17334,17335],{"class":128}," dy);\n",[118,17337,17338,17340,17343,17345,17347,17350],{"class":120,"line":7953},[118,17339,3105],{"class":124},[118,17341,17342],{"class":128}," (distance ",[118,17344,1038],{"class":124},[118,17346,16347],{"class":128},[118,17348,17349],{"class":1967},"getRadius",[118,17351,17352],{"class":128},"())\n",[118,17354,17355],{"class":120,"line":7977},[118,17356,2034],{"class":128},[118,17358,17359,17361,17363,17366,17368],{"class":120,"line":7982},[118,17360,9674],{"class":128},[118,17362,1172],{"class":124},[118,17364,17365],{"class":233}," \"点在圆内\"",[118,17367,1448],{"class":124},[118,17369,8845],{"class":128},[118,17371,17372],{"class":120,"line":7988},[118,17373,2191],{"class":128},[118,17375,17376],{"class":120,"line":8015},[118,17377,16828],{"class":124},[118,17379,17380],{"class":120,"line":8020},[118,17381,2034],{"class":128},[118,17383,17384,17386,17388,17391,17393],{"class":120,"line":8026},[118,17385,9674],{"class":128},[118,17387,1172],{"class":124},[118,17389,17390],{"class":233}," \"点在圆外\"",[118,17392,1448],{"class":124},[118,17394,8845],{"class":128},[118,17396,17397],{"class":120,"line":8038},[118,17398,2191],{"class":128},[118,17400,17401],{"class":120,"line":8050},[118,17402,1569],{"class":128},[118,17404,17405,17407,17409],{"class":120,"line":8062},[118,17406,132],{"class":124},[118,17408,1977],{"class":1967},[118,17410,1980],{"class":128},[118,17412,17413],{"class":120,"line":9721},[118,17414,1550],{"class":128},[118,17416,17417],{"class":120,"line":9746},[118,17418,15058],{"class":187},[118,17420,17421],{"class":120,"line":9769},[118,17422,14805],{"class":128},[118,17424,17425],{"class":120,"line":9793},[118,17426,17427],{"class":128},"    Point p1;\n",[118,17429,17430],{"class":120,"line":9798},[118,17431,16999],{"class":187},[118,17433,17434,17436,17438,17441],{"class":120,"line":9803},[118,17435,1555],{"class":128},[118,17437,1172],{"class":124},[118,17439,17440],{"class":233},"\"请输入圆的半径：\"",[118,17442,1294],{"class":128},[118,17444,17445,17447],{"class":120,"line":9808},[118,17446,14743],{"class":124},[118,17448,17449],{"class":128}," r;\n",[118,17451,17452,17454,17456],{"class":120,"line":9817},[118,17453,2016],{"class":128},[118,17455,1433],{"class":124},[118,17457,17458],{"class":128},"r;\n",[118,17460,17461,17463,17466],{"class":120,"line":9822},[118,17462,16600],{"class":128},[118,17464,17465],{"class":1967},"setRadius",[118,17467,17468],{"class":128},"(r);\n",[118,17470,17471,17473,17475,17478],{"class":120,"line":9828},[118,17472,1555],{"class":128},[118,17474,1172],{"class":124},[118,17476,17477],{"class":233},"\"请输入圆心坐标：\"",[118,17479,1294],{"class":128},[118,17481,17482,17484],{"class":120,"line":9849},[118,17483,14743],{"class":124},[118,17485,17486],{"class":128}," x, y;\n",[118,17488,17489,17491,17493,17495,17497],{"class":120,"line":9855},[118,17490,2016],{"class":128},[118,17492,1433],{"class":124},[118,17494,948],{"class":128},[118,17496,1433],{"class":124},[118,17498,17499],{"class":128},"y;\n",[118,17501,17502,17505,17508],{"class":120,"line":9869},[118,17503,17504],{"class":128},"    p1.",[118,17506,17507],{"class":1967},"setPoint",[118,17509,17510],{"class":128},"(x, y);\n",[118,17512,17513,17515,17518],{"class":120,"line":9875},[118,17514,16600],{"class":128},[118,17516,17517],{"class":1967},"setCenter",[118,17519,17520],{"class":128},"(p1);\n",[118,17522,17523,17525,17527,17530],{"class":120,"line":9902},[118,17524,1555],{"class":128},[118,17526,1172],{"class":124},[118,17528,17529],{"class":233},"\"请输入测试点坐标：\"",[118,17531,1294],{"class":128},[118,17533,17534,17536],{"class":120,"line":9911},[118,17535,14743],{"class":124},[118,17537,17538],{"class":128}," x1, y1;\n",[118,17540,17541,17543,17545,17548,17550],{"class":120,"line":9917},[118,17542,2016],{"class":128},[118,17544,1433],{"class":124},[118,17546,17547],{"class":128},"x1",[118,17549,1433],{"class":124},[118,17551,17552],{"class":128},"y1;\n",[118,17554,17555],{"class":120,"line":9925},[118,17556,17557],{"class":128},"    Point p2;\n",[118,17559,17560,17563,17565],{"class":120,"line":9930},[118,17561,17562],{"class":128},"    p2.",[118,17564,17507],{"class":1967},[118,17566,17567],{"class":128},"(x1, y1);\n",[118,17569,17570,17573],{"class":120,"line":16609},[118,17571,17572],{"class":1967},"    isInCircle",[118,17574,17575],{"class":128},"(c1, p2);\n",[118,17577,17578],{"class":120,"line":16615},[118,17579,1569],{"class":128},[15,17581,17582],{},"在类中可以让另一个类作为本来的成员",[15,17584,17585],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[15,17587,17588],{},"创建point.h",[109,17590,17592],{"className":111,"code":17591,"language":113,"meta":39,"style":39},"#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",[115,17593,17594,17605,17611,17621,17627,17631,17636,17640,17644,17664,17668,17676,17684,17688,17692,17698,17704],{"__ignoreMap":39},[118,17595,17596,17599,17602],{"class":120,"line":121},[118,17597,17598],{"class":124},"#pragma",[118,17600,17601],{"class":1967}," once",[118,17603,17604],{"class":187}," \u002F\u002F防止头文件重复包含\n",[118,17606,17607,17609],{"class":120,"line":40},[118,17608,1953],{"class":124},[118,17610,1956],{"class":233},[118,17612,17613,17615,17617,17619],{"class":120,"line":1183},[118,17614,1961],{"class":124},[118,17616,1964],{"class":124},[118,17618,1968],{"class":1967},[118,17620,1294],{"class":128},[118,17622,17623,17625],{"class":120,"line":1198},[118,17624,14699],{"class":124},[118,17626,16986],{"class":1967},[118,17628,17629],{"class":120,"line":1204},[118,17630,1550],{"class":128},[118,17632,17633],{"class":120,"line":1218},[118,17634,17635],{"class":187},"\u002F\u002F做好声明与变量定义就可以\n",[118,17637,17638],{"class":120,"line":1224},[118,17639,14721],{"class":124},[118,17641,17642],{"class":120,"line":1315},[118,17643,16999],{"class":187},[118,17645,17646,17648,17650,17652,17654,17656,17658,17660,17662],{"class":120,"line":1321},[118,17647,14914],{"class":124},[118,17649,17006],{"class":1967},[118,17651,129],{"class":128},[118,17653,14042],{"class":124},[118,17655,17013],{"class":5221},[118,17657,12440],{"class":128},[118,17659,14042],{"class":124},[118,17661,17020],{"class":5221},[118,17663,2723],{"class":128},[118,17665,17666],{"class":120,"line":1333},[118,17667,17038],{"class":187},[118,17669,17670,17672,17674],{"class":120,"line":1616},[118,17671,14743],{"class":124},[118,17673,17045],{"class":1967},[118,17675,5641],{"class":128},[118,17677,17678,17680,17682],{"class":120,"line":1621},[118,17679,14743],{"class":124},[118,17681,17061],{"class":1967},[118,17683,5641],{"class":128},[118,17685,17686],{"class":120,"line":1627},[118,17687,2404],{"emptyLinePlaceholder":45},[118,17689,17690],{"class":120,"line":1632},[118,17691,15227],{"class":124},[118,17693,17694,17696],{"class":120,"line":1646},[118,17695,14743],{"class":124},[118,17697,17083],{"class":128},[118,17699,17700,17702],{"class":120,"line":1651},[118,17701,14743],{"class":124},[118,17703,17090],{"class":128},[118,17705,17706],{"class":120,"line":1657},[118,17707,3999],{"class":128},[15,17709,17710],{},"创建point.cpp",[109,17712,17714],{"className":111,"code":17713,"language":113,"meta":39,"style":39},"#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",[115,17715,17716,17723,17728,17762,17766,17782],{"__ignoreMap":39},[118,17717,17718,17720],{"class":120,"line":121},[118,17719,1953],{"class":124},[118,17721,17722],{"class":233},"\u003Cpoint.h>\n",[118,17724,17725],{"class":120,"line":40},[118,17726,17727],{"class":187},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[118,17729,17730,17732,17735,17738,17740,17742,17744,17746,17748,17750,17752,17754,17756,17758,17760],{"class":120,"line":1183},[118,17731,14914],{"class":124},[118,17733,17734],{"class":1967}," Point",[118,17736,17737],{"class":128},"::",[118,17739,17507],{"class":1967},[118,17741,129],{"class":128},[118,17743,14042],{"class":124},[118,17745,17013],{"class":5221},[118,17747,12440],{"class":128},[118,17749,14042],{"class":124},[118,17751,17020],{"class":5221},[118,17753,17023],{"class":128},[118,17755,174],{"class":124},[118,17757,17028],{"class":128},[118,17759,174],{"class":124},[118,17761,17033],{"class":128},[118,17763,17764],{"class":120,"line":1198},[118,17765,17038],{"class":187},[118,17767,17768,17770,17772,17774,17776,17778,17780],{"class":120,"line":1204},[118,17769,14743],{"class":124},[118,17771,17734],{"class":1967},[118,17773,17737],{"class":128},[118,17775,17269],{"class":1967},[118,17777,17048],{"class":128},[118,17779,17051],{"class":124},[118,17781,17054],{"class":128},[118,17783,17784,17786,17788,17790,17792,17794,17796],{"class":120,"line":1218},[118,17785,14743],{"class":124},[118,17787,17734],{"class":1967},[118,17789,17737],{"class":128},[118,17791,17297],{"class":1967},[118,17793,17048],{"class":128},[118,17795,17051],{"class":124},[118,17797,17068],{"class":128},[15,17799,17800],{},"创建circle.h",[109,17802,17804],{"className":111,"code":17803,"language":113,"meta":39,"style":39},"#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",[115,17805,17806,17813,17819,17829,17835,17841,17845,17849,17853,17867,17881,17885,17893,17901,17905,17909,17915,17919,17923],{"__ignoreMap":39},[118,17807,17808,17810],{"class":120,"line":121},[118,17809,17598],{"class":124},[118,17811,17812],{"class":1967}," once\n",[118,17814,17815,17817],{"class":120,"line":40},[118,17816,1953],{"class":124},[118,17818,1956],{"class":233},[118,17820,17821,17823,17825,17827],{"class":120,"line":1183},[118,17822,1961],{"class":124},[118,17824,1964],{"class":124},[118,17826,1968],{"class":1967},[118,17828,1294],{"class":128},[118,17830,17831,17833],{"class":120,"line":1198},[118,17832,1953],{"class":124},[118,17834,17722],{"class":233},[118,17836,17837,17839],{"class":120,"line":1204},[118,17838,14699],{"class":124},[118,17840,14702],{"class":1967},[118,17842,17843],{"class":120,"line":1218},[118,17844,1550],{"class":128},[118,17846,17847],{"class":120,"line":1224},[118,17848,14721],{"class":124},[118,17850,17851],{"class":120,"line":1315},[118,17852,16999],{"class":187},[118,17854,17855,17857,17859,17861,17863,17865],{"class":120,"line":1321},[118,17856,14914],{"class":124},[118,17858,17119],{"class":1967},[118,17860,129],{"class":128},[118,17862,14042],{"class":124},[118,17864,17126],{"class":5221},[118,17866,2723],{"class":128},[118,17868,17869,17871,17873,17875,17877,17879],{"class":120,"line":1333},[118,17870,14914],{"class":124},[118,17872,17141],{"class":1967},[118,17874,129],{"class":128},[118,17876,17146],{"class":1967},[118,17878,17149],{"class":5221},[118,17880,2723],{"class":128},[118,17882,17883],{"class":120,"line":1616},[118,17884,17162],{"class":187},[118,17886,17887,17889,17891],{"class":120,"line":1621},[118,17888,14743],{"class":124},[118,17890,17169],{"class":1967},[118,17892,5641],{"class":128},[118,17894,17895,17897,17899],{"class":120,"line":1627},[118,17896,17181],{"class":1967},[118,17898,17184],{"class":1967},[118,17900,5641],{"class":128},[118,17902,17903],{"class":120,"line":1632},[118,17904,2404],{"emptyLinePlaceholder":45},[118,17906,17907],{"class":120,"line":1646},[118,17908,15227],{"class":124},[118,17910,17911,17913],{"class":120,"line":1651},[118,17912,14743],{"class":124},[118,17914,14733],{"class":128},[118,17916,17917],{"class":120,"line":1657},[118,17918,17210],{"class":187},[118,17920,17921],{"class":120,"line":1678},[118,17922,17215],{"class":128},[118,17924,17925],{"class":120,"line":1683},[118,17926,3999],{"class":128},[15,17928,17929],{},"创建circle.cpp",[109,17931,17933],{"className":111,"code":17932,"language":113,"meta":39,"style":39},"#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",[115,17934,17935,17942,17965,17987,17992,18008],{"__ignoreMap":39},[118,17936,17937,17939],{"class":120,"line":121},[118,17938,1953],{"class":124},[118,17940,17941],{"class":233},"\u003Ccircle.h>\n",[118,17943,17944,17946,17949,17951,17953,17955,17957,17959,17961,17963],{"class":120,"line":40},[118,17945,5369],{"class":124},[118,17947,17948],{"class":1967}," Circle",[118,17950,17737],{"class":128},[118,17952,17465],{"class":1967},[118,17954,129],{"class":128},[118,17956,14042],{"class":124},[118,17958,17126],{"class":5221},[118,17960,17129],{"class":128},[118,17962,174],{"class":124},[118,17964,17134],{"class":128},[118,17966,17967,17969,17971,17973,17975,17977,17979,17981,17983,17985],{"class":120,"line":1183},[118,17968,5369],{"class":124},[118,17970,17948],{"class":1967},[118,17972,17737],{"class":128},[118,17974,17517],{"class":1967},[118,17976,129],{"class":128},[118,17978,17146],{"class":1967},[118,17980,17149],{"class":5221},[118,17982,17152],{"class":128},[118,17984,174],{"class":124},[118,17986,17157],{"class":128},[118,17988,17989],{"class":120,"line":1198},[118,17990,17991],{"class":187},"\u002F\u002F获取属性\n",[118,17993,17994,17996,17998,18000,18002,18004,18006],{"class":120,"line":1204},[118,17995,14042],{"class":124},[118,17997,17948],{"class":1967},[118,17999,17737],{"class":128},[118,18001,17349],{"class":1967},[118,18003,17048],{"class":128},[118,18005,17051],{"class":124},[118,18007,17176],{"class":128},[118,18009,18010,18012,18014,18016,18018,18020,18022],{"class":120,"line":1218},[118,18011,17146],{"class":1967},[118,18013,17948],{"class":1967},[118,18015,17737],{"class":128},[118,18017,17263],{"class":1967},[118,18019,17048],{"class":128},[118,18021,17051],{"class":124},[118,18023,17191],{"class":128},[15,18025,18026],{},"使用封装的类",[109,18028,18030],{"className":111,"code":18029,"language":113,"meta":39,"style":39},"#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",[115,18031,18032,18038,18048,18054,18060,18084,18088,18114,18140,18164,18178,18182,18194,18198,18202,18206,18218,18222,18226,18234,18238,18242,18246,18250,18254,18264,18270,18278,18286,18296,18302,18314,18322,18330,18340,18346,18358,18362,18370,18376],{"__ignoreMap":39},[118,18033,18034,18036],{"class":120,"line":121},[118,18035,1953],{"class":124},[118,18037,1956],{"class":233},[118,18039,18040,18042,18044,18046],{"class":120,"line":40},[118,18041,1961],{"class":124},[118,18043,1964],{"class":124},[118,18045,1968],{"class":1967},[118,18047,1294],{"class":128},[118,18049,18050,18052],{"class":120,"line":1183},[118,18051,1953],{"class":124},[118,18053,17941],{"class":233},[118,18055,18056,18058],{"class":120,"line":1198},[118,18057,1953],{"class":124},[118,18059,17722],{"class":233},[118,18061,18062,18064,18066,18068,18070,18072,18074,18076,18078,18080,18082],{"class":120,"line":1204},[118,18063,5369],{"class":124},[118,18065,17226],{"class":1967},[118,18067,129],{"class":128},[118,18069,17231],{"class":1967},[118,18071,10589],{"class":124},[118,18073,416],{"class":5221},[118,18075,506],{"class":128},[118,18077,17146],{"class":1967},[118,18079,10589],{"class":124},[118,18081,15],{"class":5221},[118,18083,135],{"class":128},[118,18085,18086],{"class":120,"line":1218},[118,18087,1550],{"class":128},[118,18089,18090,18092,18094,18096,18098,18100,18102,18104,18106,18108,18110,18112],{"class":120,"line":1224},[118,18091,14743],{"class":124},[118,18093,17256],{"class":128},[118,18095,174],{"class":124},[118,18097,16347],{"class":128},[118,18099,17263],{"class":1967},[118,18101,17266],{"class":128},[118,18103,17269],{"class":1967},[118,18105,13055],{"class":128},[118,18107,660],{"class":124},[118,18109,15893],{"class":128},[118,18111,17269],{"class":1967},[118,18113,5641],{"class":128},[118,18115,18116,18118,18120,18122,18124,18126,18128,18130,18132,18134,18136,18138],{"class":120,"line":1315},[118,18117,14743],{"class":124},[118,18119,17286],{"class":128},[118,18121,174],{"class":124},[118,18123,16347],{"class":128},[118,18125,17263],{"class":1967},[118,18127,17266],{"class":128},[118,18129,17297],{"class":1967},[118,18131,13055],{"class":128},[118,18133,660],{"class":124},[118,18135,15893],{"class":128},[118,18137,17297],{"class":1967},[118,18139,5641],{"class":128},[118,18141,18142,18144,18146,18148,18150,18152,18154,18156,18158,18160,18162],{"class":120,"line":1321},[118,18143,14743],{"class":124},[118,18145,17314],{"class":128},[118,18147,174],{"class":124},[118,18149,17319],{"class":1967},[118,18151,17322],{"class":128},[118,18153,583],{"class":124},[118,18155,17256],{"class":128},[118,18157,609],{"class":124},[118,18159,17286],{"class":128},[118,18161,583],{"class":124},[118,18163,17335],{"class":128},[118,18165,18166,18168,18170,18172,18174,18176],{"class":120,"line":1333},[118,18167,3105],{"class":124},[118,18169,17342],{"class":128},[118,18171,1038],{"class":124},[118,18173,16347],{"class":128},[118,18175,17349],{"class":1967},[118,18177,17352],{"class":128},[118,18179,18180],{"class":120,"line":1616},[118,18181,2034],{"class":128},[118,18183,18184,18186,18188,18190,18192],{"class":120,"line":1621},[118,18185,9674],{"class":128},[118,18187,1172],{"class":124},[118,18189,17365],{"class":233},[118,18191,1448],{"class":124},[118,18193,8845],{"class":128},[118,18195,18196],{"class":120,"line":1627},[118,18197,2191],{"class":128},[118,18199,18200],{"class":120,"line":1632},[118,18201,16828],{"class":124},[118,18203,18204],{"class":120,"line":1646},[118,18205,2034],{"class":128},[118,18207,18208,18210,18212,18214,18216],{"class":120,"line":1651},[118,18209,9674],{"class":128},[118,18211,1172],{"class":124},[118,18213,17390],{"class":233},[118,18215,1448],{"class":124},[118,18217,8845],{"class":128},[118,18219,18220],{"class":120,"line":1657},[118,18221,2191],{"class":128},[118,18223,18224],{"class":120,"line":1678},[118,18225,1569],{"class":128},[118,18227,18228,18230,18232],{"class":120,"line":1683},[118,18229,132],{"class":124},[118,18231,1977],{"class":1967},[118,18233,1980],{"class":128},[118,18235,18236],{"class":120,"line":1697},[118,18237,1550],{"class":128},[118,18239,18240],{"class":120,"line":1702},[118,18241,15058],{"class":187},[118,18243,18244],{"class":120,"line":1731},[118,18245,14805],{"class":128},[118,18247,18248],{"class":120,"line":1736},[118,18249,17427],{"class":128},[118,18251,18252],{"class":120,"line":1753},[118,18253,16999],{"class":187},[118,18255,18256,18258,18260,18262],{"class":120,"line":1758},[118,18257,1555],{"class":128},[118,18259,1172],{"class":124},[118,18261,17440],{"class":233},[118,18263,1294],{"class":128},[118,18265,18266,18268],{"class":120,"line":1763},[118,18267,14743],{"class":124},[118,18269,17449],{"class":128},[118,18271,18272,18274,18276],{"class":120,"line":1768},[118,18273,2016],{"class":128},[118,18275,1433],{"class":124},[118,18277,17458],{"class":128},[118,18279,18280,18282,18284],{"class":120,"line":1782},[118,18281,16600],{"class":128},[118,18283,17465],{"class":1967},[118,18285,17468],{"class":128},[118,18287,18288,18290,18292,18294],{"class":120,"line":1787},[118,18289,1555],{"class":128},[118,18291,1172],{"class":124},[118,18293,17477],{"class":233},[118,18295,1294],{"class":128},[118,18297,18298,18300],{"class":120,"line":2581},[118,18299,14743],{"class":124},[118,18301,17486],{"class":128},[118,18303,18304,18306,18308,18310,18312],{"class":120,"line":2595},[118,18305,2016],{"class":128},[118,18307,1433],{"class":124},[118,18309,948],{"class":128},[118,18311,1433],{"class":124},[118,18313,17499],{"class":128},[118,18315,18316,18318,18320],{"class":120,"line":2603},[118,18317,17504],{"class":128},[118,18319,17507],{"class":1967},[118,18321,17510],{"class":128},[118,18323,18324,18326,18328],{"class":120,"line":2608},[118,18325,16600],{"class":128},[118,18327,17517],{"class":1967},[118,18329,17520],{"class":128},[118,18331,18332,18334,18336,18338],{"class":120,"line":2614},[118,18333,1555],{"class":128},[118,18335,1172],{"class":124},[118,18337,17529],{"class":233},[118,18339,1294],{"class":128},[118,18341,18342,18344],{"class":120,"line":2620},[118,18343,14743],{"class":124},[118,18345,17538],{"class":128},[118,18347,18348,18350,18352,18354,18356],{"class":120,"line":2625},[118,18349,2016],{"class":128},[118,18351,1433],{"class":124},[118,18353,17547],{"class":128},[118,18355,1433],{"class":124},[118,18357,17552],{"class":128},[118,18359,18360],{"class":120,"line":7953},[118,18361,17557],{"class":128},[118,18363,18364,18366,18368],{"class":120,"line":7977},[118,18365,17562],{"class":128},[118,18367,17507],{"class":1967},[118,18369,17567],{"class":128},[118,18371,18372,18374],{"class":120,"line":7982},[118,18373,17572],{"class":1967},[118,18375,17575],{"class":128},[118,18377,18378],{"class":120,"line":7988},[118,18379,1569],{"class":128},[60,18381,18383],{"id":18382},"_82对象的初始化清理","8.2对象的初始化清理",[1135,18385,18386,18389],{},[75,18387,18388],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[75,18390,18391],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[89,18393,18395],{"id":18394},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[15,18397,18398,18399,18402],{},"对象的",[278,18400,18401],{},"初始化和清理","也是两个非常重要的安全问题",[15,18404,18405],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[15,18407,18408],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[15,18410,18411,18412,18415,18416,18419],{},"c++利用了",[278,18413,18414],{},"构造函数","和",[278,18417,18418],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[15,18421,18422,18423],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[278,18424,18425],{},"我们不提供构造和析构，编译器会提供",[15,18427,18428],{},[278,18429,18430],{},"编译器提供的构造函数和析构函数是空实现。",[1135,18432,18433,18436],{},[75,18434,18435],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[75,18437,18438,18439,18442],{},"析构函数：主要作用在于对象",[278,18440,18441],{},"销毁前","系统自动调用，执行一些清理工作。",[15,18444,18445,18448],{},[278,18446,18447],{},"构造函数语法：",[115,18449,18450],{},"类名(){}",[72,18452,18453,18456,18459,18462,18465],{},[75,18454,18455],{},"构造函数，没有返回值也不写void",[75,18457,18458],{},"函数名称与类名相同",[75,18460,18461],{},"构造函数可以有参数，因此可以发生重载",[75,18463,18464],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[75,18466,18467,18468,557],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[115,18469,18470],{},"Person(){}",[15,18472,18473,13800,18476],{},[278,18474,18475],{},"析构函数语法：",[115,18477,18478],{},"~类名(){}",[72,18480,18481,18484,18487,18493],{},[75,18482,18483],{},"析构函数，没有返回值也不写void",[75,18485,18486],{},"函数名称与类名相同,在名称前加上符号  ~",[75,18488,18489,18490],{},"析构函数不可以有参数，因此",[278,18491,18492],{},"不可以发生重载",[75,18494,18495],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[109,18497,18499],{"className":111,"code":18498,"language":113,"meta":39,"style":39},"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",[115,18500,18501,18507,18511,18515,18520,18527,18531,18544,18548,18553,18560,18564,18577,18581,18585,18589,18593,18601,18605,18613,18617,18621,18629,18633,18638,18642,18649,18653,18666,18670,18678],{"__ignoreMap":39},[118,18502,18503,18505],{"class":120,"line":121},[118,18504,14699],{"class":124},[118,18506,15176],{"class":1967},[118,18508,18509],{"class":120,"line":40},[118,18510,1550],{"class":128},[118,18512,18513],{"class":120,"line":1183},[118,18514,14721],{"class":124},[118,18516,18517],{"class":120,"line":1198},[118,18518,18519],{"class":187},"    \u002F\u002F构造函数\n",[118,18521,18522,18525],{"class":120,"line":1204},[118,18523,18524],{"class":1967},"    Person",[118,18526,1980],{"class":128},[118,18528,18529],{"class":120,"line":1218},[118,18530,2034],{"class":128},[118,18532,18533,18535,18537,18540,18542],{"class":120,"line":1224},[118,18534,9674],{"class":128},[118,18536,1172],{"class":124},[118,18538,18539],{"class":233}," \"Person的构造函数调用\"",[118,18541,1448],{"class":124},[118,18543,8845],{"class":128},[118,18545,18546],{"class":120,"line":1315},[118,18547,2191],{"class":128},[118,18549,18550],{"class":120,"line":1321},[118,18551,18552],{"class":187},"    \u002F\u002F析构函数\n",[118,18554,18555,18558],{"class":120,"line":1333},[118,18556,18557],{"class":1967},"    ~Person",[118,18559,1980],{"class":128},[118,18561,18562],{"class":120,"line":1616},[118,18563,2034],{"class":128},[118,18565,18566,18568,18570,18573,18575],{"class":120,"line":1621},[118,18567,9674],{"class":128},[118,18569,1172],{"class":124},[118,18571,18572],{"class":233}," \"Person的析构函数调用\"",[118,18574,1448],{"class":124},[118,18576,8845],{"class":128},[118,18578,18579],{"class":120,"line":1627},[118,18580,2191],{"class":128},[118,18582,18583],{"class":120,"line":1632},[118,18584,2404],{"emptyLinePlaceholder":45},[118,18586,18587],{"class":120,"line":1646},[118,18588,3999],{"class":128},[118,18590,18591],{"class":120,"line":1651},[118,18592,2404],{"emptyLinePlaceholder":45},[118,18594,18595,18597,18599],{"class":120,"line":1657},[118,18596,5369],{"class":124},[118,18598,5593],{"class":1967},[118,18600,1980],{"class":128},[118,18602,18603],{"class":120,"line":1678},[118,18604,1550],{"class":128},[118,18606,18607,18610],{"class":120,"line":1683},[118,18608,18609],{"class":128},"    Person p;",[118,18611,18612],{"class":187},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[118,18614,18615],{"class":120,"line":1697},[118,18616,1569],{"class":128},[118,18618,18619],{"class":120,"line":1702},[118,18620,2404],{"emptyLinePlaceholder":45},[118,18622,18623,18625,18627],{"class":120,"line":1731},[118,18624,132],{"class":124},[118,18626,1977],{"class":1967},[118,18628,10858],{"class":128},[118,18630,18631],{"class":120,"line":1736},[118,18632,13215],{"class":128},[118,18634,18635],{"class":120,"line":1753},[118,18636,18637],{"class":187},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[118,18639,18640],{"class":120,"line":1758},[118,18641,2404],{"emptyLinePlaceholder":45},[118,18643,18644,18646],{"class":120,"line":1763},[118,18645,18609],{"class":128},[118,18647,18648],{"class":187},"\u002F\u002F只有构造函数\n",[118,18650,18651],{"class":120,"line":1768},[118,18652,2404],{"emptyLinePlaceholder":45},[118,18654,18655,18657,18659,18661,18663],{"class":120,"line":1782},[118,18656,2307],{"class":1967},[118,18658,129],{"class":128},[118,18660,2312],{"class":233},[118,18662,5971],{"class":128},[118,18664,18665],{"class":187},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[118,18667,18668],{"class":120,"line":1787},[118,18669,2404],{"emptyLinePlaceholder":45},[118,18671,18672,18674,18676],{"class":120,"line":2581},[118,18673,4094],{"class":124},[118,18675,4097],{"class":177},[118,18677,1294],{"class":128},[118,18679,18680],{"class":120,"line":2595},[118,18681,1569],{"class":128},[15,18683,18684],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[89,18686,18688],{"id":18687},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[15,18690,18691],{},"两种分类方式：",[15,18693,18694],{},"​\t按参数分为： 有参构造和无参构造",[15,18696,18697],{},"​\t按类型分为： 普通构造和拷贝构造",[15,18699,18700],{},"三种调用方式：",[15,18702,18703],{},"​\t括号法",[15,18705,18706],{},"​\t显示法",[15,18708,18709],{},"​\t隐式转换法",[109,18711,18713],{"className":111,"code":18712,"language":113,"meta":39,"style":39},"#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",[115,18714,18715,18721,18731,18736,18741,18746,18751,18755,18763,18767,18771,18775,18781,18785,18798,18802,18814,18818,18827,18840,18844,18848,18854,18858,18871,18875,18880,18896,18900,18905,18914,18927,18931,18937,18941,18946,18954,18958,18963,18967,18975,18979,18984,18989,18994,18999,19004,19008,19013,19018,19023,19028,19032,19037,19042,19058,19070,19075,19079,19084,19089,19094,19098,19103,19117,19130,19134,19142,19146,19152,19158,19166],{"__ignoreMap":39},[118,18716,18717,18719],{"class":120,"line":121},[118,18718,1953],{"class":124},[118,18720,1956],{"class":233},[118,18722,18723,18725,18727,18729],{"class":120,"line":40},[118,18724,1961],{"class":124},[118,18726,1964],{"class":124},[118,18728,1968],{"class":1967},[118,18730,1294],{"class":128},[118,18732,18733],{"class":120,"line":1183},[118,18734,18735],{"class":187},"\u002F\u002F1.构造函数的分类及调用\n",[118,18737,18738],{"class":120,"line":1198},[118,18739,18740],{"class":187},"\u002F\u002F分类\n",[118,18742,18743],{"class":120,"line":1204},[118,18744,18745],{"class":187},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[118,18747,18748],{"class":120,"line":1218},[118,18749,18750],{"class":187},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[118,18752,18753],{"class":120,"line":1224},[118,18754,2404],{"emptyLinePlaceholder":45},[118,18756,18757,18759,18761],{"class":120,"line":1315},[118,18758,14699],{"class":124},[118,18760,15574],{"class":1967},[118,18762,2678],{"class":128},[118,18764,18765],{"class":120,"line":1321},[118,18766,1550],{"class":128},[118,18768,18769],{"class":120,"line":1333},[118,18770,14721],{"class":124},[118,18772,18773],{"class":120,"line":1616},[118,18774,18519],{"class":187},[118,18776,18777,18779],{"class":120,"line":1621},[118,18778,18524],{"class":1967},[118,18780,1980],{"class":128},[118,18782,18783],{"class":120,"line":1627},[118,18784,2034],{"class":128},[118,18786,18787,18789,18791,18794,18796],{"class":120,"line":1632},[118,18788,3455],{"class":128},[118,18790,1172],{"class":124},[118,18792,18793],{"class":233},"\"Person构造函数无参构造\"",[118,18795,1172],{"class":124},[118,18797,1195],{"class":128},[118,18799,18800],{"class":120,"line":1646},[118,18801,2191],{"class":128},[118,18803,18804,18806,18808,18810,18812],{"class":120,"line":1651},[118,18805,18524],{"class":1967},[118,18807,129],{"class":128},[118,18809,132],{"class":124},[118,18811,1402],{"class":5221},[118,18813,135],{"class":128},[118,18815,18816],{"class":120,"line":1657},[118,18817,2034],{"class":128},[118,18819,18820,18823,18825],{"class":120,"line":1678},[118,18821,18822],{"class":128},"        age",[118,18824,174],{"class":124},[118,18826,6202],{"class":128},[118,18828,18829,18831,18833,18836,18838],{"class":120,"line":1683},[118,18830,3455],{"class":128},[118,18832,1172],{"class":124},[118,18834,18835],{"class":233},"\"Person构造函数有参构造\"",[118,18837,1172],{"class":124},[118,18839,1195],{"class":128},[118,18841,18842],{"class":120,"line":1697},[118,18843,2191],{"class":128},[118,18845,18846],{"class":120,"line":1702},[118,18847,18552],{"class":187},[118,18849,18850,18852],{"class":120,"line":1731},[118,18851,18557],{"class":1967},[118,18853,1980],{"class":128},[118,18855,18856],{"class":120,"line":1736},[118,18857,2034],{"class":128},[118,18859,18860,18862,18864,18867,18869],{"class":120,"line":1753},[118,18861,3455],{"class":128},[118,18863,1172],{"class":124},[118,18865,18866],{"class":233},"\"Person析构函数被调用\"",[118,18868,1172],{"class":124},[118,18870,1195],{"class":128},[118,18872,18873],{"class":120,"line":1758},[118,18874,2191],{"class":128},[118,18876,18877],{"class":120,"line":1763},[118,18878,18879],{"class":187},"    \u002F\u002F拷贝构造函数\n",[118,18881,18882,18884,18886,18888,18890,18892,18894],{"class":120,"line":1768},[118,18883,18524],{"class":1967},[118,18885,129],{"class":128},[118,18887,6797],{"class":124},[118,18889,15574],{"class":1967},[118,18891,10589],{"class":124},[118,18893,15],{"class":5221},[118,18895,135],{"class":128},[118,18897,18898],{"class":120,"line":1782},[118,18899,2034],{"class":128},[118,18901,18902],{"class":120,"line":1787},[118,18903,18904],{"class":187},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[118,18906,18907,18909,18911],{"class":120,"line":2581},[118,18908,18822],{"class":128},[118,18910,174],{"class":124},[118,18912,18913],{"class":128},"p.age;\n",[118,18915,18916,18918,18920,18923,18925],{"class":120,"line":2595},[118,18917,3455],{"class":128},[118,18919,1172],{"class":124},[118,18921,18922],{"class":233},"\"Person拷贝构造函数被调用\"",[118,18924,1172],{"class":124},[118,18926,1195],{"class":128},[118,18928,18929],{"class":120,"line":2603},[118,18930,2191],{"class":128},[118,18932,18933,18935],{"class":120,"line":2608},[118,18934,1989],{"class":124},[118,18936,7802],{"class":128},[118,18938,18939],{"class":120,"line":2614},[118,18940,3999],{"class":128},[118,18942,18943],{"class":120,"line":2620},[118,18944,18945],{"class":187},"\u002F\u002F调用\n",[118,18947,18948,18950,18952],{"class":120,"line":2625},[118,18949,5369],{"class":124},[118,18951,5593],{"class":1967},[118,18953,1980],{"class":128},[118,18955,18956],{"class":120,"line":7953},[118,18957,1550],{"class":128},[118,18959,18960],{"class":120,"line":7977},[118,18961,18962],{"class":187},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[118,18964,18965],{"class":120,"line":7982},[118,18966,1569],{"class":128},[118,18968,18969,18971,18973],{"class":120,"line":7988},[118,18970,5369],{"class":124},[118,18972,5662],{"class":1967},[118,18974,1980],{"class":128},[118,18976,18977],{"class":120,"line":8015},[118,18978,1550],{"class":128},[118,18980,18981],{"class":120,"line":8020},[118,18982,18983],{"class":187},"    \u002F\u002F1.括号法\n",[118,18985,18986],{"class":120,"line":8026},[118,18987,18988],{"class":187},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[118,18990,18991],{"class":120,"line":8038},[118,18992,18993],{"class":187},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[118,18995,18996],{"class":120,"line":8050},[118,18997,18998],{"class":187},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[118,19000,19001],{"class":120,"line":8062},[118,19002,19003],{"class":187},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[118,19005,19006],{"class":120,"line":9721},[118,19007,2404],{"emptyLinePlaceholder":45},[118,19009,19010],{"class":120,"line":9746},[118,19011,19012],{"class":187},"    \u002F\u002F注意事项\n",[118,19014,19015],{"class":120,"line":9769},[118,19016,19017],{"class":187},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[118,19019,19020],{"class":120,"line":9793},[118,19021,19022],{"class":187},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[118,19024,19025],{"class":120,"line":9798},[118,19026,19027],{"class":187},"    \u002F\u002F Person p4();\n",[118,19029,19030],{"class":120,"line":9803},[118,19031,2404],{"emptyLinePlaceholder":45},[118,19033,19034],{"class":120,"line":9808},[118,19035,19036],{"class":187},"    \u002F\u002F2.显示法\n",[118,19038,19039],{"class":120,"line":9817},[118,19040,19041],{"class":128},"    Person p1;\n",[118,19043,19044,19047,19049,19052,19054,19056],{"class":120,"line":9822},[118,19045,19046],{"class":128},"    Person p2",[118,19048,174],{"class":124},[118,19050,19051],{"class":1967},"Person",[118,19053,129],{"class":128},[118,19055,574],{"class":177},[118,19057,2723],{"class":128},[118,19059,19060,19063,19065,19067],{"class":120,"line":9828},[118,19061,19062],{"class":128},"    Person p3",[118,19064,174],{"class":124},[118,19066,19051],{"class":1967},[118,19068,19069],{"class":128},"(p2);\n",[118,19071,19072],{"class":120,"line":9849},[118,19073,19074],{"class":187},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[118,19076,19077],{"class":120,"line":9855},[118,19078,2404],{"emptyLinePlaceholder":45},[118,19080,19081],{"class":120,"line":9869},[118,19082,19083],{"class":187},"    \u002F\u002F 注意事项2\n",[118,19085,19086],{"class":120,"line":9875},[118,19087,19088],{"class":187},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[118,19090,19091],{"class":120,"line":9902},[118,19092,19093],{"class":187},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[118,19095,19096],{"class":120,"line":9911},[118,19097,2404],{"emptyLinePlaceholder":45},[118,19099,19100],{"class":120,"line":9917},[118,19101,19102],{"class":187},"    \u002F\u002F3.隐士转换法\n",[118,19104,19105,19108,19110,19112,19114],{"class":120,"line":9925},[118,19106,19107],{"class":128},"    Person p4",[118,19109,174],{"class":124},[118,19111,574],{"class":177},[118,19113,184],{"class":128},[118,19115,19116],{"class":187},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[118,19118,19119,19122,19124,19127],{"class":120,"line":9930},[118,19120,19121],{"class":128},"    Person p5",[118,19123,174],{"class":124},[118,19125,19126],{"class":128},"p4;",[118,19128,19129],{"class":187}," \u002F\u002F 这里会调用拷贝构造函数\n",[118,19131,19132],{"class":120,"line":16609},[118,19133,1569],{"class":128},[118,19135,19136,19138,19140],{"class":120,"line":16615},[118,19137,132],{"class":124},[118,19139,1977],{"class":1967},[118,19141,1980],{"class":128},[118,19143,19144],{"class":120,"line":16638},[118,19145,1550],{"class":128},[118,19147,19148,19150],{"class":120,"line":16644},[118,19149,5638],{"class":1967},[118,19151,5641],{"class":128},[118,19153,19154,19156],{"class":120,"line":16667},[118,19155,5707],{"class":1967},[118,19157,5641],{"class":128},[118,19159,19160,19162,19164],{"class":120,"line":16681},[118,19161,4094],{"class":124},[118,19163,4097],{"class":177},[118,19165,1294],{"class":128},[118,19167,19168],{"class":120,"line":16701},[118,19169,1569],{"class":128},[15,19171,19172,19175],{},[278,19173,19174],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[89,19177,19179],{"id":19178},"_823拷贝构造函数","8.2.3拷贝构造函数",[15,19181,19182],{},"C++中拷贝构造函数调用时机通常有三种情况",[1135,19184,19185,19188,19191],{},[75,19186,19187],{},"使用一个已经创建完毕的对象来初始化一个新对象",[75,19189,19190],{},"值传递的方式给函数参数传值",[75,19192,19193],{},"以值方式返回局部对象",[109,19195,19197],{"className":111,"code":19196,"language":113,"meta":39,"style":39},"#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",[115,19198,19199,19205,19215,19219,19224,19228,19233,19238,19243,19249,19253,19257,19263,19267,19280,19284,19289,19301,19305,19313,19326,19330,19334,19350,19354,19363,19376,19380,19386,19390,19402,19406,19412,19416,19420,19428,19432,19445,19453,19471,19475,19480,19485,19500,19504,19517,19521,19529,19533,19537,19545,19549,19554,19563,19567,19571,19596,19606,19610,19618,19622,19633,19658,19662,19666,19670,19678,19682,19687,19692,19699,19704,19709,19714,19719,19723,19728,19732,19737,19741,19746,19751,19755,19759,19764,19769,19777],{"__ignoreMap":39},[118,19200,19201,19203],{"class":120,"line":121},[118,19202,1953],{"class":124},[118,19204,1956],{"class":233},[118,19206,19207,19209,19211,19213],{"class":120,"line":40},[118,19208,1961],{"class":124},[118,19210,1964],{"class":124},[118,19212,1968],{"class":1967},[118,19214,1294],{"class":128},[118,19216,19217],{"class":120,"line":1183},[118,19218,2404],{"emptyLinePlaceholder":45},[118,19220,19221],{"class":120,"line":1198},[118,19222,19223],{"class":187},"\u002F\u002F拷贝构造函数调用时机\n",[118,19225,19226],{"class":120,"line":1204},[118,19227,2404],{"emptyLinePlaceholder":45},[118,19229,19230],{"class":120,"line":1218},[118,19231,19232],{"class":187},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[118,19234,19235],{"class":120,"line":1224},[118,19236,19237],{"class":187},"\u002F\u002F2.值传递的方式给函数参数传值\n",[118,19239,19240],{"class":120,"line":1315},[118,19241,19242],{"class":187},"\u002F\u002F3.以值方式返回局部对象\n",[118,19244,19245,19247],{"class":120,"line":1321},[118,19246,14699],{"class":124},[118,19248,15176],{"class":1967},[118,19250,19251],{"class":120,"line":1333},[118,19252,1550],{"class":128},[118,19254,19255],{"class":120,"line":1616},[118,19256,14721],{"class":124},[118,19258,19259,19261],{"class":120,"line":1621},[118,19260,18524],{"class":1967},[118,19262,1980],{"class":128},[118,19264,19265],{"class":120,"line":1627},[118,19266,2034],{"class":128},[118,19268,19269,19271,19273,19276,19278],{"class":120,"line":1632},[118,19270,9674],{"class":128},[118,19272,1172],{"class":124},[118,19274,19275],{"class":233}," \"Person的默认构造函数调用\"",[118,19277,1448],{"class":124},[118,19279,8845],{"class":128},[118,19281,19282],{"class":120,"line":1646},[118,19283,2191],{"class":128},[118,19285,19286],{"class":120,"line":1651},[118,19287,19288],{"class":187},"    \u002F\u002F有参构造\n",[118,19290,19291,19293,19295,19297,19299],{"class":120,"line":1657},[118,19292,18524],{"class":1967},[118,19294,129],{"class":128},[118,19296,132],{"class":124},[118,19298,15694],{"class":5221},[118,19300,135],{"class":128},[118,19302,19303],{"class":120,"line":1678},[118,19304,2034],{"class":128},[118,19306,19307,19309,19311],{"class":120,"line":1683},[118,19308,15748],{"class":128},[118,19310,174],{"class":124},[118,19312,7802],{"class":128},[118,19314,19315,19317,19319,19322,19324],{"class":120,"line":1697},[118,19316,9674],{"class":128},[118,19318,1172],{"class":124},[118,19320,19321],{"class":233}," \"Person的有参构造函数调用\"",[118,19323,1448],{"class":124},[118,19325,8845],{"class":128},[118,19327,19328],{"class":120,"line":1702},[118,19329,2191],{"class":128},[118,19331,19332],{"class":120,"line":1731},[118,19333,18879],{"class":187},[118,19335,19336,19338,19340,19342,19344,19346,19348],{"class":120,"line":1736},[118,19337,18524],{"class":1967},[118,19339,129],{"class":128},[118,19341,6797],{"class":124},[118,19343,15574],{"class":1967},[118,19345,10589],{"class":124},[118,19347,15],{"class":5221},[118,19349,135],{"class":128},[118,19351,19352],{"class":120,"line":1753},[118,19353,2034],{"class":128},[118,19355,19356,19358,19360],{"class":120,"line":1758},[118,19357,15748],{"class":128},[118,19359,174],{"class":124},[118,19361,19362],{"class":128}," p.m_Age;\n",[118,19364,19365,19367,19369,19372,19374],{"class":120,"line":1763},[118,19366,9674],{"class":128},[118,19368,1172],{"class":124},[118,19370,19371],{"class":233}," \"Person的拷贝构造函数调用\"",[118,19373,1448],{"class":124},[118,19375,8845],{"class":128},[118,19377,19378],{"class":120,"line":1768},[118,19379,2191],{"class":128},[118,19381,19382,19384],{"class":120,"line":1782},[118,19383,18557],{"class":1967},[118,19385,1980],{"class":128},[118,19387,19388],{"class":120,"line":1787},[118,19389,2034],{"class":128},[118,19391,19392,19394,19396,19398,19400],{"class":120,"line":2581},[118,19393,9674],{"class":128},[118,19395,1172],{"class":124},[118,19397,18572],{"class":233},[118,19399,1448],{"class":124},[118,19401,8845],{"class":128},[118,19403,19404],{"class":120,"line":2595},[118,19405,2191],{"class":128},[118,19407,19408,19410],{"class":120,"line":2603},[118,19409,1989],{"class":124},[118,19411,15671],{"class":128},[118,19413,19414],{"class":120,"line":2608},[118,19415,3999],{"class":128},[118,19417,19418],{"class":120,"line":2614},[118,19419,19232],{"class":187},[118,19421,19422,19424,19426],{"class":120,"line":2620},[118,19423,5369],{"class":124},[118,19425,5593],{"class":1967},[118,19427,1980],{"class":128},[118,19429,19430],{"class":120,"line":2625},[118,19431,1550],{"class":128},[118,19433,19434,19437,19439,19441,19443],{"class":120,"line":7953},[118,19435,19436],{"class":128},"    Person ",[118,19438,7135],{"class":1967},[118,19440,129],{"class":128},[118,19442,828],{"class":177},[118,19444,2723],{"class":128},[118,19446,19447,19449,19451],{"class":120,"line":7977},[118,19448,19436],{"class":128},[118,19450,7038],{"class":1967},[118,19452,17520],{"class":128},[118,19454,19455,19457,19459,19462,19464,19467,19469],{"class":120,"line":7982},[118,19456,1555],{"class":128},[118,19458,1172],{"class":124},[118,19460,19461],{"class":233},"\"P2的年龄为：\"",[118,19463,1172],{"class":124},[118,19465,19466],{"class":128},"p2.m_Age",[118,19468,1172],{"class":124},[118,19470,1195],{"class":128},[118,19472,19473],{"class":120,"line":7988},[118,19474,1569],{"class":128},[118,19476,19477],{"class":120,"line":8015},[118,19478,19479],{"class":187},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[118,19481,19482],{"class":120,"line":8020},[118,19483,19484],{"class":187},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[118,19486,19487,19489,19492,19494,19496,19498],{"class":120,"line":8026},[118,19488,5369],{"class":124},[118,19490,19491],{"class":1967}," doWork",[118,19493,129],{"class":128},[118,19495,19051],{"class":1967},[118,19497,6830],{"class":5221},[118,19499,135],{"class":128},[118,19501,19502],{"class":120,"line":8038},[118,19503,1550],{"class":128},[118,19505,19506,19508,19510,19513,19515],{"class":120,"line":8050},[118,19507,6534],{"class":128},[118,19509,1172],{"class":124},[118,19511,19512],{"class":233}," \"doWork函数调用\"",[118,19514,1448],{"class":124},[118,19516,8845],{"class":128},[118,19518,19519],{"class":120,"line":8062},[118,19520,1569],{"class":128},[118,19522,19523,19525,19527],{"class":120,"line":9721},[118,19524,5369],{"class":124},[118,19526,5662],{"class":1967},[118,19528,1980],{"class":128},[118,19530,19531],{"class":120,"line":9746},[118,19532,1550],{"class":128},[118,19534,19535],{"class":120,"line":9769},[118,19536,15318],{"class":128},[118,19538,19539,19542],{"class":120,"line":9793},[118,19540,19541],{"class":1967},"    doWork",[118,19543,19544],{"class":128},"(p);\n",[118,19546,19547],{"class":120,"line":9798},[118,19548,1569],{"class":128},[118,19550,19551],{"class":120,"line":9803},[118,19552,19553],{"class":187},"\u002F\u002F 3.以值方式返回局部对象\n",[118,19555,19556,19558,19561],{"class":120,"line":9808},[118,19557,19051],{"class":1967},[118,19559,19560],{"class":1967}," doWork2",[118,19562,1980],{"class":128},[118,19564,19565],{"class":120,"line":9817},[118,19566,1550],{"class":128},[118,19568,19569],{"class":120,"line":9822},[118,19570,19041],{"class":128},[118,19572,19573,19575,19577,19579,19581,19583,19585,19587,19589,19591,19593],{"class":120,"line":9828},[118,19574,1555],{"class":128},[118,19576,1172],{"class":124},[118,19578,129],{"class":128},[118,19580,132],{"class":124},[118,19582,6523],{"class":124},[118,19584,557],{"class":128},[118,19586,481],{"class":124},[118,19588,7135],{"class":128},[118,19590,1172],{"class":124},[118,19592,1242],{"class":128},[118,19594,19595],{"class":187},"\u002F\u002F打印p1的地址\n",[118,19597,19598,19600,19603],{"class":120,"line":9849},[118,19599,4094],{"class":124},[118,19601,19602],{"class":128}," p1;",[118,19604,19605],{"class":187},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[118,19607,19608],{"class":120,"line":9855},[118,19609,1569],{"class":128},[118,19611,19612,19614,19616],{"class":120,"line":9869},[118,19613,5369],{"class":124},[118,19615,5734],{"class":1967},[118,19617,1980],{"class":128},[118,19619,19620],{"class":120,"line":9875},[118,19621,1550],{"class":128},[118,19623,19624,19627,19629,19631],{"class":120,"line":9902},[118,19625,19626],{"class":128},"    Person p ",[118,19628,174],{"class":124},[118,19630,19560],{"class":1967},[118,19632,5641],{"class":128},[118,19634,19635,19637,19639,19641,19643,19645,19647,19649,19651,19653,19655],{"class":120,"line":9911},[118,19636,1555],{"class":128},[118,19638,1172],{"class":124},[118,19640,129],{"class":128},[118,19642,132],{"class":124},[118,19644,6523],{"class":124},[118,19646,557],{"class":128},[118,19648,481],{"class":124},[118,19650,15],{"class":128},[118,19652,1172],{"class":124},[118,19654,1242],{"class":128},[118,19656,19657],{"class":187},"\u002F\u002F打印p的地址\n",[118,19659,19660],{"class":120,"line":9917},[118,19661,1569],{"class":128},[118,19663,19664],{"class":120,"line":9925},[118,19665,2404],{"emptyLinePlaceholder":45},[118,19667,19668],{"class":120,"line":9930},[118,19669,2404],{"emptyLinePlaceholder":45},[118,19671,19672,19674,19676],{"class":120,"line":16609},[118,19673,132],{"class":124},[118,19675,1977],{"class":1967},[118,19677,1980],{"class":128},[118,19679,19680],{"class":120,"line":16615},[118,19681,1550],{"class":128},[118,19683,19684],{"class":120,"line":16638},[118,19685,19686],{"class":187},"    \u002F\u002F test01();\n",[118,19688,19689],{"class":120,"line":16644},[118,19690,19691],{"class":187},"    \u002F\u002F test02();\n",[118,19693,19694,19697],{"class":120,"line":16667},[118,19695,19696],{"class":1967},"    test03",[118,19698,5641],{"class":128},[118,19700,19701],{"class":120,"line":16681},[118,19702,19703],{"class":187},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[118,19705,19706],{"class":120,"line":16701},[118,19707,19708],{"class":187},"\u002F\u002F 输出结果如下：\n",[118,19710,19711],{"class":120,"line":16707},[118,19712,19713],{"class":187},"\u002F\u002F Person的默认构造函数调用\n",[118,19715,19716],{"class":120,"line":16718},[118,19717,19718],{"class":187},"\u002F\u002F 0x7fffffffceec\n",[118,19720,19721],{"class":120,"line":16741},[118,19722,19718],{"class":187},[118,19724,19725],{"class":120,"line":16763},[118,19726,19727],{"class":187},"\u002F\u002F Person的析构函数调用\n",[118,19729,19730],{"class":120,"line":16768},[118,19731,2404],{"emptyLinePlaceholder":45},[118,19733,19734],{"class":120,"line":16774},[118,19735,19736],{"class":187},"\u002F\u002F 之前的输出结果如下：\n",[118,19738,19739],{"class":120,"line":16788},[118,19740,19713],{"class":187},[118,19742,19743],{"class":120,"line":16801},[118,19744,19745],{"class":187},"\u002F\u002F 地址\n",[118,19747,19748],{"class":120,"line":16806},[118,19749,19750],{"class":187},"\u002F\u002F Person的拷贝构造函数调用\n",[118,19752,19753],{"class":120,"line":16820},[118,19754,19727],{"class":187},[118,19756,19757],{"class":120,"line":16825},[118,19758,19745],{"class":187},[118,19760,19761],{"class":120,"line":16831},[118,19762,19763],{"class":187},"\u002F\u002F (这两次输出的地址也是不同的) \n",[118,19765,19766],{"class":120,"line":16836},[118,19767,19768],{"class":187},"\u002F\u002F Person的析构函数调用     \n",[118,19770,19771,19773,19775],{"class":120,"line":16850},[118,19772,4094],{"class":124},[118,19774,4097],{"class":177},[118,19776,1294],{"class":128},[118,19778,19779],{"class":120,"line":16855},[118,19780,1569],{"class":128},[15,19782,19783],{},"简化版理解",[109,19785,19787],{"className":111,"code":19786,"language":113,"meta":39,"style":39},"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",[115,19788,19789,19797,19801,19807,19820,19831,19835,19847,19860,19868,19872,19888,19901,19910,19914,19919,19925,19938,19942,19946,19953,19957,19961,19966,19974,19978,19994,20007,20020,20024,20029,20037,20041,20045,20050,20055,20071,20079,20086,20092,20096,20100,20105,20113,20117,20121,20144,20151,20155,20159,20167,20171,20181,20203,20207,20211,20215,20223,20227,20232,20237,20243,20247,20257,20261,20269],{"__ignoreMap":39},[118,19790,19791,19793,19795],{"class":120,"line":121},[118,19792,14699],{"class":124},[118,19794,15574],{"class":1967},[118,19796,15577],{"class":128},[118,19798,19799],{"class":120,"line":40},[118,19800,14721],{"class":124},[118,19802,19803,19805],{"class":120,"line":1183},[118,19804,18524],{"class":1967},[118,19806,10858],{"class":128},[118,19808,19809,19811,19813,19816,19818],{"class":120,"line":1198},[118,19810,9674],{"class":128},[118,19812,1172],{"class":124},[118,19814,19815],{"class":233}," \"无参构造函数!\"",[118,19817,1448],{"class":124},[118,19819,8845],{"class":128},[118,19821,19822,19825,19827,19829],{"class":120,"line":1204},[118,19823,19824],{"class":128},"        mAge ",[118,19826,174],{"class":124},[118,19828,4097],{"class":177},[118,19830,1294],{"class":128},[118,19832,19833],{"class":120,"line":1218},[118,19834,2191],{"class":128},[118,19836,19837,19839,19841,19843,19845],{"class":120,"line":1224},[118,19838,18524],{"class":1967},[118,19840,129],{"class":128},[118,19842,132],{"class":124},[118,19844,15694],{"class":5221},[118,19846,12447],{"class":128},[118,19848,19849,19851,19853,19856,19858],{"class":120,"line":1315},[118,19850,9674],{"class":128},[118,19852,1172],{"class":124},[118,19854,19855],{"class":233}," \"有参构造函数!\"",[118,19857,1448],{"class":124},[118,19859,8845],{"class":128},[118,19861,19862,19864,19866],{"class":120,"line":1321},[118,19863,19824],{"class":128},[118,19865,174],{"class":124},[118,19867,7802],{"class":128},[118,19869,19870],{"class":120,"line":1333},[118,19871,2191],{"class":128},[118,19873,19874,19876,19878,19880,19882,19884,19886],{"class":120,"line":1616},[118,19875,18524],{"class":1967},[118,19877,129],{"class":128},[118,19879,6797],{"class":124},[118,19881,15574],{"class":1967},[118,19883,481],{"class":124},[118,19885,6830],{"class":5221},[118,19887,12447],{"class":128},[118,19889,19890,19892,19894,19897,19899],{"class":120,"line":1621},[118,19891,9674],{"class":128},[118,19893,1172],{"class":124},[118,19895,19896],{"class":233}," \"拷贝构造函数!\"",[118,19898,1448],{"class":124},[118,19900,8845],{"class":128},[118,19902,19903,19905,19907],{"class":120,"line":1627},[118,19904,19824],{"class":128},[118,19906,174],{"class":124},[118,19908,19909],{"class":128}," p.mAge;\n",[118,19911,19912],{"class":120,"line":1632},[118,19913,2191],{"class":128},[118,19915,19916],{"class":120,"line":1646},[118,19917,19918],{"class":187},"    \u002F\u002F析构函数在释放内存之前调用\n",[118,19920,19921,19923],{"class":120,"line":1651},[118,19922,18557],{"class":1967},[118,19924,10858],{"class":128},[118,19926,19927,19929,19931,19934,19936],{"class":120,"line":1657},[118,19928,9674],{"class":128},[118,19930,1172],{"class":124},[118,19932,19933],{"class":233}," \"析构函数!\"",[118,19935,1448],{"class":124},[118,19937,8845],{"class":128},[118,19939,19940],{"class":120,"line":1678},[118,19941,2191],{"class":128},[118,19943,19944],{"class":120,"line":1683},[118,19945,14721],{"class":124},[118,19947,19948,19950],{"class":120,"line":1697},[118,19949,1989],{"class":124},[118,19951,19952],{"class":128}," mAge;\n",[118,19954,19955],{"class":120,"line":1702},[118,19956,3999],{"class":128},[118,19958,19959],{"class":120,"line":1731},[118,19960,2404],{"emptyLinePlaceholder":45},[118,19962,19963],{"class":120,"line":1736},[118,19964,19965],{"class":187},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[118,19967,19968,19970,19972],{"class":120,"line":1753},[118,19969,5369],{"class":124},[118,19971,5593],{"class":1967},[118,19973,10858],{"class":128},[118,19975,19976],{"class":120,"line":1758},[118,19977,2404],{"emptyLinePlaceholder":45},[118,19979,19980,19982,19985,19987,19989,19991],{"class":120,"line":1763},[118,19981,19436],{"class":128},[118,19983,19984],{"class":1967},"man",[118,19986,129],{"class":128},[118,19988,439],{"class":177},[118,19990,5971],{"class":128},[118,19992,19993],{"class":187}," \u002F\u002Fp对象已经创建完毕\n",[118,19995,19996,19998,20001,20004],{"class":120,"line":1768},[118,19997,19436],{"class":128},[118,19999,20000],{"class":1967},"newman",[118,20002,20003],{"class":128},"(man);",[118,20005,20006],{"class":187}," \u002F\u002F调用拷贝构造函数\n",[118,20008,20009,20012,20014,20017],{"class":120,"line":1782},[118,20010,20011],{"class":128},"    Person newman2 ",[118,20013,174],{"class":124},[118,20015,20016],{"class":128}," man;",[118,20018,20019],{"class":187}," \u002F\u002F拷贝构造\n",[118,20021,20022],{"class":120,"line":1787},[118,20023,2404],{"emptyLinePlaceholder":45},[118,20025,20026],{"class":120,"line":2581},[118,20027,20028],{"class":187},"    \u002F\u002FPerson newman3;\n",[118,20030,20031,20034],{"class":120,"line":2595},[118,20032,20033],{"class":187},"    \u002F\u002Fnewman3 = man;",[118,20035,20036],{"class":187}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[118,20038,20039],{"class":120,"line":2603},[118,20040,1569],{"class":128},[118,20042,20043],{"class":120,"line":2608},[118,20044,2404],{"emptyLinePlaceholder":45},[118,20046,20047],{"class":120,"line":2614},[118,20048,20049],{"class":187},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[118,20051,20052],{"class":120,"line":2620},[118,20053,20054],{"class":187},"\u002F\u002F相当于Person p1 = p;\n",[118,20056,20057,20059,20061,20063,20065,20068],{"class":120,"line":2625},[118,20058,5369],{"class":124},[118,20060,19491],{"class":1967},[118,20062,129],{"class":128},[118,20064,19051],{"class":1967},[118,20066,20067],{"class":5221}," p1",[118,20069,20070],{"class":128},") {}\n",[118,20072,20073,20075,20077],{"class":120,"line":7953},[118,20074,5369],{"class":124},[118,20076,5662],{"class":1967},[118,20078,10858],{"class":128},[118,20080,20081,20083],{"class":120,"line":7977},[118,20082,18609],{"class":128},[118,20084,20085],{"class":187}," \u002F\u002F无参构造函数\n",[118,20087,20088,20090],{"class":120,"line":7982},[118,20089,19541],{"class":1967},[118,20091,19544],{"class":128},[118,20093,20094],{"class":120,"line":7988},[118,20095,1569],{"class":128},[118,20097,20098],{"class":120,"line":8015},[118,20099,2404],{"emptyLinePlaceholder":45},[118,20101,20102],{"class":120,"line":8020},[118,20103,20104],{"class":187},"\u002F\u002F3. 以值方式返回局部对象\n",[118,20106,20107,20109,20111],{"class":120,"line":8026},[118,20108,19051],{"class":1967},[118,20110,19560],{"class":1967},[118,20112,1980],{"class":128},[118,20114,20115],{"class":120,"line":8038},[118,20116,1550],{"class":128},[118,20118,20119],{"class":120,"line":8050},[118,20120,19041],{"class":128},[118,20122,20123,20125,20127,20129,20131,20133,20135,20137,20140,20142],{"class":120,"line":8062},[118,20124,6534],{"class":128},[118,20126,1172],{"class":124},[118,20128,1662],{"class":128},[118,20130,132],{"class":124},[118,20132,6523],{"class":124},[118,20134,557],{"class":128},[118,20136,481],{"class":124},[118,20138,20139],{"class":128},"p1 ",[118,20141,1172],{"class":124},[118,20143,8845],{"class":128},[118,20145,20146,20148],{"class":120,"line":9721},[118,20147,4094],{"class":124},[118,20149,20150],{"class":128}," p1;\n",[118,20152,20153],{"class":120,"line":9746},[118,20154,1569],{"class":128},[118,20156,20157],{"class":120,"line":9769},[118,20158,2404],{"emptyLinePlaceholder":45},[118,20160,20161,20163,20165],{"class":120,"line":9793},[118,20162,5369],{"class":124},[118,20164,5734],{"class":1967},[118,20166,1980],{"class":128},[118,20168,20169],{"class":120,"line":9798},[118,20170,1550],{"class":128},[118,20172,20173,20175,20177,20179],{"class":120,"line":9803},[118,20174,19626],{"class":128},[118,20176,174],{"class":124},[118,20178,19560],{"class":1967},[118,20180,5641],{"class":128},[118,20182,20183,20185,20187,20189,20191,20193,20195,20197,20199,20201],{"class":120,"line":9808},[118,20184,6534],{"class":128},[118,20186,1172],{"class":124},[118,20188,1662],{"class":128},[118,20190,132],{"class":124},[118,20192,6523],{"class":124},[118,20194,557],{"class":128},[118,20196,481],{"class":124},[118,20198,11453],{"class":128},[118,20200,1172],{"class":124},[118,20202,8845],{"class":128},[118,20204,20205],{"class":120,"line":9817},[118,20206,1569],{"class":128},[118,20208,20209],{"class":120,"line":9822},[118,20210,2404],{"emptyLinePlaceholder":45},[118,20212,20213],{"class":120,"line":9828},[118,20214,2404],{"emptyLinePlaceholder":45},[118,20216,20217,20219,20221],{"class":120,"line":9849},[118,20218,132],{"class":124},[118,20220,1977],{"class":1967},[118,20222,10858],{"class":128},[118,20224,20225],{"class":120,"line":9855},[118,20226,2404],{"emptyLinePlaceholder":45},[118,20228,20229],{"class":120,"line":9869},[118,20230,20231],{"class":187},"    \u002F\u002Ftest01();\n",[118,20233,20234],{"class":120,"line":9875},[118,20235,20236],{"class":187},"    \u002F\u002Ftest02();\n",[118,20238,20239,20241],{"class":120,"line":9902},[118,20240,19696],{"class":1967},[118,20242,5641],{"class":128},[118,20244,20245],{"class":120,"line":9911},[118,20246,2404],{"emptyLinePlaceholder":45},[118,20248,20249,20251,20253,20255],{"class":120,"line":9917},[118,20250,2307],{"class":1967},[118,20252,129],{"class":128},[118,20254,2312],{"class":233},[118,20256,2723],{"class":128},[118,20258,20259],{"class":120,"line":9925},[118,20260,2404],{"emptyLinePlaceholder":45},[118,20262,20263,20265,20267],{"class":120,"line":9930},[118,20264,4094],{"class":124},[118,20266,4097],{"class":177},[118,20268,1294],{"class":128},[118,20270,20271],{"class":120,"line":16609},[118,20272,1569],{"class":128},[89,20274,20276],{"id":20275},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[15,20278,20279],{},"默认情况下，c++编译器至少给一个类添加3个函数",[15,20281,20282],{},"1．默认构造函数(无参，函数体为空)",[15,20284,20285],{},"2．默认析构函数(无参，函数体为空)",[15,20287,20288],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[15,20290,20291],{},"构造函数调用规则如下：",[1135,20293,20294,20297],{},[75,20295,20296],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[75,20298,20299],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[109,20301,20303],{"className":111,"code":20302,"language":113,"meta":39,"style":39},"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",[115,20304,20305,20313,20317,20322,20328,20340,20344,20349,20361,20370,20382,20386,20390,20406,20415,20427,20431,20435,20441,20453,20457,20461,20467,20471,20475,20483,20487,20499,20504,20512,20516,20534,20538,20542,20550,20554,20559,20567,20582,20595,20599,20604,20611,20627,20640,20644,20648,20656,20660,20666,20670,20680,20684,20692],{"__ignoreMap":39},[118,20306,20307,20309,20311],{"class":120,"line":121},[118,20308,14699],{"class":124},[118,20310,15574],{"class":1967},[118,20312,15577],{"class":128},[118,20314,20315],{"class":120,"line":40},[118,20316,14721],{"class":124},[118,20318,20319],{"class":120,"line":1183},[118,20320,20321],{"class":187},"    \u002F\u002F无参（默认）构造函数\n",[118,20323,20324,20326],{"class":120,"line":1198},[118,20325,18524],{"class":1967},[118,20327,10858],{"class":128},[118,20329,20330,20332,20334,20336,20338],{"class":120,"line":1204},[118,20331,9674],{"class":128},[118,20333,1172],{"class":124},[118,20335,19815],{"class":233},[118,20337,1448],{"class":124},[118,20339,8845],{"class":128},[118,20341,20342],{"class":120,"line":1218},[118,20343,2191],{"class":128},[118,20345,20346],{"class":120,"line":1224},[118,20347,20348],{"class":187},"    \u002F\u002F有参构造函数\n",[118,20350,20351,20353,20355,20357,20359],{"class":120,"line":1315},[118,20352,18524],{"class":1967},[118,20354,129],{"class":128},[118,20356,132],{"class":124},[118,20358,1402],{"class":5221},[118,20360,12447],{"class":128},[118,20362,20363,20366,20368],{"class":120,"line":1321},[118,20364,20365],{"class":128},"        age ",[118,20367,174],{"class":124},[118,20369,1436],{"class":128},[118,20371,20372,20374,20376,20378,20380],{"class":120,"line":1333},[118,20373,9674],{"class":128},[118,20375,1172],{"class":124},[118,20377,19855],{"class":233},[118,20379,1448],{"class":124},[118,20381,8845],{"class":128},[118,20383,20384],{"class":120,"line":1616},[118,20385,2191],{"class":128},[118,20387,20388],{"class":120,"line":1621},[118,20389,18879],{"class":187},[118,20391,20392,20394,20396,20398,20400,20402,20404],{"class":120,"line":1627},[118,20393,18524],{"class":1967},[118,20395,129],{"class":128},[118,20397,6797],{"class":124},[118,20399,15574],{"class":1967},[118,20401,481],{"class":124},[118,20403,6830],{"class":5221},[118,20405,12447],{"class":128},[118,20407,20408,20410,20412],{"class":120,"line":1632},[118,20409,20365],{"class":128},[118,20411,174],{"class":124},[118,20413,20414],{"class":128}," p.age;\n",[118,20416,20417,20419,20421,20423,20425],{"class":120,"line":1646},[118,20418,9674],{"class":128},[118,20420,1172],{"class":124},[118,20422,19896],{"class":233},[118,20424,1448],{"class":124},[118,20426,8845],{"class":128},[118,20428,20429],{"class":120,"line":1651},[118,20430,2191],{"class":128},[118,20432,20433],{"class":120,"line":1657},[118,20434,18552],{"class":187},[118,20436,20437,20439],{"class":120,"line":1678},[118,20438,18557],{"class":1967},[118,20440,10858],{"class":128},[118,20442,20443,20445,20447,20449,20451],{"class":120,"line":1683},[118,20444,9674],{"class":128},[118,20446,1172],{"class":124},[118,20448,19933],{"class":233},[118,20450,1448],{"class":124},[118,20452,8845],{"class":128},[118,20454,20455],{"class":120,"line":1697},[118,20456,2191],{"class":128},[118,20458,20459],{"class":120,"line":1702},[118,20460,14721],{"class":124},[118,20462,20463,20465],{"class":120,"line":1731},[118,20464,1989],{"class":124},[118,20466,7802],{"class":128},[118,20468,20469],{"class":120,"line":1736},[118,20470,3999],{"class":128},[118,20472,20473],{"class":120,"line":1753},[118,20474,2404],{"emptyLinePlaceholder":45},[118,20476,20477,20479,20481],{"class":120,"line":1758},[118,20478,5369],{"class":124},[118,20480,5593],{"class":1967},[118,20482,1980],{"class":128},[118,20484,20485],{"class":120,"line":1763},[118,20486,1550],{"class":128},[118,20488,20489,20491,20493,20495,20497],{"class":120,"line":1768},[118,20490,19436],{"class":128},[118,20492,7135],{"class":1967},[118,20494,129],{"class":128},[118,20496,778],{"class":177},[118,20498,2723],{"class":128},[118,20500,20501],{"class":120,"line":1782},[118,20502,20503],{"class":187},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[118,20505,20506,20508,20510],{"class":120,"line":1787},[118,20507,19436],{"class":128},[118,20509,7038],{"class":1967},[118,20511,17520],{"class":128},[118,20513,20514],{"class":120,"line":2581},[118,20515,2404],{"emptyLinePlaceholder":45},[118,20517,20518,20520,20522,20525,20527,20530,20532],{"class":120,"line":2595},[118,20519,6534],{"class":128},[118,20521,1172],{"class":124},[118,20523,20524],{"class":233}," \"p2的年龄为： \"",[118,20526,1448],{"class":124},[118,20528,20529],{"class":128}," p2.age ",[118,20531,1172],{"class":124},[118,20533,8845],{"class":128},[118,20535,20536],{"class":120,"line":2603},[118,20537,1569],{"class":128},[118,20539,20540],{"class":120,"line":2608},[118,20541,2404],{"emptyLinePlaceholder":45},[118,20543,20544,20546,20548],{"class":120,"line":2614},[118,20545,5369],{"class":124},[118,20547,5662],{"class":1967},[118,20549,1980],{"class":128},[118,20551,20552],{"class":120,"line":2620},[118,20553,1550],{"class":128},[118,20555,20556],{"class":120,"line":2625},[118,20557,20558],{"class":187},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[118,20560,20561,20564],{"class":120,"line":7953},[118,20562,20563],{"class":128},"    Person p1;",[118,20565,20566],{"class":187}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[118,20568,20569,20571,20573,20575,20577,20579],{"class":120,"line":7977},[118,20570,19436],{"class":128},[118,20572,7038],{"class":1967},[118,20574,129],{"class":128},[118,20576,574],{"class":177},[118,20578,5971],{"class":128},[118,20580,20581],{"class":187}," \u002F\u002F用户提供的有参\n",[118,20583,20584,20586,20589,20592],{"class":120,"line":7982},[118,20585,19436],{"class":128},[118,20587,20588],{"class":1967},"p3",[118,20590,20591],{"class":128},"(p2);",[118,20593,20594],{"class":187}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[118,20596,20597],{"class":120,"line":7988},[118,20598,2404],{"emptyLinePlaceholder":45},[118,20600,20601],{"class":120,"line":8015},[118,20602,20603],{"class":187},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[118,20605,20606,20609],{"class":120,"line":8020},[118,20607,20608],{"class":128},"    Person p4;",[118,20610,20566],{"class":187},[118,20612,20613,20615,20618,20620,20622,20624],{"class":120,"line":8026},[118,20614,19436],{"class":128},[118,20616,20617],{"class":1967},"p5",[118,20619,129],{"class":128},[118,20621,574],{"class":177},[118,20623,5971],{"class":128},[118,20625,20626],{"class":187}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[118,20628,20629,20631,20634,20637],{"class":120,"line":8038},[118,20630,19436],{"class":128},[118,20632,20633],{"class":1967},"p6",[118,20635,20636],{"class":128},"(p5);",[118,20638,20639],{"class":187}," \u002F\u002F用户自己提供拷贝构造\n",[118,20641,20642],{"class":120,"line":8050},[118,20643,1569],{"class":128},[118,20645,20646],{"class":120,"line":8062},[118,20647,2404],{"emptyLinePlaceholder":45},[118,20649,20650,20652,20654],{"class":120,"line":9721},[118,20651,132],{"class":124},[118,20653,1977],{"class":1967},[118,20655,10858],{"class":128},[118,20657,20658],{"class":120,"line":9746},[118,20659,2404],{"emptyLinePlaceholder":45},[118,20661,20662,20664],{"class":120,"line":9769},[118,20663,5638],{"class":1967},[118,20665,5641],{"class":128},[118,20667,20668],{"class":120,"line":9793},[118,20669,2404],{"emptyLinePlaceholder":45},[118,20671,20672,20674,20676,20678],{"class":120,"line":9798},[118,20673,2307],{"class":1967},[118,20675,129],{"class":128},[118,20677,2312],{"class":233},[118,20679,2723],{"class":128},[118,20681,20682],{"class":120,"line":9803},[118,20683,2404],{"emptyLinePlaceholder":45},[118,20685,20686,20688,20690],{"class":120,"line":9808},[118,20687,4094],{"class":124},[118,20689,4097],{"class":177},[118,20691,1294],{"class":128},[118,20693,20694],{"class":120,"line":9817},[118,20695,1569],{"class":128},[89,20697,20699],{"id":20698},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[15,20701,20702],{},"浅拷贝：简单的赋值拷贝操作",[15,20704,20705],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[109,20707,20709],{"className":111,"code":20708,"language":113,"meta":39,"style":39},"#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",[115,20710,20711,20717,20727,20733,20737,20741,20746,20752,20756,20769,20773,20777,20784,20788,20798,20813,20826,20830,20835,20840,20856,20860,20873,20878,20883,20888,20897,20902,20917,20921,20925,20929,20935,20939,20944,20959,20963,20974,20988,20992,21001,21005,21011,21023,21027,21035,21039,21056,21087,21095,21123,21127,21131,21139,21143,21149],{"__ignoreMap":39},[118,20712,20713,20715],{"class":120,"line":121},[118,20714,1953],{"class":124},[118,20716,1956],{"class":233},[118,20718,20719,20721,20723,20725],{"class":120,"line":40},[118,20720,1961],{"class":124},[118,20722,1964],{"class":124},[118,20724,1968],{"class":1967},[118,20726,1294],{"class":128},[118,20728,20729,20731],{"class":120,"line":1183},[118,20730,14699],{"class":124},[118,20732,15176],{"class":1967},[118,20734,20735],{"class":120,"line":1198},[118,20736,1550],{"class":128},[118,20738,20739],{"class":120,"line":1204},[118,20740,14721],{"class":124},[118,20742,20743],{"class":120,"line":1218},[118,20744,20745],{"class":187},"    \u002F\u002F默认构造函数\n",[118,20747,20748,20750],{"class":120,"line":1224},[118,20749,18524],{"class":1967},[118,20751,1980],{"class":128},[118,20753,20754],{"class":120,"line":1315},[118,20755,2034],{"class":128},[118,20757,20758,20760,20762,20765,20767],{"class":120,"line":1321},[118,20759,3455],{"class":128},[118,20761,1172],{"class":124},[118,20763,20764],{"class":233},"\"默认构造函数\"",[118,20766,1172],{"class":124},[118,20768,1195],{"class":128},[118,20770,20771],{"class":120,"line":1333},[118,20772,2191],{"class":128},[118,20774,20775],{"class":120,"line":1616},[118,20776,20348],{"class":187},[118,20778,20779,20781],{"class":120,"line":1621},[118,20780,18557],{"class":1967},[118,20782,20783],{"class":128},"(int age,int height)\n",[118,20785,20786],{"class":120,"line":1627},[118,20787,2034],{"class":128},[118,20789,20790,20793,20795],{"class":120,"line":1632},[118,20791,20792],{"class":128},"        m_Age",[118,20794,174],{"class":124},[118,20796,20797],{"class":128},"age;\n",[118,20799,20800,20803,20805,20807,20810],{"class":120,"line":1646},[118,20801,20802],{"class":128},"        m_Height",[118,20804,11722],{"class":124},[118,20806,2386],{"class":124},[118,20808,20809],{"class":128},"(height);",[118,20811,20812],{"class":187},"\u002F\u002F放到堆区\n",[118,20814,20815,20817,20819,20822,20824],{"class":120,"line":1651},[118,20816,3455],{"class":128},[118,20818,1172],{"class":124},[118,20820,20821],{"class":233},"\"有参构造函数\"",[118,20823,1172],{"class":124},[118,20825,1195],{"class":128},[118,20827,20828],{"class":120,"line":1657},[118,20829,2191],{"class":128},[118,20831,20832],{"class":120,"line":1678},[118,20833,20834],{"class":187},"    \u002F\u002F深拷贝解决上述问题\n",[118,20836,20837],{"class":120,"line":1683},[118,20838,20839],{"class":187},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[118,20841,20842,20844,20846,20848,20850,20852,20854],{"class":120,"line":1697},[118,20843,18524],{"class":1967},[118,20845,129],{"class":128},[118,20847,6797],{"class":124},[118,20849,15574],{"class":1967},[118,20851,10589],{"class":124},[118,20853,15],{"class":5221},[118,20855,135],{"class":128},[118,20857,20858],{"class":120,"line":1702},[118,20859,2034],{"class":128},[118,20861,20862,20864,20866,20869,20871],{"class":120,"line":1731},[118,20863,3455],{"class":128},[118,20865,1172],{"class":124},[118,20867,20868],{"class":233},"\"拷贝构造函数\"",[118,20870,1172],{"class":124},[118,20872,1195],{"class":128},[118,20874,20875],{"class":120,"line":1736},[118,20876,20877],{"class":187},"        \u002F\u002F编译器默认的写如下注释部分\n",[118,20879,20880],{"class":120,"line":1753},[118,20881,20882],{"class":187},"        \u002F\u002Fm_Age=p.m_Age;\n",[118,20884,20885],{"class":120,"line":1758},[118,20886,20887],{"class":187},"        \u002F\u002Fm_Height=p.m_Height;\n",[118,20889,20890,20892,20894],{"class":120,"line":1763},[118,20891,20792],{"class":128},[118,20893,174],{"class":124},[118,20895,20896],{"class":128},"p.m_Age;\n",[118,20898,20899],{"class":120,"line":1768},[118,20900,20901],{"class":187},"        \u002F\u002F深拷贝操作\n",[118,20903,20904,20906,20908,20910,20912,20914],{"class":120,"line":1782},[118,20905,20802],{"class":128},[118,20907,11722],{"class":124},[118,20909,2386],{"class":124},[118,20911,129],{"class":128},[118,20913,583],{"class":124},[118,20915,20916],{"class":128},"p.m_Height);\n",[118,20918,20919],{"class":120,"line":1787},[118,20920,2191],{"class":128},[118,20922,20923],{"class":120,"line":2581},[118,20924,2404],{"emptyLinePlaceholder":45},[118,20926,20927],{"class":120,"line":2595},[118,20928,18552],{"class":187},[118,20930,20931,20933],{"class":120,"line":2603},[118,20932,18557],{"class":1967},[118,20934,1980],{"class":128},[118,20936,20937],{"class":120,"line":2608},[118,20938,2034],{"class":128},[118,20940,20941],{"class":120,"line":2614},[118,20942,20943],{"class":187},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[118,20945,20946,20948,20951,20954,20957],{"class":120,"line":2620},[118,20947,2501],{"class":124},[118,20949,20950],{"class":128},"(m_Height ",[118,20952,20953],{"class":124},"!=",[118,20955,20956],{"class":177}," NULL",[118,20958,135],{"class":128},[118,20960,20961],{"class":120,"line":2625},[118,20962,2514],{"class":128},[118,20964,20965,20968,20971],{"class":120,"line":7953},[118,20966,20967],{"class":124},"            delete",[118,20969,20970],{"class":128}," m_Height;",[118,20972,20973],{"class":187}," \u002F\u002F释放堆区内存\n",[118,20975,20976,20979,20981,20983,20985],{"class":120,"line":7977},[118,20977,20978],{"class":128},"            m_Height",[118,20980,174],{"class":124},[118,20982,2396],{"class":177},[118,20984,184],{"class":128},[118,20986,20987],{"class":187}," \u002F\u002F防止野指针\n",[118,20989,20990],{"class":120,"line":7982},[118,20991,2533],{"class":128},[118,20993,20994,20996,20998],{"class":120,"line":7988},[118,20995,3455],{"class":128},[118,20997,1172],{"class":124},[118,20999,21000],{"class":233},"\"Person的析构函数调用\"\n",[118,21002,21003],{"class":120,"line":8015},[118,21004,2191],{"class":128},[118,21006,21007,21009],{"class":120,"line":8020},[118,21008,1989],{"class":124},[118,21010,15671],{"class":128},[118,21012,21013,21015,21017,21020],{"class":120,"line":8026},[118,21014,1989],{"class":124},[118,21016,6523],{"class":124},[118,21018,21019],{"class":128},"m_Height;",[118,21021,21022],{"class":187}," \u002F\u002F定义一个指针，指向身高\n",[118,21024,21025],{"class":120,"line":8038},[118,21026,3999],{"class":128},[118,21028,21029,21031,21033],{"class":120,"line":8050},[118,21030,5369],{"class":124},[118,21032,5593],{"class":1967},[118,21034,1980],{"class":128},[118,21036,21037],{"class":120,"line":8062},[118,21038,1550],{"class":128},[118,21040,21041,21043,21045,21047,21049,21051,21054],{"class":120,"line":9721},[118,21042,19436],{"class":128},[118,21044,7135],{"class":1967},[118,21046,129],{"class":128},[118,21048,778],{"class":177},[118,21050,506],{"class":128},[118,21052,21053],{"class":177},"160",[118,21055,2723],{"class":128},[118,21057,21058,21060,21062,21065,21067,21070,21072,21075,21077,21080,21082,21084],{"class":120,"line":9746},[118,21059,1555],{"class":128},[118,21061,1172],{"class":124},[118,21063,21064],{"class":233},"\"p1的年龄为:\"",[118,21066,1172],{"class":124},[118,21068,21069],{"class":128},"p1.m_Age",[118,21071,1172],{"class":124},[118,21073,21074],{"class":233},"\"身高为：\"",[118,21076,6424],{"class":124},[118,21078,21079],{"class":128},"p1.m_Height",[118,21081,1172],{"class":124},[118,21083,1242],{"class":128},[118,21085,21086],{"class":187},"  \u002F\u002F18\n",[118,21088,21089,21091,21093],{"class":120,"line":9769},[118,21090,19436],{"class":128},[118,21092,7038],{"class":1967},[118,21094,17520],{"class":128},[118,21096,21097,21099,21101,21104,21106,21108,21110,21112,21114,21117,21119,21121],{"class":120,"line":9793},[118,21098,1555],{"class":128},[118,21100,1172],{"class":124},[118,21102,21103],{"class":233},"\"p2的年龄为：\"",[118,21105,1172],{"class":124},[118,21107,19466],{"class":128},[118,21109,1172],{"class":124},[118,21111,21074],{"class":233},[118,21113,6424],{"class":124},[118,21115,21116],{"class":128},"p2.m_Height",[118,21118,1172],{"class":124},[118,21120,1242],{"class":128},[118,21122,21086],{"class":187},[118,21124,21125],{"class":120,"line":9798},[118,21126,13215],{"class":128},[118,21128,21129],{"class":120,"line":9803},[118,21130,1569],{"class":128},[118,21132,21133,21135,21137],{"class":120,"line":9808},[118,21134,132],{"class":124},[118,21136,1977],{"class":1967},[118,21138,1980],{"class":128},[118,21140,21141],{"class":120,"line":9817},[118,21142,1550],{"class":128},[118,21144,21145,21147],{"class":120,"line":9822},[118,21146,5638],{"class":1967},[118,21148,5641],{"class":128},[118,21150,21151],{"class":120,"line":9828},[118,21152,1569],{"class":128},[15,21154,21155],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[15,21157,21158],{},"浅拷贝带来的问题是堆区的内存重复释放",[15,21160,21161],{},[1466,21162],{"alt":39,"src":21163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[15,21165,21166],{},"浅拷贝问题要使用深拷贝来解决",[15,21168,21169],{},[1466,21170],{"alt":39,"src":21171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[15,21173,21174],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[89,21176,21178],{"id":21177},"_826初始化列表","8.2.6初始化列表",[15,21180,21181],{},"作用：初始化属性",[15,21183,5186],{},[109,21185,21188],{"className":21186,"code":21187,"language":5192},[5190],"构造函数():属性1(值1),属性2(值2).....{}\n",[115,21189,21187],{"__ignoreMap":39},[15,21191,21192],{},"例子",[109,21194,21196],{"className":111,"code":21195,"language":113,"meta":39,"style":39},"#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",[115,21197,21198,21204,21214,21220,21224,21229,21233,21238,21243,21248,21253,21258,21263,21267,21272,21277,21320,21329,21347,21365,21383,21387,21391,21398,21405,21412,21416,21420,21428,21432,21436,21456,21465,21469,21473,21483,21487,21495],{"__ignoreMap":39},[118,21199,21200,21202],{"class":120,"line":121},[118,21201,1953],{"class":124},[118,21203,1956],{"class":233},[118,21205,21206,21208,21210,21212],{"class":120,"line":40},[118,21207,1961],{"class":124},[118,21209,1964],{"class":124},[118,21211,1968],{"class":1967},[118,21213,1294],{"class":128},[118,21215,21216,21218],{"class":120,"line":1183},[118,21217,14699],{"class":124},[118,21219,15176],{"class":1967},[118,21221,21222],{"class":120,"line":1198},[118,21223,1550],{"class":128},[118,21225,21226],{"class":120,"line":1204},[118,21227,21228],{"class":124},"    public:\n",[118,21230,21231],{"class":120,"line":1218},[118,21232,2404],{"emptyLinePlaceholder":45},[118,21234,21235],{"class":120,"line":1224},[118,21236,21237],{"class":187},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[118,21239,21240],{"class":120,"line":1315},[118,21241,21242],{"class":187},"    \u002F\u002FPerson(int a, int b, int c) {\n",[118,21244,21245],{"class":120,"line":1321},[118,21246,21247],{"class":187},"    \u002F\u002F  m_A = a;\n",[118,21249,21250],{"class":120,"line":1333},[118,21251,21252],{"class":187},"    \u002F\u002F  m_B = b;\n",[118,21254,21255],{"class":120,"line":1616},[118,21256,21257],{"class":187},"    \u002F\u002F  m_C = c;\n",[118,21259,21260],{"class":120,"line":1621},[118,21261,21262],{"class":187},"    \u002F\u002F}\n",[118,21264,21265],{"class":120,"line":1627},[118,21266,2404],{"emptyLinePlaceholder":45},[118,21268,21269],{"class":120,"line":1632},[118,21270,21271],{"class":187},"    \u002F\u002F初始化列表方式初始化\n",[118,21273,21274],{"class":120,"line":1646},[118,21275,21276],{"class":187},"    \u002F\u002F使用有参构造函数\n",[118,21278,21279,21281,21283,21285,21287,21289,21291,21293,21295,21297,21299,21302,21305,21308,21311,21314,21317],{"class":120,"line":1651},[118,21280,18524],{"class":1967},[118,21282,129],{"class":128},[118,21284,132],{"class":124},[118,21286,1402],{"class":5221},[118,21288,12440],{"class":128},[118,21290,132],{"class":124},[118,21292,2837],{"class":5221},[118,21294,12440],{"class":128},[118,21296,132],{"class":124},[118,21298,2853],{"class":5221},[118,21300,21301],{"class":128},") :",[118,21303,21304],{"class":1967},"m_A",[118,21306,21307],{"class":128},"(a), ",[118,21309,21310],{"class":1967},"m_B",[118,21312,21313],{"class":128},"(b), ",[118,21315,21316],{"class":1967},"m_C",[118,21318,21319],{"class":128},"(c) {}\n",[118,21321,21322,21324,21327],{"class":120,"line":1657},[118,21323,14914],{"class":124},[118,21325,21326],{"class":1967}," PrintPerson",[118,21328,10858],{"class":128},[118,21330,21331,21333,21335,21338,21340,21343,21345],{"class":120,"line":1678},[118,21332,9674],{"class":128},[118,21334,1172],{"class":124},[118,21336,21337],{"class":233}," \"mA:\"",[118,21339,1448],{"class":124},[118,21341,21342],{"class":128}," m_A ",[118,21344,1172],{"class":124},[118,21346,8845],{"class":128},[118,21348,21349,21351,21353,21356,21358,21361,21363],{"class":120,"line":1683},[118,21350,9674],{"class":128},[118,21352,1172],{"class":124},[118,21354,21355],{"class":233}," \"mB:\"",[118,21357,1448],{"class":124},[118,21359,21360],{"class":128}," m_B ",[118,21362,1172],{"class":124},[118,21364,8845],{"class":128},[118,21366,21367,21369,21371,21374,21376,21379,21381],{"class":120,"line":1697},[118,21368,9674],{"class":128},[118,21370,1172],{"class":124},[118,21372,21373],{"class":233}," \"mC:\"",[118,21375,1448],{"class":124},[118,21377,21378],{"class":128}," m_C ",[118,21380,1172],{"class":124},[118,21382,8845],{"class":128},[118,21384,21385],{"class":120,"line":1702},[118,21386,2191],{"class":128},[118,21388,21389],{"class":120,"line":1731},[118,21390,15227],{"class":124},[118,21392,21393,21395],{"class":120,"line":1736},[118,21394,1989],{"class":124},[118,21396,21397],{"class":128}," m_A;\n",[118,21399,21400,21402],{"class":120,"line":1753},[118,21401,1989],{"class":124},[118,21403,21404],{"class":128}," m_B;\n",[118,21406,21407,21409],{"class":120,"line":1758},[118,21408,1989],{"class":124},[118,21410,21411],{"class":128}," m_C;\n",[118,21413,21414],{"class":120,"line":1763},[118,21415,3999],{"class":128},[118,21417,21418],{"class":120,"line":1768},[118,21419,2404],{"emptyLinePlaceholder":45},[118,21421,21422,21424,21426],{"class":120,"line":1782},[118,21423,132],{"class":124},[118,21425,1977],{"class":1967},[118,21427,5983],{"class":128},[118,21429,21430],{"class":120,"line":1787},[118,21431,1550],{"class":128},[118,21433,21434],{"class":120,"line":2581},[118,21435,2404],{"emptyLinePlaceholder":45},[118,21437,21438,21440,21442,21444,21446,21448,21450,21452,21454],{"class":120,"line":2595},[118,21439,19436],{"class":128},[118,21441,15],{"class":1967},[118,21443,129],{"class":128},[118,21445,346],{"class":177},[118,21447,12440],{"class":128},[118,21449,206],{"class":177},[118,21451,12440],{"class":128},[118,21453,200],{"class":177},[118,21455,2723],{"class":128},[118,21457,21458,21460,21463],{"class":120,"line":2603},[118,21459,15871],{"class":128},[118,21461,21462],{"class":1967},"PrintPerson",[118,21464,5641],{"class":128},[118,21466,21467],{"class":120,"line":2608},[118,21468,2404],{"emptyLinePlaceholder":45},[118,21470,21471],{"class":120,"line":2614},[118,21472,2404],{"emptyLinePlaceholder":45},[118,21474,21475,21477,21479,21481],{"class":120,"line":2620},[118,21476,2307],{"class":1967},[118,21478,129],{"class":128},[118,21480,2312],{"class":233},[118,21482,2723],{"class":128},[118,21484,21485],{"class":120,"line":2625},[118,21486,2404],{"emptyLinePlaceholder":45},[118,21488,21489,21491,21493],{"class":120,"line":7953},[118,21490,4094],{"class":124},[118,21492,4097],{"class":177},[118,21494,1294],{"class":128},[118,21496,21497],{"class":120,"line":7977},[118,21498,1569],{"class":128},[15,21500,21501,21502,21505,21506],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[278,21503,21504],{},"参数名就是定义的对象属性","，",[278,21507,21508],{},"属性后面的值为有参构造函数的形参",[109,21510,21512],{"className":111,"code":21511,"language":113,"meta":39,"style":39},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[115,21513,21514],{"__ignoreMap":39},[118,21515,21516,21518,21520,21522,21525,21527,21530,21532,21535,21537,21540,21542,21545,21547],{"class":120,"line":121},[118,21517,19051],{"class":1967},[118,21519,129],{"class":128},[118,21521,132],{"class":124},[118,21523,21524],{"class":128}," a.",[118,21526,132],{"class":124},[118,21528,21529],{"class":128}," b,",[118,21531,132],{"class":124},[118,21533,21534],{"class":128}," b):",[118,21536,21304],{"class":1967},[118,21538,21539],{"class":128},"(a),",[118,21541,21310],{"class":1967},[118,21543,21544],{"class":128},"(c),",[118,21546,21316],{"class":1967},[118,21548,21549],{"class":128},"(b) {}\n",[89,21551,21553],{"id":21552},"_827类对象作为类成员","8.2.7类对象作为类成员",[15,21555,21556],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[15,21558,14638],{},[109,21560,21562],{"className":111,"code":21561,"language":113,"meta":39,"style":39},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[115,21563,21564,21569,21574,21578,21583,21587],{"__ignoreMap":39},[118,21565,21566],{"class":120,"line":121},[118,21567,21568],{"class":128},"A{};\n",[118,21570,21571],{"class":120,"line":40},[118,21572,21573],{"class":128},"B\n",[118,21575,21576],{"class":120,"line":1183},[118,21577,1550],{"class":128},[118,21579,21580],{"class":120,"line":1198},[118,21581,21582],{"class":128},"    A a;\n",[118,21584,21585],{"class":120,"line":1204},[118,21586,1569],{"class":128},[118,21588,21589],{"class":120,"line":1218},[118,21590,21591],{"class":187},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[15,21593,21594],{},"案例",[109,21596,21598],{"className":111,"code":21597,"language":113,"meta":39,"style":39},"\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",[115,21599,21600,21605,21612,21616,21621,21626,21640,21644,21654,21665,21669,21676,21680,21693,21697,21702,21707,21711,21717,21721,21725,21729,21760,21764,21775,21779,21785,21789,21802,21806,21810,21814,21819,21824,21828,21836,21840,21857,21876,21880,21888,21892,21898],{"__ignoreMap":39},[118,21601,21602],{"class":120,"line":121},[118,21603,21604],{"class":187},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[118,21606,21607,21609],{"class":120,"line":40},[118,21608,14699],{"class":124},[118,21610,21611],{"class":1967}," Phone\n",[118,21613,21614],{"class":120,"line":1183},[118,21615,1550],{"class":128},[118,21617,21618],{"class":120,"line":1198},[118,21619,21620],{"class":128},"public：\n",[118,21622,21623],{"class":120,"line":1204},[118,21624,21625],{"class":187},"    \u002F\u002F 赋值(构造函数)\n",[118,21627,21628,21631,21633,21635,21638],{"class":120,"line":1218},[118,21629,21630],{"class":1967},"    Phone",[118,21632,129],{"class":128},[118,21634,14922],{"class":1967},[118,21636,21637],{"class":5221}," pName",[118,21639,135],{"class":128},[118,21641,21642],{"class":120,"line":1224},[118,21643,2034],{"class":128},[118,21645,21646,21649,21651],{"class":120,"line":1315},[118,21647,21648],{"class":128},"        m_pName",[118,21650,174],{"class":124},[118,21652,21653],{"class":128},"pName;\n",[118,21655,21656,21658,21660,21663],{"class":120,"line":1321},[118,21657,3455],{"class":128},[118,21659,1172],{"class":124},[118,21661,21662],{"class":233},"\"Phone的构造函数调用\"",[118,21664,1294],{"class":128},[118,21666,21667],{"class":120,"line":1333},[118,21668,2191],{"class":128},[118,21670,21671,21674],{"class":120,"line":1616},[118,21672,21673],{"class":1967},"    ~Phone",[118,21675,1980],{"class":128},[118,21677,21678],{"class":120,"line":1621},[118,21679,2034],{"class":128},[118,21681,21682,21684,21686,21689,21691],{"class":120,"line":1627},[118,21683,3455],{"class":128},[118,21685,1172],{"class":124},[118,21687,21688],{"class":233},"\"Phone析构函数调用\"",[118,21690,1172],{"class":124},[118,21692,1195],{"class":128},[118,21694,21695],{"class":120,"line":1632},[118,21696,2191],{"class":128},[118,21698,21699],{"class":120,"line":1646},[118,21700,21701],{"class":187},"    \u002F\u002F\n",[118,21703,21704],{"class":120,"line":1651},[118,21705,21706],{"class":128},"    string m_PName;\n",[118,21708,21709],{"class":120,"line":1657},[118,21710,3999],{"class":128},[118,21712,21713,21715],{"class":120,"line":1678},[118,21714,14699],{"class":124},[118,21716,15176],{"class":1967},[118,21718,21719],{"class":120,"line":1683},[118,21720,1550],{"class":128},[118,21722,21723],{"class":120,"line":1697},[118,21724,14721],{"class":124},[118,21726,21727],{"class":120,"line":1702},[118,21728,16999],{"class":187},[118,21730,21731,21733,21735,21737,21739,21741,21743,21746,21749,21751,21754,21757],{"class":120,"line":1731},[118,21732,18524],{"class":1967},[118,21734,129],{"class":128},[118,21736,14922],{"class":1967},[118,21738,14925],{"class":5221},[118,21740,506],{"class":128},[118,21742,14922],{"class":1967},[118,21744,21745],{"class":5221}," pname",[118,21747,21748],{"class":128},"):",[118,21750,15015],{"class":1967},[118,21752,21753],{"class":128},"(name),m_phone.",[118,21755,21756],{"class":1967},"m_PName",[118,21758,21759],{"class":128},"(pname) \n",[118,21761,21762],{"class":120,"line":1736},[118,21763,2034],{"class":128},[118,21765,21766,21768,21770,21773],{"class":120,"line":1753},[118,21767,3455],{"class":128},[118,21769,1172],{"class":124},[118,21771,21772],{"class":233},"\"Person的构造函数调用\"",[118,21774,1294],{"class":128},[118,21776,21777],{"class":120,"line":1758},[118,21778,2191],{"class":128},[118,21780,21781,21783],{"class":120,"line":1763},[118,21782,18557],{"class":1967},[118,21784,1980],{"class":128},[118,21786,21787],{"class":120,"line":1768},[118,21788,2034],{"class":128},[118,21790,21791,21793,21795,21798,21800],{"class":120,"line":1782},[118,21792,3455],{"class":128},[118,21794,1172],{"class":124},[118,21796,21797],{"class":233},"\"Person析构函数调用\"",[118,21799,1172],{"class":124},[118,21801,1195],{"class":128},[118,21803,21804],{"class":120,"line":1787},[118,21805,2191],{"class":128},[118,21807,21808],{"class":120,"line":2581},[118,21809,7785],{"class":187},[118,21811,21812],{"class":120,"line":2595},[118,21813,14897],{"class":128},[118,21815,21816],{"class":120,"line":2603},[118,21817,21818],{"class":187},"    \u002F\u002F手机\n",[118,21820,21821],{"class":120,"line":2608},[118,21822,21823],{"class":128},"    Phone m_Phone;\n",[118,21825,21826],{"class":120,"line":2614},[118,21827,3999],{"class":128},[118,21829,21830,21832,21834],{"class":120,"line":2620},[118,21831,5369],{"class":124},[118,21833,5593],{"class":1967},[118,21835,1980],{"class":128},[118,21837,21838],{"class":120,"line":2625},[118,21839,1550],{"class":128},[118,21841,21842,21844,21846,21848,21850,21852,21855],{"class":120,"line":7953},[118,21843,19436],{"class":128},[118,21845,15],{"class":1967},[118,21847,129],{"class":128},[118,21849,7921],{"class":233},[118,21851,506],{"class":128},[118,21853,21854],{"class":233},"\"安卓\"",[118,21856,2723],{"class":128},[118,21858,21859,21861,21863,21866,21868,21871,21873],{"class":120,"line":7977},[118,21860,1555],{"class":128},[118,21862,1172],{"class":124},[118,21864,21865],{"class":128},"p.Name",[118,21867,1172],{"class":124},[118,21869,21870],{"class":233},"\"拿着：\"",[118,21872,1172],{"class":124},[118,21874,21875],{"class":128},"p.m_phone.m_PName;\n",[118,21877,21878],{"class":120,"line":7982},[118,21879,1569],{"class":128},[118,21881,21882,21884,21886],{"class":120,"line":7988},[118,21883,132],{"class":124},[118,21885,1977],{"class":1967},[118,21887,1980],{"class":128},[118,21889,21890],{"class":120,"line":8015},[118,21891,1550],{"class":128},[118,21893,21894,21896],{"class":120,"line":8020},[118,21895,5638],{"class":1967},[118,21897,5641],{"class":128},[118,21899,21900],{"class":120,"line":8026},[118,21901,1569],{"class":128},[15,21903,9030],{},[109,21905,21907],{"className":111,"code":21906,"language":113,"meta":39,"style":39},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[115,21908,21909,21914],{"__ignoreMap":39},[118,21910,21911],{"class":120,"line":121},[118,21912,21913],{"class":187},"    \u002F\u002F不需要写这个：\n",[118,21915,21916],{"class":120,"line":40},[118,21917,21918],{"class":187},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[15,21920,21921],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[109,21923,21925],{"className":111,"code":21924,"language":113,"meta":39,"style":39},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[115,21926,21927],{"__ignoreMap":39},[118,21928,21929,21931,21934,21936,21939,21942],{"class":120,"line":121},[118,21930,19051],{"class":1967},[118,21932,21933],{"class":128},"(string name.string pname):",[118,21935,15015],{"class":1967},[118,21937,21938],{"class":128},"(name),",[118,21940,21941],{"class":1967},"m_phone",[118,21943,21944],{"class":128},"(pname) {}\n",[15,21946,21947,21948,174,21951],{},"采用的是隐式转换法，实际为如下：\n",[115,21949,21950],{},"m_phone(pname)",[115,21952,21953],{},"Phone m_phone=pname",[15,21955,21956,21959],{},[278,21957,21958],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[15,21961,21962],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[89,21964,21966],{"id":21965},"_828静态对象","8.2.8静态对象",[15,21968,21969],{},"静态对象在成员对象前static，称为静态对象",[15,21971,21972],{},"静态对象分为两类：",[72,21974,21975],{},[75,21976,21977],{},"静态成员变量",[1135,21979,21980,21983,21986],{},[75,21981,21982],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[75,21984,21985],{},"②在编译阶段分配内存",[75,21987,21988],{},"③类内声明，类外初始化",[72,21990,21991],{"start":40},[75,21992,21993],{},"静态成员函数",[1135,21995,21996,21999],{},[75,21997,21998],{},"①所有对象共享同一个函数",[75,22000,22001],{},"②静态成员函数只能访问静态成员变量",[22003,22004,22006],"h4",{"id":22005},"_8281静态成员变量","8.2.8.1静态成员变量",[109,22008,22010],{"className":111,"code":22009,"language":113,"meta":39,"style":39},"#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",[115,22011,22012,22018,22028,22034,22038,22042,22047,22052,22057,22065,22069,22073,22077,22085,22089,22093,22098,22111,22115,22123,22127,22133],{"__ignoreMap":39},[118,22013,22014,22016],{"class":120,"line":121},[118,22015,1953],{"class":124},[118,22017,1956],{"class":233},[118,22019,22020,22022,22024,22026],{"class":120,"line":40},[118,22021,1961],{"class":124},[118,22023,1964],{"class":124},[118,22025,1968],{"class":1967},[118,22027,1294],{"class":128},[118,22029,22030,22032],{"class":120,"line":1183},[118,22031,14699],{"class":124},[118,22033,15176],{"class":1967},[118,22035,22036],{"class":120,"line":1198},[118,22037,1550],{"class":128},[118,22039,22040],{"class":120,"line":1204},[118,22041,14721],{"class":124},[118,22043,22044],{"class":120,"line":1218},[118,22045,22046],{"class":187},"    \u002F\u002F非静态成员变量\n",[118,22048,22049],{"class":120,"line":1224},[118,22050,22051],{"class":187},"    \u002F\u002F int m_A;\n",[118,22053,22054],{"class":120,"line":1315},[118,22055,22056],{"class":187},"    \u002F\u002F定义静态成员变量\n",[118,22058,22059,22061,22063],{"class":120,"line":1321},[118,22060,11025],{"class":124},[118,22062,2386],{"class":124},[118,22064,21397],{"class":128},[118,22066,22067],{"class":120,"line":1333},[118,22068,2404],{"emptyLinePlaceholder":45},[118,22070,22071],{"class":120,"line":1616},[118,22072,2404],{"emptyLinePlaceholder":45},[118,22074,22075],{"class":120,"line":1621},[118,22076,3999],{"class":128},[118,22078,22079,22081,22083],{"class":120,"line":1627},[118,22080,5369],{"class":124},[118,22082,5593],{"class":1967},[118,22084,1980],{"class":128},[118,22086,22087],{"class":120,"line":1632},[118,22088,1550],{"class":128},[118,22090,22091],{"class":120,"line":1646},[118,22092,15318],{"class":128},[118,22094,22095],{"class":120,"line":1651},[118,22096,22097],{"class":187},"    \u002F\u002F输出类成员变量这块内存\n",[118,22099,22100,22102,22104,22107,22109],{"class":120,"line":1657},[118,22101,1555],{"class":128},[118,22103,1172],{"class":124},[118,22105,22106],{"class":128},"p.m_A",[118,22108,1172],{"class":124},[118,22110,1195],{"class":128},[118,22112,22113],{"class":120,"line":1678},[118,22114,1569],{"class":128},[118,22116,22117,22119,22121],{"class":120,"line":1683},[118,22118,132],{"class":124},[118,22120,1977],{"class":1967},[118,22122,1980],{"class":128},[118,22124,22125],{"class":120,"line":1697},[118,22126,1550],{"class":128},[118,22128,22129,22131],{"class":120,"line":1702},[118,22130,5638],{"class":1967},[118,22132,1980],{"class":128},[118,22134,22135],{"class":120,"line":1731},[118,22136,1569],{"class":128},[15,22138,22139],{},"此时输出是报错的：无法解析外部命令",[15,22141,22142],{},"解决这一问题：必须用到类内声明，类外初始化操作",[109,22144,22146],{"className":111,"code":22145,"language":113,"meta":39,"style":39},"#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",[115,22147,22148,22154,22164,22170,22174,22178,22183,22191,22195,22200,22215,22223,22227,22231,22236,22241,22253,22258,22269,22274,22279,22292,22296,22304,22308,22314],{"__ignoreMap":39},[118,22149,22150,22152],{"class":120,"line":121},[118,22151,1953],{"class":124},[118,22153,1956],{"class":233},[118,22155,22156,22158,22160,22162],{"class":120,"line":40},[118,22157,1961],{"class":124},[118,22159,1964],{"class":124},[118,22161,1968],{"class":1967},[118,22163,1294],{"class":128},[118,22165,22166,22168],{"class":120,"line":1183},[118,22167,14699],{"class":124},[118,22169,15176],{"class":1967},[118,22171,22172],{"class":120,"line":1198},[118,22173,1550],{"class":128},[118,22175,22176],{"class":120,"line":1204},[118,22177,14721],{"class":124},[118,22179,22180],{"class":120,"line":1218},[118,22181,22182],{"class":187},"    \u002F\u002F类内声明\n",[118,22184,22185,22187,22189],{"class":120,"line":1224},[118,22186,11025],{"class":124},[118,22188,2386],{"class":124},[118,22190,21397],{"class":128},[118,22192,22193],{"class":120,"line":1315},[118,22194,3999],{"class":128},[118,22196,22197],{"class":120,"line":1321},[118,22198,22199],{"class":187},"\u002F\u002F类外初始化\n",[118,22201,22202,22204,22206,22209,22211,22213],{"class":120,"line":1333},[118,22203,132],{"class":124},[118,22205,15574],{"class":1967},[118,22207,22208],{"class":128},"::m_A",[118,22210,174],{"class":124},[118,22212,574],{"class":177},[118,22214,1294],{"class":128},[118,22216,22217,22219,22221],{"class":120,"line":1616},[118,22218,5369],{"class":124},[118,22220,5593],{"class":1967},[118,22222,1980],{"class":128},[118,22224,22225],{"class":120,"line":1621},[118,22226,1550],{"class":128},[118,22228,22229],{"class":120,"line":1627},[118,22230,15318],{"class":128},[118,22232,22233],{"class":120,"line":1632},[118,22234,22235],{"class":187},"    \u002F\u002F访问变量的原内存空间\n",[118,22237,22238],{"class":120,"line":1646},[118,22239,22240],{"class":187},"    \u002F\u002F100\n",[118,22242,22243,22245,22247,22249,22251],{"class":120,"line":1651},[118,22244,1555],{"class":128},[118,22246,1172],{"class":124},[118,22248,22106],{"class":128},[118,22250,1172],{"class":124},[118,22252,1195],{"class":128},[118,22254,22255],{"class":120,"line":1657},[118,22256,22257],{"class":128},"    Person p2;\n",[118,22259,22260,22263,22265,22267],{"class":120,"line":1678},[118,22261,22262],{"class":128},"    p2.m_A",[118,22264,174],{"class":124},[118,22266,1726],{"class":177},[118,22268,1294],{"class":128},[118,22270,22271],{"class":120,"line":1683},[118,22272,22273],{"class":187},"    \u002F\u002F继续访问这片空间\n",[118,22275,22276],{"class":120,"line":1697},[118,22277,22278],{"class":187},"    \u002F\u002F200\n",[118,22280,22281,22283,22285,22288,22290],{"class":120,"line":1702},[118,22282,1555],{"class":128},[118,22284,1172],{"class":124},[118,22286,22287],{"class":128},"p2.m_A",[118,22289,1172],{"class":124},[118,22291,1195],{"class":128},[118,22293,22294],{"class":120,"line":1731},[118,22295,1569],{"class":128},[118,22297,22298,22300,22302],{"class":120,"line":1736},[118,22299,132],{"class":124},[118,22301,1977],{"class":1967},[118,22303,1980],{"class":128},[118,22305,22306],{"class":120,"line":1753},[118,22307,1550],{"class":128},[118,22309,22310,22312],{"class":120,"line":1758},[118,22311,5638],{"class":1967},[118,22313,5641],{"class":128},[118,22315,22316],{"class":120,"line":1763},[118,22317,1569],{"class":128},[15,22319,22320],{},[278,22321,22322],{},"静态变量的访问",[109,22324,22326],{"className":111,"code":22325,"language":113,"meta":39,"style":39},"#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",[115,22327,22328,22334,22344,22350,22354,22358,22362,22370,22374,22379,22387,22391,22395,22409,22424,22432,22436,22441,22446,22451,22456,22468,22473,22478,22492,22509,22513,22521,22525,22531],{"__ignoreMap":39},[118,22329,22330,22332],{"class":120,"line":121},[118,22331,1953],{"class":124},[118,22333,1956],{"class":233},[118,22335,22336,22338,22340,22342],{"class":120,"line":40},[118,22337,1961],{"class":124},[118,22339,1964],{"class":124},[118,22341,1968],{"class":1967},[118,22343,1294],{"class":128},[118,22345,22346,22348],{"class":120,"line":1183},[118,22347,14699],{"class":124},[118,22349,15176],{"class":1967},[118,22351,22352],{"class":120,"line":1198},[118,22353,1550],{"class":128},[118,22355,22356],{"class":120,"line":1204},[118,22357,14721],{"class":124},[118,22359,22360],{"class":120,"line":1218},[118,22361,22182],{"class":187},[118,22363,22364,22366,22368],{"class":120,"line":1224},[118,22365,11025],{"class":124},[118,22367,2386],{"class":124},[118,22369,21397],{"class":128},[118,22371,22372],{"class":120,"line":1315},[118,22373,15227],{"class":124},[118,22375,22376],{"class":120,"line":1321},[118,22377,22378],{"class":187},"    \u002F\u002F静态成员变量也是有访问权限的\n",[118,22380,22381,22383,22385],{"class":120,"line":1333},[118,22382,11025],{"class":124},[118,22384,2386],{"class":124},[118,22386,21404],{"class":128},[118,22388,22389],{"class":120,"line":1616},[118,22390,3999],{"class":128},[118,22392,22393],{"class":120,"line":1621},[118,22394,22199],{"class":187},[118,22396,22397,22399,22401,22403,22405,22407],{"class":120,"line":1627},[118,22398,132],{"class":124},[118,22400,15574],{"class":1967},[118,22402,22208],{"class":128},[118,22404,174],{"class":124},[118,22406,574],{"class":177},[118,22408,1294],{"class":128},[118,22410,22411,22413,22415,22418,22420,22422],{"class":120,"line":1632},[118,22412,132],{"class":124},[118,22414,15574],{"class":1967},[118,22416,22417],{"class":128},"::m_B",[118,22419,174],{"class":124},[118,22421,828],{"class":177},[118,22423,1294],{"class":128},[118,22425,22426,22428,22430],{"class":120,"line":1646},[118,22427,5369],{"class":124},[118,22429,5662],{"class":1967},[118,22431,1980],{"class":128},[118,22433,22434],{"class":120,"line":1651},[118,22435,1550],{"class":128},[118,22437,22438],{"class":120,"line":1657},[118,22439,22440],{"class":187},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[118,22442,22443],{"class":120,"line":1678},[118,22444,22445],{"class":187},"    \u002F\u002F静态成员变量有两种访问方式：\n",[118,22447,22448],{"class":120,"line":1683},[118,22449,22450],{"class":187},"    \u002F\u002F1.通过对象进行访问\n",[118,22452,22453],{"class":120,"line":1697},[118,22454,22455],{"class":128},"    Person p;  \n",[118,22457,22458,22460,22462,22464,22466],{"class":120,"line":1702},[118,22459,1555],{"class":128},[118,22461,1172],{"class":124},[118,22463,22106],{"class":128},[118,22465,1172],{"class":124},[118,22467,1195],{"class":128},[118,22469,22470],{"class":120,"line":1731},[118,22471,22472],{"class":187},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[118,22474,22475],{"class":120,"line":1736},[118,22476,22477],{"class":187},"    \u002F\u002F2.通过类名进行访问\n",[118,22479,22480,22482,22484,22486,22488,22490],{"class":120,"line":1753},[118,22481,1555],{"class":128},[118,22483,1172],{"class":124},[118,22485,19051],{"class":1967},[118,22487,22208],{"class":128},[118,22489,1172],{"class":124},[118,22491,1195],{"class":128},[118,22493,22494,22496,22498,22500,22502,22504,22506],{"class":120,"line":1758},[118,22495,1555],{"class":128},[118,22497,1172],{"class":124},[118,22499,19051],{"class":1967},[118,22501,22417],{"class":128},[118,22503,1172],{"class":124},[118,22505,1242],{"class":128},[118,22507,22508],{"class":187}," \u002F\u002F没有访问权限，报错\n",[118,22510,22511],{"class":120,"line":1763},[118,22512,1569],{"class":128},[118,22514,22515,22517,22519],{"class":120,"line":1768},[118,22516,132],{"class":124},[118,22518,1977],{"class":1967},[118,22520,1980],{"class":128},[118,22522,22523],{"class":120,"line":1782},[118,22524,1550],{"class":128},[118,22526,22527,22529],{"class":120,"line":1787},[118,22528,5707],{"class":1967},[118,22530,5641],{"class":128},[118,22532,22533],{"class":120,"line":2581},[118,22534,1569],{"class":128},[22003,22536,22538],{"id":22537},"_8282静态成员函数","8.2.8.2静态成员函数",[15,22540,22541],{},"1.静态成员函数定义与访问",[109,22543,22545],{"className":111,"code":22544,"language":113,"meta":39,"style":39},"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",[115,22546,22547,22553,22557,22561,22566,22577,22581,22595,22599,22603,22611,22615,22620,22625,22629,22637,22642,22652],{"__ignoreMap":39},[118,22548,22549,22551],{"class":120,"line":121},[118,22550,14699],{"class":124},[118,22552,15176],{"class":1967},[118,22554,22555],{"class":120,"line":40},[118,22556,1550],{"class":128},[118,22558,22559],{"class":120,"line":1183},[118,22560,14721],{"class":124},[118,22562,22563],{"class":120,"line":1198},[118,22564,22565],{"class":187},"    \u002F\u002F在公共权限下定义静态成员函数\n",[118,22567,22568,22570,22573,22575],{"class":120,"line":1204},[118,22569,11025],{"class":124},[118,22571,22572],{"class":124}," void",[118,22574,11390],{"class":1967},[118,22576,1980],{"class":128},[118,22578,22579],{"class":120,"line":1218},[118,22580,2034],{"class":128},[118,22582,22583,22586,22588,22591,22593],{"class":120,"line":1224},[118,22584,22585],{"class":128},"        coout",[118,22587,1172],{"class":124},[118,22589,22590],{"class":233},"\"静态成员函数的调用\"",[118,22592,1172],{"class":124},[118,22594,1195],{"class":128},[118,22596,22597],{"class":120,"line":1315},[118,22598,2191],{"class":128},[118,22600,22601],{"class":120,"line":1321},[118,22602,3999],{"class":128},[118,22604,22605,22607,22609],{"class":120,"line":1333},[118,22606,5369],{"class":124},[118,22608,5593],{"class":1967},[118,22610,1980],{"class":128},[118,22612,22613],{"class":120,"line":1616},[118,22614,1550],{"class":128},[118,22616,22617],{"class":120,"line":1621},[118,22618,22619],{"class":187},"    \u002F\u002F静态成员函数的调用方式:\n",[118,22621,22622],{"class":120,"line":1627},[118,22623,22624],{"class":187},"    \u002F\u002F1.通过对象访问\n",[118,22626,22627],{"class":120,"line":1632},[118,22628,15318],{"class":128},[118,22630,22631,22633,22635],{"class":120,"line":1646},[118,22632,15871],{"class":128},[118,22634,11556],{"class":1967},[118,22636,5641],{"class":128},[118,22638,22639],{"class":120,"line":1651},[118,22640,22641],{"class":187},"    \u002F\u002F2.通过类名访问\n",[118,22643,22644,22646,22648,22650],{"class":120,"line":1657},[118,22645,18524],{"class":1967},[118,22647,17737],{"class":128},[118,22649,11556],{"class":1967},[118,22651,5641],{"class":128},[118,22653,22654],{"class":120,"line":1678},[118,22655,1569],{"class":128},[72,22657,22658],{"start":40},[75,22659,22660],{},"静态成员函数只能访问静态成员变量",[109,22662,22664],{"className":111,"code":22663,"language":113,"meta":39,"style":39},"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",[115,22665,22666,22672,22676,22680,22684,22694,22698,22712,22717,22729,22733,22744,22754,22758,22762,22766,22776,22780,22793,22797,22801,22805,22809,22823,22831,22835,22839,22843,22847,22855,22859,22869,22874,22878,22886,22890,22896],{"__ignoreMap":39},[118,22667,22668,22670],{"class":120,"line":121},[118,22669,14699],{"class":124},[118,22671,15176],{"class":1967},[118,22673,22674],{"class":120,"line":40},[118,22675,1550],{"class":128},[118,22677,22678],{"class":120,"line":1183},[118,22679,14721],{"class":124},[118,22681,22682],{"class":120,"line":1198},[118,22683,22565],{"class":187},[118,22685,22686,22688,22690,22692],{"class":120,"line":1204},[118,22687,11025],{"class":124},[118,22689,22572],{"class":124},[118,22691,11390],{"class":1967},[118,22693,1980],{"class":128},[118,22695,22696],{"class":120,"line":1218},[118,22697,2034],{"class":128},[118,22699,22700,22703,22705,22707,22709],{"class":120,"line":1224},[118,22701,22702],{"class":128},"        m_A",[118,22704,174],{"class":124},[118,22706,439],{"class":177},[118,22708,184],{"class":128},[118,22710,22711],{"class":187}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[118,22713,22714],{"class":120,"line":1315},[118,22715,22716],{"class":187},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[118,22718,22719,22721,22723,22725,22727],{"class":120,"line":1321},[118,22720,22585],{"class":128},[118,22722,1172],{"class":124},[118,22724,22590],{"class":233},[118,22726,1172],{"class":124},[118,22728,1195],{"class":128},[118,22730,22731],{"class":120,"line":1333},[118,22732,2191],{"class":128},[118,22734,22735,22737,22739,22741],{"class":120,"line":1616},[118,22736,11025],{"class":124},[118,22738,2386],{"class":124},[118,22740,15453],{"class":128},[118,22742,22743],{"class":187}," \u002F\u002F静态成员变量\n",[118,22745,22746,22748,22751],{"class":120,"line":1621},[118,22747,1989],{"class":124},[118,22749,22750],{"class":128}," m_B;",[118,22752,22753],{"class":187}," \u002F\u002F非静态成员变量\n",[118,22755,22756],{"class":120,"line":1627},[118,22757,2404],{"emptyLinePlaceholder":45},[118,22759,22760],{"class":120,"line":1632},[118,22761,15227],{"class":124},[118,22763,22764],{"class":120,"line":1646},[118,22765,22378],{"class":187},[118,22767,22768,22770,22772,22774],{"class":120,"line":1651},[118,22769,11025],{"class":124},[118,22771,22572],{"class":124},[118,22773,13623],{"class":1967},[118,22775,1980],{"class":128},[118,22777,22778],{"class":120,"line":1657},[118,22779,2034],{"class":128},[118,22781,22782,22784,22786,22789,22791],{"class":120,"line":1678},[118,22783,3455],{"class":128},[118,22785,1172],{"class":124},[118,22787,22788],{"class":233},"\"这是私有权限下的静态函数调用\"",[118,22790,1172],{"class":124},[118,22792,1195],{"class":128},[118,22794,22795],{"class":120,"line":1683},[118,22796,2191],{"class":128},[118,22798,22799],{"class":120,"line":1697},[118,22800,2404],{"emptyLinePlaceholder":45},[118,22802,22803],{"class":120,"line":1702},[118,22804,2404],{"emptyLinePlaceholder":45},[118,22806,22807],{"class":120,"line":1731},[118,22808,3999],{"class":128},[118,22810,22811,22813,22815,22817,22819,22821],{"class":120,"line":1736},[118,22812,132],{"class":124},[118,22814,15574],{"class":1967},[118,22816,22208],{"class":128},[118,22818,174],{"class":124},[118,22820,320],{"class":177},[118,22822,1294],{"class":128},[118,22824,22825,22827,22829],{"class":120,"line":1753},[118,22826,5369],{"class":124},[118,22828,5593],{"class":1967},[118,22830,1980],{"class":128},[118,22832,22833],{"class":120,"line":1758},[118,22834,1550],{"class":128},[118,22836,22837],{"class":120,"line":1763},[118,22838,22619],{"class":187},[118,22840,22841],{"class":120,"line":1768},[118,22842,22624],{"class":187},[118,22844,22845],{"class":120,"line":1782},[118,22846,15318],{"class":128},[118,22848,22849,22851,22853],{"class":120,"line":1787},[118,22850,15871],{"class":128},[118,22852,11556],{"class":1967},[118,22854,5641],{"class":128},[118,22856,22857],{"class":120,"line":2581},[118,22858,22641],{"class":187},[118,22860,22861,22863,22865,22867],{"class":120,"line":2595},[118,22862,18524],{"class":1967},[118,22864,17737],{"class":128},[118,22866,11556],{"class":1967},[118,22868,5641],{"class":128},[118,22870,22871],{"class":120,"line":2603},[118,22872,22873],{"class":187},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[118,22875,22876],{"class":120,"line":2608},[118,22877,1569],{"class":128},[118,22879,22880,22882,22884],{"class":120,"line":2614},[118,22881,132],{"class":124},[118,22883,1977],{"class":1967},[118,22885,1980],{"class":128},[118,22887,22888],{"class":120,"line":2620},[118,22889,1550],{"class":128},[118,22891,22892,22894],{"class":120,"line":2625},[118,22893,5638],{"class":1967},[118,22895,5641],{"class":128},[118,22897,22898],{"class":120,"line":7953},[118,22899,1569],{"class":128},[89,22901,22903],{"id":22902},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22003,22905,22907],{"id":22906},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[15,22909,22910],{},"在c++中，类内的成员变量和成员函数分开存储",[15,22912,22913],{},"只有非静态成员变量才属于类的对象上",[22915,22916,22918],"h5",{"id":22917},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[109,22920,22922],{"className":111,"code":22921,"language":113,"meta":39,"style":39},"#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",[115,22923,22924,22931,22941,22947,22951,22955,22959,22967,22971,22975,22998,23002,23010,23014,23020],{"__ignoreMap":39},[118,22925,22926,22928],{"class":120,"line":121},[118,22927,1953],{"class":124},[118,22929,22930],{"class":233},"\u003Ciostraem>\n",[118,22932,22933,22935,22937,22939],{"class":120,"line":40},[118,22934,1961],{"class":124},[118,22936,1964],{"class":124},[118,22938,1968],{"class":1967},[118,22940,1294],{"class":128},[118,22942,22943,22945],{"class":120,"line":1183},[118,22944,14699],{"class":124},[118,22946,15176],{"class":1967},[118,22948,22949],{"class":120,"line":1198},[118,22950,1550],{"class":128},[118,22952,22953],{"class":120,"line":1204},[118,22954,2404],{"emptyLinePlaceholder":45},[118,22956,22957],{"class":120,"line":1218},[118,22958,3999],{"class":128},[118,22960,22961,22963,22965],{"class":120,"line":1224},[118,22962,5369],{"class":124},[118,22964,5593],{"class":1967},[118,22966,1980],{"class":128},[118,22968,22969],{"class":120,"line":1315},[118,22970,1550],{"class":128},[118,22972,22973],{"class":120,"line":1321},[118,22974,15318],{"class":128},[118,22976,22977,22979,22981,22984,22986,22989,22991,22993,22995],{"class":120,"line":1333},[118,22978,1555],{"class":128},[118,22980,1172],{"class":124},[118,22982,22983],{"class":233},"\"size of p=\"",[118,22985,1172],{"class":124},[118,22987,22988],{"class":1967},"sizeoif",[118,22990,6544],{"class":128},[118,22992,1172],{"class":124},[118,22994,1242],{"class":128},[118,22996,22997],{"class":187}," \u002F\u002F查看这个空类的占用的内存空间\n",[118,22999,23000],{"class":120,"line":1616},[118,23001,1569],{"class":128},[118,23003,23004,23006,23008],{"class":120,"line":1621},[118,23005,132],{"class":124},[118,23007,1977],{"class":1967},[118,23009,1980],{"class":128},[118,23011,23012],{"class":120,"line":1627},[118,23013,1550],{"class":128},[118,23015,23016,23018],{"class":120,"line":1632},[118,23017,5638],{"class":1967},[118,23019,5641],{"class":128},[118,23021,23022],{"class":120,"line":1646},[118,23023,1569],{"class":128},[15,23025,23026],{},"输出结果为：size of p=1",[15,23028,23029],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[15,23031,23032],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22915,23034,23036],{"id":23035},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[109,23038,23040],{"className":111,"code":23039,"language":113,"meta":39,"style":39},"#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",[115,23041,23042,23048,23058,23066,23070,23079,23083,23091,23095,23099,23118,23122,23126,23134,23138,23144],{"__ignoreMap":39},[118,23043,23044,23046],{"class":120,"line":121},[118,23045,1953],{"class":124},[118,23047,1956],{"class":233},[118,23049,23050,23052,23054,23056],{"class":120,"line":40},[118,23051,1961],{"class":124},[118,23053,1964],{"class":124},[118,23055,1968],{"class":1967},[118,23057,1294],{"class":128},[118,23059,23060,23062,23064],{"class":120,"line":1183},[118,23061,14699],{"class":124},[118,23063,15574],{"class":1967},[118,23065,2678],{"class":128},[118,23067,23068],{"class":120,"line":1198},[118,23069,1550],{"class":128},[118,23071,23072,23074,23076],{"class":120,"line":1204},[118,23073,1989],{"class":124},[118,23075,15453],{"class":128},[118,23077,23078],{"class":187},"\u002F\u002F非静态成员变量\n",[118,23080,23081],{"class":120,"line":1218},[118,23082,3999],{"class":128},[118,23084,23085,23087,23089],{"class":120,"line":1224},[118,23086,5369],{"class":124},[118,23088,5593],{"class":1967},[118,23090,1980],{"class":128},[118,23092,23093],{"class":120,"line":1315},[118,23094,1550],{"class":128},[118,23096,23097],{"class":120,"line":1321},[118,23098,15318],{"class":128},[118,23100,23101,23103,23105,23107,23109,23111,23113,23115],{"class":120,"line":1333},[118,23102,1555],{"class":128},[118,23104,1172],{"class":124},[118,23106,22983],{"class":233},[118,23108,1376],{"class":124},[118,23110,6544],{"class":128},[118,23112,1172],{"class":124},[118,23114,1242],{"class":128},[118,23116,23117],{"class":187}," \u002F\u002F查看不是空对象时占用多少内存\n",[118,23119,23120],{"class":120,"line":1616},[118,23121,2404],{"emptyLinePlaceholder":45},[118,23123,23124],{"class":120,"line":1621},[118,23125,1569],{"class":128},[118,23127,23128,23130,23132],{"class":120,"line":1627},[118,23129,132],{"class":124},[118,23131,1977],{"class":1967},[118,23133,1980],{"class":128},[118,23135,23136],{"class":120,"line":1632},[118,23137,1550],{"class":128},[118,23139,23140,23142],{"class":120,"line":1646},[118,23141,5638],{"class":1967},[118,23143,5641],{"class":128},[118,23145,23146],{"class":120,"line":1651},[118,23147,1569],{"class":128},[15,23149,23150],{},"输出结果：size of p=4",[15,23152,23153],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[72,23155,23156],{},[75,23157,23158],{},"如果加上非静态成员变量，Person类修改如下",[109,23160,23162],{"className":111,"code":23161,"language":113,"meta":39,"style":39},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[115,23163,23164,23170,23174,23180,23188,23192,23197],{"__ignoreMap":39},[118,23165,23166,23168],{"class":120,"line":121},[118,23167,14699],{"class":124},[118,23169,15176],{"class":1967},[118,23171,23172],{"class":120,"line":40},[118,23173,1550],{"class":128},[118,23175,23176,23178],{"class":120,"line":1183},[118,23177,1989],{"class":124},[118,23179,21397],{"class":128},[118,23181,23182,23184,23186],{"class":120,"line":1198},[118,23183,11025],{"class":124},[118,23185,2386],{"class":124},[118,23187,21404],{"class":128},[118,23189,23190],{"class":120,"line":1204},[118,23191,3999],{"class":128},[118,23193,23194],{"class":120,"line":1218},[118,23195,23196],{"class":187},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[118,23198,23199,23201,23203,23205,23207,23209],{"class":120,"line":1224},[118,23200,132],{"class":124},[118,23202,15574],{"class":1967},[118,23204,22417],{"class":128},[118,23206,174],{"class":124},[118,23208,320],{"class":177},[118,23210,1294],{"class":128},[15,23212,23213],{},"输出结果：4",[15,23215,23216],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[72,23218,23219],{"start":40},[75,23220,23221],{},"加上非静态成员函数",[109,23223,23225],{"className":111,"code":23224,"language":113,"meta":39,"style":39},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[115,23226,23227,23234,23238,23244,23252,23256,23260,23264],{"__ignoreMap":39},[118,23228,23229,23231],{"class":120,"line":121},[118,23230,14699],{"class":124},[118,23232,23233],{"class":1967},"  Person\n",[118,23235,23236],{"class":120,"line":40},[118,23237,1550],{"class":128},[118,23239,23240,23242],{"class":120,"line":1183},[118,23241,1989],{"class":124},[118,23243,21397],{"class":128},[118,23245,23246,23248,23250],{"class":120,"line":1198},[118,23247,14914],{"class":124},[118,23249,11390],{"class":1967},[118,23251,1980],{"class":128},[118,23253,23254],{"class":120,"line":1204},[118,23255,2034],{"class":128},[118,23257,23258],{"class":120,"line":1218},[118,23259,2404],{"emptyLinePlaceholder":45},[118,23261,23262],{"class":120,"line":1224},[118,23263,2191],{"class":128},[118,23265,23266],{"class":120,"line":1315},[118,23267,3999],{"class":128},[15,23269,23270],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[72,23272,23273],{"start":1183},[75,23274,23275],{},"加上静态成员函数",[109,23277,23279],{"className":111,"code":23278,"language":113,"meta":39,"style":39},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[115,23280,23281,23287,23291,23297,23305,23309,23313,23317,23328,23332,23336,23340],{"__ignoreMap":39},[118,23282,23283,23285],{"class":120,"line":121},[118,23284,14699],{"class":124},[118,23286,23233],{"class":1967},[118,23288,23289],{"class":120,"line":40},[118,23290,1550],{"class":128},[118,23292,23293,23295],{"class":120,"line":1183},[118,23294,1989],{"class":124},[118,23296,21397],{"class":128},[118,23298,23299,23301,23303],{"class":120,"line":1198},[118,23300,14914],{"class":124},[118,23302,11390],{"class":1967},[118,23304,1980],{"class":128},[118,23306,23307],{"class":120,"line":1204},[118,23308,2034],{"class":128},[118,23310,23311],{"class":120,"line":1218},[118,23312,2404],{"emptyLinePlaceholder":45},[118,23314,23315],{"class":120,"line":1224},[118,23316,2191],{"class":128},[118,23318,23319,23321,23323,23326],{"class":120,"line":1315},[118,23320,11025],{"class":124},[118,23322,22572],{"class":124},[118,23324,23325],{"class":1967}," func1",[118,23327,1980],{"class":128},[118,23329,23330],{"class":120,"line":1321},[118,23331,2034],{"class":128},[118,23333,23334],{"class":120,"line":1333},[118,23335,2404],{"emptyLinePlaceholder":45},[118,23337,23338],{"class":120,"line":1616},[118,23339,2191],{"class":128},[118,23341,23342],{"class":120,"line":1621},[118,23343,3999],{"class":128},[15,23345,23213],{},[15,23347,23348],{},"解释：静态成员函数也不属于类上",[5131,23350,7679],{},{"title":39,"searchDepth":40,"depth":40,"links":23352},[23353,23359],{"id":14650,"depth":40,"text":14651,"children":23354},[23355,23356,23357,23358],{"id":14654,"depth":1183,"text":14655},{"id":15379,"depth":1183,"text":15380},{"id":15551,"depth":1183,"text":15552},{"id":16010,"depth":1183,"text":16011},{"id":18382,"depth":40,"text":18383,"children":23360},[23361,23362,23363,23364,23365,23366,23367,23368,23369],{"id":18394,"depth":1183,"text":18395},{"id":18687,"depth":1183,"text":18688},{"id":19178,"depth":1183,"text":19179},{"id":20275,"depth":1183,"text":20276},{"id":20698,"depth":1183,"text":20699},{"id":21177,"depth":1183,"text":21178},{"id":21552,"depth":1183,"text":21553},{"id":21965,"depth":1183,"text":21966},{"id":22902,"depth":1183,"text":22903},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14615,"description":23370},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23377,"title":113,"body":23378,"description":42,"extension":43,"meta":23382,"navigation":45,"path":23384,"seo":23385,"stem":23386,"__hash__":23387},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23379,"toc":23380},[],{"title":39,"searchDepth":40,"depth":40,"links":23381},[],{"category":23383},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":113,"description":42},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23389,"title":23390,"body":23391,"description":39,"extension":43,"meta":23981,"navigation":45,"path":23982,"seo":23983,"stem":23984,"__hash__":23985},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23392,"toc":23963},[23393,23396,23400,23403,23406,23409,23427,23432,23435,23438,23441,23444,23449,23452,23457,23460,23463,23467,23470,23473,23479,23482,23500,23504,23508,23511,23516,23519,23523,23526,23539,23542,23546,23549,23552,23555,23580,23583,23592,23603,23618,23650,23654,23661,23669,23673,23676,23679,23684,23688,23691,23694,23699,23702,23706,23709,23712,23717,23720,23724,23729,23733,23800,23804,23807,23810,23813,23816,23819,23825,23846,23849,23863,23871,23875,23878,23881,23886,23889,23894,23899,23902,23905,23910,23915,23918,23923,23928,23931,23936,23941,23944,23947,23952,23955,23960],[10,23394,23390],{"id":23395},"_1强化学习基本认识",[60,23397,23399],{"id":23398},"_11什么是强化学习","1.1.什么是强化学习",[15,23401,23402],{},"强化学习有两部分组成：智能体和环境；",[15,23404,23405],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[15,23407,23408],{},"强化学习与监督学习的区别:",[72,23410,23411,23414,23417,23420],{},[75,23412,23413],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[75,23415,23416],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[75,23418,23419],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[75,23421,23422,23423,23426],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[278,23424,23425],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[15,23428,23429],{},[1466,23430],{"alt":39,"src":23431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[15,23433,23434],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[15,23436,23437],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[15,23439,23440],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[15,23442,23443],{},"获取奖励",[15,23445,23446],{},[1466,23447],{"alt":39,"src":23448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[15,23450,23451],{},"强化学习可以分成标准强化学习和深度强化学习",[15,23453,23454],{},[1466,23455],{"alt":39,"src":23456},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[15,23458,23459],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[15,23461,23462],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[60,23464,23466],{"id":23465},"_12强化学习应用场景","1.2.强化学习应用场景",[15,23468,23469],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[15,23471,23472],{},"具身智能中的应用",[15,23474,23475,23478],{},[278,23476,23477],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[15,23480,23481],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[15,23483,23484,23485,23488,23489,23492,23493,23496,23497],{},"机器人是",[278,23486,23487],{},"躯体","，深度学习是",[278,23490,23491],{},"神经元****网络","，VLA是",[278,23494,23495],{},"通用的行为逻辑","，而强化学习是",[278,23498,23499],{},"教练",[60,23501,23503],{"id":23502},"_13序列决策","1.3.序列决策",[89,23505,23507],{"id":23506},"_131智能体与环境","1.3.1.智能体与环境",[15,23509,23510],{},"强化学习研究的问题是智能体agent与环境交互的问题",[15,23512,23513],{},[1466,23514],{"alt":39,"src":23515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[15,23517,23518],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[89,23520,23522],{"id":23521},"_132奖励","1.3.2.奖励",[15,23524,23525],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[15,23527,23528,23529,23538],{},"取某个策略的表现如何。强化学习的目的就是",[278,23530,23531,23532,23537],{},"最大化",[278,23533,23534],{},[278,23535,23536],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[15,23540,23541],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[89,23543,23545],{"id":23544},"_133序列决策","1.3.3.序列决策",[15,23547,23548],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[15,23550,23551],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[15,23553,23554],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[15,23556,23557,23561,23562,23564,23565,23567,23568,23570,23571,13800,23574,13800,23577],{},[23558,23559,23560],"em",{},"Ht"," = ",[23558,23563,724],{},"1*, a",[23558,23566,346],{},", r",[23558,23569,346],{},", . . . ,* ",[23558,23572,23573],{},"ot",[23558,23575,23576],{},", at ,",[23558,23578,23579],{},"rt",[15,23581,23582],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[15,23584,23585,23561,23588,1662,23590,557],{},[23558,23586,23587],{},"st",[23558,23589,181],{},[23558,23591,23560],{},[15,23593,23594,23595,23598,23599,23602],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[278,23596,23597],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[278,23600,23601],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[15,23604,23605,23606,23609,23610,23613,23614,23617],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[278,23607,23608],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[278,23611,23612],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23558,23615,23616],{},"S, A, T, R, Ω, O, γ",")。",[15,23619,23620,23621,23623,23624,23626,23627,129,23629,23632,23633,23635,23636,129,23639,23642,23643,23645,23646,23649],{},"其中 ",[23558,23622,817],{}," 表示状态空间，为隐变量，",[23558,23625,361],{}," 为动作空间，",[23558,23628,842],{},[23558,23630,23631],{},"s ′ |s, a",") 为状态转移概率，",[23558,23634,792],{}," 为奖励函数，",[23558,23637,23638],{},"Ω",[23558,23640,23641],{},"o|s, a",") 为观测概率，",[23558,23644,718],{}," 为观测空间，",[23558,23647,23648],{},"γ"," 为折扣因子。",[60,23651,23653],{"id":23652},"_14动作空间","1.4.动作空间",[15,23655,23656,23657,23660],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[278,23658,23659],{},"动作空间"," ，动作空间分为:",[72,23662,23663,23666],{},[75,23664,23665],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[75,23667,23668],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[60,23670,23672],{"id":23671},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[15,23674,23675],{},"由策略、价值函数、模型三部分组成",[15,23677,23678],{},"这三者组成马尔可夫决策过程",[15,23680,23681],{},[1466,23682],{"alt":39,"src":23683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[89,23685,23687],{"id":23686},"_151策略","1.5.1.策略",[15,23689,23690],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[15,23692,23693],{},"策略可分为两种：",[15,23695,23696],{},[1466,23697],{"alt":39,"src":23698},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[15,23700,23701],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[89,23703,23705],{"id":23704},"_152价值函数","1.5.2.价值函数",[15,23707,23708],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[15,23710,23711],{},"价值函数中有一个折扣因子，类似于存款利息",[15,23713,23714],{},[1466,23715],{"alt":39,"src":23716},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[15,23718,23719],{},"进入某个状态采取的最优动作可以通过Q函数得到",[89,23721,23723],{"id":23722},"_153模型","1.5.3.模型",[15,23725,23726],{},[1466,23727],{"alt":39,"src":23728},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[60,23730,23732],{"id":23731},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[266,23734,23735,23746],{},[269,23736,23737],{},[272,23738,23739,23743],{},[275,23740,23742],{"align":23741},"left","类型",[275,23744,23745],{"align":23741},"特点",[313,23747,23748,23758,23768,23778,23790],{},[272,23749,23750,23755],{},[318,23751,23752],{"align":23741},[278,23753,23754],{},"基于价值的智能体",[318,23756,23757],{"align":23741},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[272,23759,23760,23765],{},[318,23761,23762],{"align":23741},[278,23763,23764],{},"基于策略的智能体",[318,23766,23767],{"align":23741},"直接学习策略，没有学习价值函数",[272,23769,23770,23775],{},[318,23771,23772],{"align":23741},[278,23773,23774],{},"演员-评论员智能体",[318,23776,23777],{"align":23741},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[272,23779,23780,23785],{},[318,23781,23782],{"align":23741},[278,23783,23784],{},"有模型强化学习智能体",[318,23786,23787],{"align":23741},[1466,23788],{"alt":39,"src":23789},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[272,23791,23792,23797],{},[318,23793,23794],{"align":23741},[278,23795,23796],{},"免模型强化学习智能体",[318,23798,23799],{"align":23741},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[60,23801,23803],{"id":23802},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[15,23805,23806],{},"学习和规划是序列决策的两个基本问题",[15,23808,23809],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[15,23811,23812],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[15,23814,23815],{},"强化学习用到的库：Gym",[15,23817,23818],{},"Gym可以检验强化学习算法的优劣",[15,23820,23821,23824],{},[278,23822,23823],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[109,23826,23830],{"className":23827,"code":23828,"language":23829,"meta":39,"style":39},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[115,23831,23832],{"__ignoreMap":39},[118,23833,23834,23837,23840,23843],{"class":120,"line":121},[118,23835,23836],{"class":1967},"pip",[118,23838,23839],{"class":233}," install",[118,23841,23842],{"class":233}," gym==",[118,23844,23845],{"class":177},"0.25.2\n",[15,23847,23848],{},"显示图形界面需要",[109,23850,23852],{"className":23827,"code":23851,"language":23829,"meta":39,"style":39},"pip install pygame\n",[115,23853,23854],{"__ignoreMap":39},[118,23855,23856,23858,23860],{"class":120,"line":121},[118,23857,23836],{"class":1967},[118,23859,23839],{"class":233},[118,23861,23862],{"class":233}," pygame\n",[15,23864,23865,23866],{},"有关Gym库的相关文档介绍：",[21,23867,23870],{"href":23868,"rel":23869},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[60,23872,23874],{"id":23873},"_18一些补充基础概念","1.8.一些补充基础概念",[15,23876,23877],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[15,23879,23880],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[15,23882,23883],{},[1466,23884],{"alt":39,"src":23885},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[15,23887,23888],{},"折扣率需要自己来设定",[15,23890,23891],{},[1466,23892],{"alt":39,"src":23893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[72,23895,23896],{},[75,23897,23898],{},"状态转移函数：",[15,23900,23901],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[15,23903,23904],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[15,23906,23907],{},[1466,23908],{"alt":39,"src":23909},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[72,23911,23912],{"start":40},[75,23913,23914],{},"动作价值函数：",[15,23916,23917],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[15,23919,23920],{},[1466,23921],{"alt":39,"src":23922},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[72,23924,23925],{"start":1183},[75,23926,23927],{},"最优动作价值函数：",[15,23929,23930],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[15,23932,23933],{},[1466,23934],{"alt":39,"src":23935},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[72,23937,23938],{"start":1198},[75,23939,23940],{},"状态价值函数:",[15,23942,23943],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[15,23945,23946],{},"它衡量的是“一个具体动作”的长期价值",[15,23948,23949],{},[1466,23950],{"alt":39,"src":23951},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[15,23953,23954],{},"几个价值函数之间的比较：",[15,23956,23957],{},[1466,23958],{"alt":39,"src":23959},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5131,23961,23962],{},"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":39,"searchDepth":40,"depth":40,"links":23964},[23965,23966,23967,23972,23973,23978,23979,23980],{"id":23398,"depth":40,"text":23399},{"id":23465,"depth":40,"text":23466},{"id":23502,"depth":40,"text":23503,"children":23968},[23969,23970,23971],{"id":23506,"depth":1183,"text":23507},{"id":23521,"depth":1183,"text":23522},{"id":23544,"depth":1183,"text":23545},{"id":23652,"depth":40,"text":23653},{"id":23671,"depth":40,"text":23672,"children":23974},[23975,23976,23977],{"id":23686,"depth":1183,"text":23687},{"id":23704,"depth":1183,"text":23705},{"id":23722,"depth":1183,"text":23723},{"id":23731,"depth":40,"text":23732},{"id":23802,"depth":40,"text":23803},{"id":23873,"depth":40,"text":23874},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23390,"description":39},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23987,"title":23988,"body":23989,"description":23996,"extension":43,"meta":24007,"navigation":45,"path":24008,"seo":24009,"stem":24010,"__hash__":24011},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23990,"toc":24005},[23991,23994,23997,24002],[10,23992,23988],{"id":23993},"_2马尔可夫决策过程",[15,23995,23996],{},"这是强化学习的基本框架",[15,23998,23999],{},[1466,24000],{"alt":39,"src":24001},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[15,24003,24004],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":39,"searchDepth":40,"depth":40,"links":24006},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23988,"description":23996},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24013,"title":24014,"body":24015,"description":39,"extension":43,"meta":24131,"navigation":45,"path":24132,"seo":24133,"stem":24134,"__hash__":24135},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24016,"toc":24126},[24017,24020,24024,24027,24032,24037,24040,24045,24048,24053,24056,24060,24065,24068,24073,24078,24083,24086,24090,24095,24098,24103,24108,24113,24118,24121],[10,24018,24014],{"id":24019},"_3动作价值函数",[60,24021,24023],{"id":24022},"_31dqn","3.1.DQN",[15,24025,24026],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[15,24028,24029],{},[1466,24030],{"alt":39,"src":24031},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[15,24033,24034],{},[1466,24035],{"alt":39,"src":24036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[15,24038,24039],{},"DQN算法的描述：",[15,24041,24042],{},[1466,24043],{"alt":39,"src":24044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[15,24046,24047],{},"这里的Dense指的是全连接层",[15,24049,24050],{},[1466,24051],{"alt":39,"src":24052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[15,24054,24055],{},"当前观测的状态为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算法",[60,24057,24059],{"id":24058},"_32dqn的举例","3.2.DQN的举例",[15,24061,24062],{},[1466,24063],{"alt":39,"src":24064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[15,24066,24067],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[15,24069,24070],{},[1466,24071],{"alt":39,"src":24072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[15,24074,24075],{},[1466,24076],{"alt":39,"src":24077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[15,24079,24080],{},[1466,24081],{"alt":39,"src":24082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[15,24084,24085],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[60,24087,24089],{"id":24088},"_33td算法","3.3.TD算法",[15,24091,24092],{},[1466,24093],{"alt":39,"src":24094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[15,24096,24097],{},"强化学习TD算法公式的粗略解释：",[15,24099,24100],{},[1466,24101],{"alt":39,"src":24102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[15,24104,24105],{},[1466,24106],{"alt":39,"src":24107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[15,24109,24110],{},[1466,24111],{"alt":39,"src":24112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[15,24114,24115],{},[1466,24116],{"alt":39,"src":24117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[15,24119,24120],{},"TD算法总结：",[15,24122,24123],{},[1466,24124],{"alt":39,"src":24125},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":39,"searchDepth":40,"depth":40,"links":24127},[24128,24129,24130],{"id":24022,"depth":40,"text":24023},{"id":24058,"depth":40,"text":24059},{"id":24088,"depth":40,"text":24089},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24014,"description":39},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24137,"title":24138,"body":24139,"description":39,"extension":43,"meta":24372,"navigation":45,"path":24373,"seo":24374,"stem":24375,"__hash__":24376},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24140,"toc":24368},[24141,24144,24148,24151,24154,24159,24164,24167,24172,24177,24180,24185,24188,24193,24196,24201,24204,24209,24212,24217,24222,24225,24230,24233,24236,24241,24244,24249,24254,24258,24261,24264,24269,24274,24277,24282,24287,24290,24295,24298,24301,24306,24309,24314,24317,24322,24327,24330,24335,24340,24343,24348,24351,24356,24359],[10,24142,24138],{"id":24143},"_4策略学习",[60,24145,24147],{"id":24146},"_41概念描述","4.1.概念描述",[15,24149,24150],{},"用神经网络（策略网络）近似策略函数",[15,24152,24153],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[15,24155,24156],{},[1466,24157],{"alt":39,"src":24158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[15,24160,24161],{},[1466,24162],{"alt":39,"src":24163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[15,24165,24166],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[15,24168,24169],{},[1466,24170],{"alt":39,"src":24171},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[15,24173,24174],{},[1466,24175],{"alt":39,"src":24176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[15,24178,24179],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[15,24181,24182],{},[1466,24183],{"alt":39,"src":24184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[15,24186,24187],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[15,24189,24190],{},[1466,24191],{"alt":39,"src":24192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[15,24194,24195],{},"改进theta要用到策略梯度算法",[15,24197,24198],{},[1466,24199],{"alt":39,"src":24200},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[15,24202,24203],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[15,24205,24206],{},[1466,24207],{"alt":39,"src":24208},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[15,24210,24211],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[15,24213,24214],{},[1466,24215],{"alt":39,"src":24216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[15,24218,24219],{},[1466,24220],{"alt":39,"src":24221},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[15,24223,24224],{},"梯度公式总结：",[15,24226,24227],{},[1466,24228],{"alt":39,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[15,24231,24232],{},"两个公式的分别应用场景：",[15,24234,24235],{},"对于离散的动作：",[15,24237,24238],{},[1466,24239],{"alt":39,"src":24240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[15,24242,24243],{},"对于连续的动作：",[15,24245,24246],{},[1466,24247],{"alt":39,"src":24248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[15,24250,24251],{},[1466,24252],{"alt":39,"src":24253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[60,24255,24257],{"id":24256},"_42概率梯度算法总结","4.2.概率梯度算法总结",[15,24259,24260],{},"使用蒙特卡洛来近似计算策略梯度",[15,24262,24263],{},"蒙特卡洛法的解释如下：",[15,24265,24266],{},[1466,24267],{"alt":39,"src":24268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[15,24270,24271],{},[1466,24272],{"alt":39,"src":24273},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[15,24275,24276],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[72,24278,24279],{},[75,24280,24281],{},"方法一：reinforce算法",[15,24283,24284],{},[1466,24285],{"alt":39,"src":24286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[15,24288,24289],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[72,24291,24292],{"start":40},[75,24293,24294],{},"方法二：actor-critic算法",[15,24296,24297],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[15,24299,24300],{},"两个网络的构建：",[15,24302,24303],{},[1466,24304],{"alt":39,"src":24305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[15,24307,24308],{},"actor网路：",[15,24310,24311],{},[1466,24312],{"alt":39,"src":24313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[15,24315,24316],{},"critic网络",[15,24318,24319],{},[1466,24320],{"alt":39,"src":24321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[72,24323,24324],{"start":1183},[75,24325,24326],{},"网络的训练",[15,24328,24329],{},"网络描述",[15,24331,24332],{},[1466,24333],{"alt":39,"src":24334},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[15,24336,24337],{},[1466,24338],{"alt":39,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[15,24341,24342],{},"TD算法更新梯度：",[15,24344,24345],{},[1466,24346],{"alt":39,"src":24347},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[15,24349,24350],{},"策略网络更新梯度：",[15,24352,24353],{},[1466,24354],{"alt":39,"src":24355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[15,24357,24358],{},"训练整个流程的具体描述：",[15,24360,24361,24364,24365],{},[1466,24362],{"alt":39,"src":24363},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1466,24366],{"alt":39,"src":24367},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":39,"searchDepth":40,"depth":40,"links":24369},[24370,24371],{"id":24146,"depth":40,"text":24147},{"id":24256,"depth":40,"text":24257},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24138,"description":39},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24378,"title":24379,"body":24380,"description":24387,"extension":43,"meta":24437,"navigation":45,"path":24438,"seo":24439,"stem":24440,"__hash__":24441},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24381,"toc":24433},[24382,24385,24388,24392,24395,24400,24404,24407,24412,24415,24420,24425,24428],[10,24383,24379],{"id":24384},"_5alphago算法",[15,24386,24387],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[60,24389,24391],{"id":24390},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[15,24393,24394],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[15,24396,24397],{},[1466,24398],{"alt":39,"src":24399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[60,24401,24403],{"id":24402},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[15,24405,24406],{},"采用强化学习的方式训练策略网络",[15,24408,24409],{},[1466,24410],{"alt":39,"src":24411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[15,24413,24414],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[15,24416,24417],{},[1466,24418],{"alt":39,"src":24419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[15,24421,24422],{},[1466,24423],{"alt":39,"src":24424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[15,24426,24427],{},"强化学习训练策略网络的总结：",[15,24429,24430],{},[1466,24431],{"alt":39,"src":24432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":39,"searchDepth":40,"depth":40,"links":24434},[24435,24436],{"id":24390,"depth":40,"text":24391},{"id":24402,"depth":40,"text":24403},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24379,"description":24387},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24443,"title":24444,"body":24445,"description":24452,"extension":43,"meta":24455,"navigation":45,"path":24456,"seo":24457,"stem":24458,"__hash__":24459},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24446,"toc":24453},[24447,24450],[10,24448,24444],{"id":24449},"_6价值网络",[15,24451,24452],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":39,"searchDepth":40,"depth":40,"links":24454},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24444,"description":24452},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24461,"title":24462,"body":24463,"description":24467,"extension":43,"meta":24468,"navigation":45,"path":24469,"seo":24470,"stem":24471,"__hash__":24472},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24464,"toc":24465},[],{"title":39,"searchDepth":40,"depth":40,"links":24466},[],"记录自己的强化学习笔记。",{"category":23383},"\u002Fwiki\u002F2025-12-04",{"title":24462,"description":24467},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24474,"title":24475,"body":24476,"description":42,"extension":43,"meta":24515,"navigation":45,"path":24516,"seo":24517,"stem":24518,"__hash__":24519},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24477,"toc":24513},[24478,24481,24484,24490,24493,24499,24502,24507,24510],[10,24479,24475],{"id":24480},"_1-项目概览与官方资源",[15,24482,24483],{},"官方文档：",[15,24485,24486],{},[21,24487,24488],{"href":24488,"rel":24489},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25],[15,24491,24492],{},"官方代码仓库：",[15,24494,24495],{},[21,24496,24497],{"href":24497,"rel":24498},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25],[15,24500,24501],{},"复现大体流程：",[15,24503,24504],{},[1466,24505],{"alt":39,"src":24506},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[15,24508,24509],{},"本教程的目标是打通这条链路：",[15,24511,24512],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":39,"searchDepth":40,"depth":40,"links":24514},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24475,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24521,"title":24522,"body":24523,"description":42,"extension":43,"meta":24639,"navigation":45,"path":24640,"seo":24641,"stem":24642,"__hash__":24643},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24524,"toc":24634},[24525,24528,24532,24535,24542,24546,24549,24558,24568,24572,24602,24605,24631],[10,24526,24522],{"id":24527},"_2-环境准备与设备连接",[60,24529,24531],{"id":24530},"_21-系统与环境","2.1 系统与环境",[15,24533,24534],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[15,24536,24537,24538,24541],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[115,24539,24540],{},"lerobot"," 依赖。",[60,24543,24545],{"id":24544},"_22-机械臂串口识别","2.2 机械臂串口识别",[15,24547,24548],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[109,24550,24552],{"className":23827,"code":24551,"language":23829,"meta":39,"style":39},"lerobot-find-out\n",[115,24553,24554],{"__ignoreMap":39},[118,24555,24556],{"class":120,"line":121},[118,24557,24551],{"class":1967},[15,24559,24560,24561,341,24564,24567],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[115,24562,24563],{},"\u002Fdev\u002FttyACM0",[115,24565,24566],{},"\u002Fdev\u002FttyACM1","）。",[60,24569,24571],{"id":24570},"_23-串口授权","2.3 串口授权",[109,24573,24575],{"className":23827,"code":24574,"language":23829,"meta":39,"style":39},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[115,24576,24577,24591],{"__ignoreMap":39},[118,24578,24579,24582,24585,24588],{"class":120,"line":121},[118,24580,24581],{"class":1967},"sudo",[118,24583,24584],{"class":233}," chmod",[118,24586,24587],{"class":177}," 666",[118,24589,24590],{"class":233}," \u002Fdev\u002FttyACM0\n",[118,24592,24593,24595,24597,24599],{"class":120,"line":40},[118,24594,24581],{"class":1967},[118,24596,24584],{"class":233},[118,24598,24587],{"class":177},[118,24600,24601],{"class":233}," \u002Fdev\u002FttyACM1\n",[15,24603,24604],{},"说明：",[1135,24606,24607,24612,24618,24628],{},[75,24608,24609,24611],{},[115,24610,24581],{},"：以 root 权限执行命令。",[75,24613,24614,24617],{},[115,24615,24616],{},"chmod","：修改设备节点权限。",[75,24619,24620,24623,24624,24627],{},[115,24621,24622],{},"666","：",[115,24625,24626],{},"rw-rw-rw-","，所有用户可读写。",[75,24629,24630],{},"串口号必须替换为你机器上的真实端口。",[5131,24632,24633],{},"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":39,"searchDepth":40,"depth":40,"links":24635},[24636,24637,24638],{"id":24530,"depth":40,"text":24531},{"id":24544,"depth":40,"text":24545},{"id":24570,"depth":40,"text":24571},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24522,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24645,"title":24646,"body":24647,"description":42,"extension":43,"meta":24808,"navigation":45,"path":24809,"seo":24810,"stem":24811,"__hash__":24812},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24648,"toc":24804},[24649,24653,24657,24663,24666,24723,24726,24730,24733,24801],[10,24650,24652],{"id":24651},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[60,24654,24656],{"id":24655},"_31-配置电机-id","3.1 配置电机 ID",[15,24658,24659,24660,24662],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[115,24661,346],{},"，需要改成机械臂链路里不冲突的编号。",[15,24664,24665],{},"方式一：用 LeRobot 命令逐步写入。",[109,24667,24669],{"className":23827,"code":24668,"language":23829,"meta":39,"style":39},"# 主臂舵机配置 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",[115,24670,24671,24676,24684,24691,24696,24700,24705,24711,24718],{"__ignoreMap":39},[118,24672,24673],{"class":120,"line":121},[118,24674,24675],{"class":187},"# 主臂舵机配置 ID\n",[118,24677,24678,24681],{"class":120,"line":40},[118,24679,24680],{"class":1967},"lerobot-setup-motors",[118,24682,24683],{"class":177}," \\\n",[118,24685,24686,24689],{"class":120,"line":1183},[118,24687,24688],{"class":177},"  --teleop.type=so101_leader",[118,24690,24683],{"class":177},[118,24692,24693],{"class":120,"line":1198},[118,24694,24695],{"class":177},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[118,24697,24698],{"class":120,"line":1204},[118,24699,2404],{"emptyLinePlaceholder":45},[118,24701,24702],{"class":120,"line":1218},[118,24703,24704],{"class":187},"# 从臂舵机配置 ID\n",[118,24706,24707,24709],{"class":120,"line":1224},[118,24708,24680],{"class":1967},[118,24710,24683],{"class":177},[118,24712,24713,24716],{"class":120,"line":1315},[118,24714,24715],{"class":177},"  --robot.type=so101_follower",[118,24717,24683],{"class":177},[118,24719,24720],{"class":120,"line":1321},[118,24721,24722],{"class":177},"  --robot.port=\u002Fdev\u002FttyACM1\n",[15,24724,24725],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[60,24727,24729],{"id":24728},"_32-机械臂校准","3.2 机械臂校准",[15,24731,24732],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[109,24734,24736],{"className":23827,"code":24735,"language":23829,"meta":39,"style":39},"# 主臂校准\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",[115,24737,24738,24743,24750,24756,24763,24768,24772,24777,24783,24789,24796],{"__ignoreMap":39},[118,24739,24740],{"class":120,"line":121},[118,24741,24742],{"class":187},"# 主臂校准\n",[118,24744,24745,24748],{"class":120,"line":40},[118,24746,24747],{"class":1967},"lerobot-calibrate",[118,24749,24683],{"class":177},[118,24751,24752,24754],{"class":120,"line":1183},[118,24753,24688],{"class":177},[118,24755,24683],{"class":177},[118,24757,24758,24761],{"class":120,"line":1198},[118,24759,24760],{"class":177},"  --teleop.port=\u002Fdev\u002FttyACM0",[118,24762,24683],{"class":177},[118,24764,24765],{"class":120,"line":1204},[118,24766,24767],{"class":177},"  --teleop.id=my_awesome_leader_arm\n",[118,24769,24770],{"class":120,"line":1218},[118,24771,2404],{"emptyLinePlaceholder":45},[118,24773,24774],{"class":120,"line":1224},[118,24775,24776],{"class":187},"# 从臂校准\n",[118,24778,24779,24781],{"class":120,"line":1315},[118,24780,24747],{"class":1967},[118,24782,24683],{"class":177},[118,24784,24785,24787],{"class":120,"line":1321},[118,24786,24715],{"class":177},[118,24788,24683],{"class":177},[118,24790,24791,24794],{"class":120,"line":1333},[118,24792,24793],{"class":177},"  --robot.port=\u002Fdev\u002FttyACM1",[118,24795,24683],{"class":177},[118,24797,24798],{"class":120,"line":1616},[118,24799,24800],{"class":177},"  --robot.id=my_awesome_follower_arm\n",[5131,24802,24803],{},"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":39,"searchDepth":40,"depth":40,"links":24805},[24806,24807],{"id":24655,"depth":40,"text":24656},{"id":24728,"depth":40,"text":24729},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24646,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24814,"title":24815,"body":24816,"description":42,"extension":43,"meta":25007,"navigation":45,"path":25008,"seo":25009,"stem":25010,"__hash__":25011},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24817,"toc":25003},[24818,24821,24825,24872,24876,24889,24952,24955,25000],[10,24819,24815],{"id":24820},"_4-遥操与相机接入",[60,24822,24824],{"id":24823},"_41-不带相机遥操","4.1 不带相机遥操",[109,24826,24828],{"className":23827,"code":24827,"language":23829,"meta":39,"style":39},"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",[115,24829,24830,24837,24843,24849,24856,24862,24868],{"__ignoreMap":39},[118,24831,24832,24835],{"class":120,"line":121},[118,24833,24834],{"class":1967},"lerobot-teleoperate",[118,24836,24683],{"class":177},[118,24838,24839,24841],{"class":120,"line":40},[118,24840,24715],{"class":177},[118,24842,24683],{"class":177},[118,24844,24845,24847],{"class":120,"line":1183},[118,24846,24793],{"class":177},[118,24848,24683],{"class":177},[118,24850,24851,24854],{"class":120,"line":1198},[118,24852,24853],{"class":177},"  --robot.id=my_awesome_follower_arm",[118,24855,24683],{"class":177},[118,24857,24858,24860],{"class":120,"line":1204},[118,24859,24688],{"class":177},[118,24861,24683],{"class":177},[118,24863,24864,24866],{"class":120,"line":1218},[118,24865,24760],{"class":177},[118,24867,24683],{"class":177},[118,24869,24870],{"class":120,"line":1224},[118,24871,24767],{"class":177},[60,24873,24875],{"id":24874},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[109,24877,24879],{"className":23827,"code":24878,"language":23829,"meta":39,"style":39},"lerobot-find-cameras opencv\n",[115,24880,24881],{"__ignoreMap":39},[118,24882,24883,24886],{"class":120,"line":121},[118,24884,24885],{"class":1967},"lerobot-find-cameras",[118,24887,24888],{"class":233}," opencv\n",[109,24890,24892],{"className":23827,"code":24891,"language":23829,"meta":39,"style":39},"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",[115,24893,24894,24900,24906,24912,24918,24928,24934,24940,24947],{"__ignoreMap":39},[118,24895,24896,24898],{"class":120,"line":121},[118,24897,24834],{"class":1967},[118,24899,24683],{"class":177},[118,24901,24902,24904],{"class":120,"line":40},[118,24903,24715],{"class":177},[118,24905,24683],{"class":177},[118,24907,24908,24910],{"class":120,"line":1183},[118,24909,24793],{"class":177},[118,24911,24683],{"class":177},[118,24913,24914,24916],{"class":120,"line":1198},[118,24915,24853],{"class":177},[118,24917,24683],{"class":177},[118,24919,24920,24923,24926],{"class":120,"line":1204},[118,24921,24922],{"class":177},"  --robot.cameras=",[118,24924,24925],{"class":233},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[118,24927,24683],{"class":177},[118,24929,24930,24932],{"class":120,"line":1218},[118,24931,24688],{"class":177},[118,24933,24683],{"class":177},[118,24935,24936,24938],{"class":120,"line":1224},[118,24937,24760],{"class":177},[118,24939,24683],{"class":177},[118,24941,24942,24945],{"class":120,"line":1315},[118,24943,24944],{"class":177},"  --teleop.id=my_awesome_leader_arm",[118,24946,24683],{"class":177},[118,24948,24949],{"class":120,"line":1321},[118,24950,24951],{"class":177},"  --display_data=true\n",[15,24953,24954],{},"相机参数说明：",[1135,24956,24957,24963,24969,24978,24988,24994],{},[75,24958,24959,24962],{},[115,24960,24961],{},"front","：相机名称。",[75,24964,24965,24968],{},[115,24966,24967],{},"type: opencv","：相机驱动类型。",[75,24970,24971,24974,24975,24567],{},[115,24972,24973],{},"index_or_path","：设备编号或设备路径（如 ",[115,24976,24977],{},"\u002Fdev\u002Fvideo4",[75,24979,24980,24983,24984,24987],{},[115,24981,24982],{},"width"," \u002F ",[115,24985,24986],{},"height","：图像分辨率。",[75,24989,24990,24993],{},[115,24991,24992],{},"fps","：采样帧率。",[75,24995,24996,24999],{},[115,24997,24998],{},"--display_data=true","：启用实时可视化。",[5131,25001,25002],{},"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":39,"searchDepth":40,"depth":40,"links":25004},[25005,25006],{"id":24823,"depth":40,"text":24824},{"id":24874,"depth":40,"text":24875},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24815,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25013,"title":25014,"body":25015,"description":42,"extension":43,"meta":25187,"navigation":45,"path":25188,"seo":25189,"stem":25190,"__hash__":25191},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25016,"toc":25182},[25017,25021,25025,25030,25035,25038,25080,25086,25090,25139,25144,25148,25151,25159,25164,25169,25174,25179],[10,25018,25020],{"id":25019},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[60,25022,25024],{"id":25023},"_51-生成访问令牌","5.1 生成访问令牌",[15,25026,25027],{},[1466,25028],{"alt":39,"src":25029},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[15,25031,25032],{},[1466,25033],{"alt":39,"src":25034},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[15,25036,25037],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[109,25039,25041],{"className":23827,"code":25040,"language":23829,"meta":39,"style":39},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[115,25042,25043,25056],{"__ignoreMap":39},[118,25044,25045,25048,25051,25053],{"class":120,"line":121},[118,25046,25047],{"class":124},"export",[118,25049,25050],{"class":128}," HF_TOKEN",[118,25052,174],{"class":124},[118,25054,25055],{"class":233},"\"your_huggingface_token\"\n",[118,25057,25058,25061,25064,25067,25070,25072,25075,25077],{"class":120,"line":40},[118,25059,25060],{"class":1967},"hf",[118,25062,25063],{"class":233}," auth",[118,25065,25066],{"class":233}," login",[118,25068,25069],{"class":177}," --token",[118,25071,9729],{"class":233},[118,25073,25074],{"class":128},"$HF_TOKEN",[118,25076,379],{"class":233},[118,25078,25079],{"class":177}," --add-to-git-credential\n",[15,25081,25082,25085],{},[115,25083,25084],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[60,25087,25089],{"id":25088},"_52-验证登录","5.2 验证登录",[109,25091,25093],{"className":23827,"code":25092,"language":23829,"meta":39,"style":39},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[115,25094,25095,25126],{"__ignoreMap":39},[118,25096,25097,25100,25102,25105,25107,25109,25112,25115,25118,25121,25124],{"class":120,"line":121},[118,25098,25099],{"class":128},"HF_USER",[118,25101,174],{"class":124},[118,25103,25104],{"class":128},"$(",[118,25106,25060],{"class":1967},[118,25108,25063],{"class":233},[118,25110,25111],{"class":233}," whoami",[118,25113,25114],{"class":124}," |",[118,25116,25117],{"class":1967}," head",[118,25119,25120],{"class":177}," -n",[118,25122,25123],{"class":177}," 1",[118,25125,135],{"class":128},[118,25127,25128,25131,25133,25136],{"class":120,"line":40},[118,25129,25130],{"class":177},"echo",[118,25132,9729],{"class":233},[118,25134,25135],{"class":128},"$HF_USER",[118,25137,25138],{"class":233},"\"\n",[15,25140,25141],{},[1466,25142],{"alt":39,"src":25143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[60,25145,25147],{"id":25146},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[15,25149,25150],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1135,25152,25153,25156],{},[75,25154,25155],{},"Dataset Repo（用于上传演示数据）",[75,25157,25158],{},"Model Repo（用于上传训练后的 ACT 权重）",[15,25160,25161],{},[1466,25162],{"alt":39,"src":25163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[15,25165,25166],{},[1466,25167],{"alt":39,"src":25168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[15,25170,25171],{},[1466,25172],{"alt":39,"src":25173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[15,25175,25176],{},[1466,25177],{"alt":39,"src":25178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5131,25180,25181],{},"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":39,"searchDepth":40,"depth":40,"links":25183},[25184,25185,25186],{"id":25023,"depth":40,"text":25024},{"id":25088,"depth":40,"text":25089},{"id":25146,"depth":40,"text":25147},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25014,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25193,"title":25194,"body":25195,"description":42,"extension":43,"meta":25392,"navigation":45,"path":25393,"seo":25394,"stem":25395,"__hash__":25396},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25196,"toc":25387},[25197,25201,25205,25301,25309,25314,25318,25334,25337,25341,25384],[10,25198,25200],{"id":25199},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[60,25202,25204],{"id":25203},"_61-录制示教数据","6.1 录制示教数据",[109,25206,25208],{"className":23827,"code":25207,"language":23829,"meta":39,"style":39},"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",[115,25209,25210,25217,25223,25229,25235,25244,25250,25256,25262,25269,25279,25286,25296],{"__ignoreMap":39},[118,25211,25212,25215],{"class":120,"line":121},[118,25213,25214],{"class":1967},"lerobot-record",[118,25216,24683],{"class":177},[118,25218,25219,25221],{"class":120,"line":40},[118,25220,24715],{"class":177},[118,25222,24683],{"class":177},[118,25224,25225,25227],{"class":120,"line":1183},[118,25226,24793],{"class":177},[118,25228,24683],{"class":177},[118,25230,25231,25233],{"class":120,"line":1198},[118,25232,24853],{"class":177},[118,25234,24683],{"class":177},[118,25236,25237,25239,25242],{"class":120,"line":1204},[118,25238,24922],{"class":177},[118,25240,25241],{"class":233},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[118,25243,24683],{"class":177},[118,25245,25246,25248],{"class":120,"line":1218},[118,25247,24688],{"class":177},[118,25249,24683],{"class":177},[118,25251,25252,25254],{"class":120,"line":1224},[118,25253,24760],{"class":177},[118,25255,24683],{"class":177},[118,25257,25258,25260],{"class":120,"line":1315},[118,25259,24944],{"class":177},[118,25261,24683],{"class":177},[118,25263,25264,25267],{"class":120,"line":1321},[118,25265,25266],{"class":177},"  --display_data=true",[118,25268,24683],{"class":177},[118,25270,25271,25274,25277],{"class":120,"line":1333},[118,25272,25273],{"class":177},"  --dataset.repo_id=",[118,25275,25276],{"class":233},"\"Embodied-AI-6\u002Fso101_test\"",[118,25278,24683],{"class":177},[118,25280,25281,25284],{"class":120,"line":1616},[118,25282,25283],{"class":177},"  --dataset.num_episodes=10",[118,25285,24683],{"class":177},[118,25287,25288,25291,25294],{"class":120,"line":1621},[118,25289,25290],{"class":177},"  --dataset.single_task=",[118,25292,25293],{"class":233},"\"Grab the green cube\"",[118,25295,24683],{"class":177},[118,25297,25298],{"class":120,"line":1627},[118,25299,25300],{"class":177},"  --resume=true\n",[1135,25302,25303],{},[75,25304,25305,25308],{},[115,25306,25307],{},"--resume=true","：已有同一数据集时继续追加 episode。",[15,25310,25311],{},[1466,25312],{"alt":39,"src":25313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[60,25315,25317],{"id":25316},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[109,25319,25321],{"className":23827,"code":25320,"language":23829,"meta":39,"style":39},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[115,25322,25323],{"__ignoreMap":39},[118,25324,25325,25328,25331],{"class":120,"line":121},[118,25326,25327],{"class":1967},"rm",[118,25329,25330],{"class":177}," -rf",[118,25332,25333],{"class":233}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[15,25335,25336],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[60,25338,25340],{"id":25339},"_63-回放指定-episode","6.3 回放指定 episode",[109,25342,25344],{"className":23827,"code":25343,"language":23829,"meta":39,"style":39},"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",[115,25345,25346,25353,25359,25365,25371,25379],{"__ignoreMap":39},[118,25347,25348,25351],{"class":120,"line":121},[118,25349,25350],{"class":1967},"lerobot-replay",[118,25352,24683],{"class":177},[118,25354,25355,25357],{"class":120,"line":40},[118,25356,24715],{"class":177},[118,25358,24683],{"class":177},[118,25360,25361,25363],{"class":120,"line":1183},[118,25362,24793],{"class":177},[118,25364,24683],{"class":177},[118,25366,25367,25369],{"class":120,"line":1198},[118,25368,24853],{"class":177},[118,25370,24683],{"class":177},[118,25372,25373,25375,25377],{"class":120,"line":1204},[118,25374,25273],{"class":177},[118,25376,25276],{"class":233},[118,25378,24683],{"class":177},[118,25380,25381],{"class":120,"line":1218},[118,25382,25383],{"class":177},"  --dataset.episode=0\n",[5131,25385,25386],{},"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":39,"searchDepth":40,"depth":40,"links":25388},[25389,25390,25391],{"id":25203,"depth":40,"text":25204},{"id":25316,"depth":40,"text":25317},{"id":25339,"depth":40,"text":25340},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25194,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25398,"title":25399,"body":25400,"description":42,"extension":43,"meta":25528,"navigation":45,"path":25529,"seo":25530,"stem":25531,"__hash__":25532},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25401,"toc":25526},[25402,25406,25469,25472,25519,25524],[10,25403,25405],{"id":25404},"_7-act-模型训练","7. ACT 模型训练",[109,25407,25409],{"className":23827,"code":25408,"language":23829,"meta":39,"style":39},"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",[115,25410,25411,25418,25426,25433,25440,25447,25454,25461],{"__ignoreMap":39},[118,25412,25413,25416],{"class":120,"line":121},[118,25414,25415],{"class":1967},"lerobot-train",[118,25417,24683],{"class":177},[118,25419,25420,25422,25424],{"class":120,"line":40},[118,25421,25273],{"class":177},[118,25423,25276],{"class":233},[118,25425,24683],{"class":177},[118,25427,25428,25431],{"class":120,"line":1183},[118,25429,25430],{"class":177},"  --policy.type=act",[118,25432,24683],{"class":177},[118,25434,25435,25438],{"class":120,"line":1198},[118,25436,25437],{"class":177},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[118,25439,24683],{"class":177},[118,25441,25442,25445],{"class":120,"line":1204},[118,25443,25444],{"class":177},"  --job_name=act_so101_test",[118,25446,24683],{"class":177},[118,25448,25449,25452],{"class":120,"line":1218},[118,25450,25451],{"class":177},"  --policy.device=cuda",[118,25453,24683],{"class":177},[118,25455,25456,25459],{"class":120,"line":1224},[118,25457,25458],{"class":177},"  --wandb.enable=false",[118,25460,24683],{"class":177},[118,25462,25463,25466],{"class":120,"line":1315},[118,25464,25465],{"class":177},"  --policy.repo_id=",[118,25467,25468],{"class":233},"\"Embodied-AI-6\u002Flerobot_new\"\n",[15,25470,25471],{},"参数说明：",[1135,25473,25474,25480,25486,25492,25498,25507,25513],{},[75,25475,25476,25479],{},[115,25477,25478],{},"--dataset.repo_id","：训练数据集仓库。",[75,25481,25482,25485],{},[115,25483,25484],{},"--policy.type=act","：策略模型类型为 ACT。",[75,25487,25488,25491],{},[115,25489,25490],{},"--output_dir","：本地训练输出目录。",[75,25493,25494,25497],{},[115,25495,25496],{},"--job_name","：训练任务名称。",[75,25499,25500,25503,25504,24567],{},[115,25501,25502],{},"--policy.device","：训练设备（如 ",[115,25505,25506],{},"cuda",[75,25508,25509,25512],{},[115,25510,25511],{},"--wandb.enable","：是否启用 WandB 可视化。",[75,25514,25515,25518],{},[115,25516,25517],{},"--policy.repo_id","：训练后模型推送目标仓库。",[15,25520,25521],{},[1466,25522],{"alt":39,"src":25523},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5131,25525,25386],{},{"title":39,"searchDepth":40,"depth":40,"links":25527},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25399,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25534,"title":25535,"body":25536,"description":42,"extension":43,"meta":25623,"navigation":45,"path":25624,"seo":25625,"stem":25626,"__hash__":25627},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25537,"toc":25621},[25538,25541,25544,25611,25619],[10,25539,25535],{"id":25540},"_8-策略部署与自动采集",[15,25542,25543],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[109,25545,25547],{"className":23827,"code":25546,"language":23829,"meta":39,"style":39},"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",[115,25548,25549,25555,25561,25567,25575,25581,25588,25596,25604],{"__ignoreMap":39},[118,25550,25551,25553],{"class":120,"line":121},[118,25552,25214],{"class":1967},[118,25554,24683],{"class":177},[118,25556,25557,25559],{"class":120,"line":40},[118,25558,24715],{"class":177},[118,25560,24683],{"class":177},[118,25562,25563,25565],{"class":120,"line":1183},[118,25564,24793],{"class":177},[118,25566,24683],{"class":177},[118,25568,25569,25571,25573],{"class":120,"line":1198},[118,25570,24922],{"class":177},[118,25572,25241],{"class":233},[118,25574,24683],{"class":177},[118,25576,25577,25579],{"class":120,"line":1204},[118,25578,24853],{"class":177},[118,25580,24683],{"class":177},[118,25582,25583,25586],{"class":120,"line":1218},[118,25584,25585],{"class":177},"  --display_data=false",[118,25587,24683],{"class":177},[118,25589,25590,25592,25594],{"class":120,"line":1224},[118,25591,25273],{"class":177},[118,25593,25276],{"class":233},[118,25595,24683],{"class":177},[118,25597,25598,25600,25602],{"class":120,"line":1315},[118,25599,25290],{"class":177},[118,25601,25293],{"class":233},[118,25603,24683],{"class":177},[118,25605,25606,25609],{"class":120,"line":1321},[118,25607,25608],{"class":177},"  --policy.path=",[118,25610,25468],{"class":233},[1135,25612,25613],{},[75,25614,25615,25618],{},[115,25616,25617],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5131,25620,25386],{},{"title":39,"searchDepth":40,"depth":40,"links":25622},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25535,"description":42},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":4,"title":5,"body":25629,"description":42,"extension":43,"meta":25651,"navigation":45,"path":46,"seo":25652,"stem":48,"__hash__":49},{"type":7,"value":25630,"toc":25649},[25631,25633,25635,25640,25642,25647],[10,25632,13],{"id":12},[15,25634,17],{},[15,25636,25637],{},[21,25638,23],{"href":23,"rel":25639},[25],[15,25641,28],{},[15,25643,25644],{},[21,25645,33],{"href":33,"rel":25646},[25],[15,25648,37],{},{"title":39,"searchDepth":40,"depth":40,"links":25650},[],{},{"title":5,"description":42},{"id":25654,"title":25655,"body":25656,"description":25660,"extension":43,"meta":25661,"navigation":45,"path":25662,"seo":25663,"stem":25664,"__hash__":25665},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25657,"toc":25658},[],{"title":39,"searchDepth":40,"depth":40,"links":25659},[],"act复现",{"category":23383},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25655,"description":25660},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25667,"title":25668,"body":25669,"description":39,"extension":43,"meta":25971,"navigation":45,"path":25972,"seo":25973,"stem":25974,"__hash__":25975},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25670,"toc":25963},[25671,25674,25678,25688,25695,25702,25705,25712,25715,25718,25722,25734,25738,25784,25787,25790,25793,25796,25799,25803,25841,25847,25851,25905,25910,25913,25916,25921,25924,25929,25932,25935,25939,25942,25945,25949],[10,25672,25668],{"id":25673},"_1简介",[89,25675,25677],{"id":25676},"_11什么是-docker","1.1什么是 Docker？",[15,25679,25680,25681,25684,25685],{},"Docker 是一个开源的 ",[278,25682,25683],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[278,25686,25687],{},"一次构建，到处运行。",[15,25689,25690,25691,25694],{},"“ ",[278,25692,25693],{},"一次构建，到处运行"," ”也就是说：",[72,25696,25697],{},[75,25698,25699],{},[278,25700,25701],{},"之前：",[15,25703,25704],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[72,25706,25707],{},[75,25708,25709],{},[278,25710,25711],{},"使用docker后：",[15,25713,25714],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[15,25716,25717],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[89,25719,25721],{"id":25720},"_12它是怎么工作的","1.2.它是怎么工作的？",[1135,25723,25724,25727],{},[75,25725,25726],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[75,25728,25729,25730,25733],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[278,25731,25732],{},"无论在哪运行都一样稳定"," 。",[89,25735,25737],{"id":25736},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[266,25739,25740,25750],{},[269,25741,25742],{},[272,25743,25744,25747],{},[275,25745,25746],{"align":23741},"概念",[275,25748,25749],{"align":23741},"解释",[313,25751,25752,25760,25768,25776],{},[272,25753,25754,25757],{},[318,25755,25756],{"align":23741},"镜像",[318,25758,25759],{"align":23741},"Image，运行容器的模板，像是一个应用快照",[272,25761,25762,25765],{},[318,25763,25764],{"align":23741},"容器",[318,25766,25767],{"align":23741},"Container，运行中的镜像实例，有自己的文件系统、网络等",[272,25769,25770,25773],{},[318,25771,25772],{"align":23741},"Dockerfile",[318,25774,25775],{"align":23741},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[272,25777,25778,25781],{},[318,25779,25780],{"align":23741},"仓库",[318,25782,25783],{"align":23741},"Registry，存放镜像的地方，比如 Docker Hub",[15,25785,25786],{},"抽象化理解:",[15,25788,25789],{},"Docker镜像≈C++类",[15,25791,25792],{},"Docker容器≈C++类实例(即对象)",[15,25794,25795],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[15,25797,25798],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[89,25800,25802],{"id":25801},"_14类比理解","1.4.类比理解",[266,25804,25805,25815],{},[269,25806,25807],{},[272,25808,25809,25812],{},[275,25810,25811],{"align":23741},"传统部署",[275,25813,25814],{"align":23741},"Docker部署",[313,25816,25817,25825,25833],{},[272,25818,25819,25822],{},[318,25820,25821],{"align":23741},"手动安装依赖、调试版本不一致问题",[318,25823,25824],{"align":23741},"一次打包环境和代码",[272,25826,25827,25830],{},[318,25828,25829],{"align":23741},"程序“裸奔”跑在系统上",[318,25831,25832],{"align":23741},"程序“穿着容器”隔离运行",[272,25834,25835,25838],{},[318,25836,25837],{"align":23741},"容易“在我电脑上能跑”",[318,25839,25840],{"align":23741},"保证“无论在哪都能跑”",[15,25842,25843,25844],{},"就像快递包裹： ",[278,25845,25846],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[89,25848,25850],{"id":25849},"_15docker-的核心优势","1.5.Docker 的核心优势",[266,25852,25853,25863],{},[269,25854,25855],{},[272,25856,25857,25860],{},[275,25858,25859],{"align":23741},"优势",[275,25861,25862],{"align":23741},"说明",[313,25864,25865,25873,25881,25889,25897],{},[272,25866,25867,25870],{},[318,25868,25869],{"align":23741},"轻量级",[318,25871,25872],{"align":23741},"基于系统内核共享，启动速度快，占资源少",[272,25874,25875,25878],{},[318,25876,25877],{"align":23741},"跨平台",[318,25879,25880],{"align":23741},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[272,25882,25883,25886],{},[318,25884,25885],{"align":23741},"易于迁移部署",[318,25887,25888],{"align":23741},"应用和环境一起封装，不怕依赖不一致",[272,25890,25891,25894],{},[318,25892,25893],{"align":23741},"易于版本控制",[318,25895,25896],{"align":23741},"镜像版本可控，支持回滚",[272,25898,25899,25902],{},[318,25900,25901],{"align":23741},"生态丰富",[318,25903,25904],{"align":23741},"Docker Hub 上有成千上万的现成镜像可用",[72,25906,25907],{},[75,25908,25909],{},"在Linux上可以几乎实现无性能损失。",[15,25911,25912],{},"docker里的发行版和本机共用Linux内核。",[15,25914,25915],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[72,25917,25918],{},[75,25919,25920],{},"可以快速部署在绝大多数Linux发行版",[15,25922,25923],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[72,25925,25926],{},[75,25927,25928],{},"配置环境简单",[15,25930,25931],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[15,25933,25934],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[72,25936,25937],{},[75,25938,25901],{},[15,25940,25941],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[15,25943,25944],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[89,25946,25948],{"id":25947},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1135,25950,25951,25954,25957,25960],{},[75,25952,25953],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[75,25955,25956],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[75,25958,25959],{},"微服务架构：每个服务一个容器，灵活组合",[75,25961,25962],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":39,"searchDepth":40,"depth":40,"links":25964},[25965,25966,25967,25968,25969,25970],{"id":25676,"depth":1183,"text":25677},{"id":25720,"depth":1183,"text":25721},{"id":25736,"depth":1183,"text":25737},{"id":25801,"depth":1183,"text":25802},{"id":25849,"depth":1183,"text":25850},{"id":25947,"depth":1183,"text":25948},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25668,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25977,"title":25978,"body":25979,"description":39,"extension":43,"meta":26712,"navigation":45,"path":26713,"seo":26714,"stem":26715,"__hash__":26716},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25980,"toc":26707},[25981,25984,25988,25991,25994,26000,26006,26010,26019,26022,26079,26082,26133,26136,26219,26222,26259,26263,26274,26287,26294,26297,26377,26380,26430,26433,26456,26460,26467,26470,26486,26492,26495,26511,26517,26520,26536,26550,26556,26576,26582,26585,26597,26603,26606,26620,26626,26629,26649,26654,26657,26660,26664,26667,26670,26673,26680,26683,26686,26689,26694,26699,26704],[10,25982,25978],{"id":25983},"_2安装docker",[89,25985,25987],{"id":25986},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[15,25989,25990],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[15,25992,25993],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[15,25995,25996],{},[21,25997,25998],{"href":25998,"rel":25999},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25],[15,26001,26002],{},[21,26003,26004],{"href":26004,"rel":26005},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25],[22003,26007,26009],{"id":26008},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[15,26011,26012,26013,26018],{},"以下内容根据 ",[21,26014,26017],{"href":26015,"rel":26016},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25],"官方文档"," 修改而来。",[15,26020,26021],{},"如果你过去安装过 docker，先删掉：",[109,26023,26025],{"className":23827,"code":26024,"language":23829,"meta":39,"style":39},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[115,26026,26027],{"__ignoreMap":39},[118,26028,26029,26031,26034,26037,26040,26043,26046,26049,26052,26055,26058,26061,26064,26067,26070,26073,26076],{"class":120,"line":121},[118,26030,3029],{"class":124},[118,26032,26033],{"class":128}," pkg ",[118,26035,26036],{"class":124},"in",[118,26038,26039],{"class":233}," docker.io",[118,26041,26042],{"class":233}," docker-doc",[118,26044,26045],{"class":233}," docker-compose",[118,26047,26048],{"class":233}," docker-compose-v2",[118,26050,26051],{"class":233}," podman-docker",[118,26053,26054],{"class":233}," containerd",[118,26056,26057],{"class":233}," runc",[118,26059,26060],{"class":128},"; ",[118,26062,26063],{"class":124},"do",[118,26065,26066],{"class":1967}," sudo",[118,26068,26069],{"class":233}," apt-get",[118,26071,26072],{"class":233}," remove",[118,26074,26075],{"class":128}," $pkg; ",[118,26077,26078],{"class":124},"done\n",[15,26080,26081],{},"首先安装依赖和GPG：",[109,26083,26087],{"className":26084,"code":26085,"language":26086,"meta":39,"style":39},"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",[115,26088,26089,26094,26099,26104,26109,26114,26119,26123,26128],{"__ignoreMap":39},[118,26090,26091],{"class":120,"line":121},[118,26092,26093],{},"# Add Docker's official GPG key:\n",[118,26095,26096],{"class":120,"line":40},[118,26097,26098],{},"sudo apt-get update\n",[118,26100,26101],{"class":120,"line":1183},[118,26102,26103],{},"sudo apt-get install ca-certificates curl\n",[118,26105,26106],{"class":120,"line":1198},[118,26107,26108],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[118,26110,26111],{"class":120,"line":1204},[118,26112,26113],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[118,26115,26116],{"class":120,"line":1218},[118,26117,26118],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[118,26120,26121],{"class":120,"line":1224},[118,26122,2404],{"emptyLinePlaceholder":45},[118,26124,26125],{"class":120,"line":1315},[118,26126,26127],{},"# 如果上面这行报错就弄下面这行\n",[118,26129,26130],{"class":120,"line":1321},[118,26131,26132],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[15,26134,26135],{},"信任 Docker 的 GPG 公钥并添加仓库：",[109,26137,26139],{"className":23827,"code":26138,"language":23829,"meta":39,"style":39},"# 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",[115,26140,26141,26146,26152,26169,26202],{"__ignoreMap":39},[118,26142,26143],{"class":120,"line":121},[118,26144,26145],{"class":187},"# Add the repository to Apt sources:\n",[118,26147,26148,26150],{"class":120,"line":40},[118,26149,25130],{"class":177},[118,26151,24683],{"class":177},[118,26153,26154,26157,26160,26163,26166],{"class":120,"line":1183},[118,26155,26156],{"class":233},"  \"deb [arch=$(",[118,26158,26159],{"class":1967},"dpkg",[118,26161,26162],{"class":177}," --print-architecture",[118,26164,26165],{"class":233},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[118,26167,26168],{"class":177},"\\\n",[118,26170,26171,26174,26176,26178,26181,26184,26186,26188,26191,26193,26195,26198,26200],{"class":120,"line":1198},[118,26172,26173],{"class":233},"  \"",[118,26175,25104],{"class":128},[118,26177,686],{"class":177},[118,26179,26180],{"class":233}," \u002Fetc\u002Fos-release",[118,26182,26183],{"class":128}," && ",[118,26185,25130],{"class":177},[118,26187,9729],{"class":233},[118,26189,26190],{"class":128},"$VERSION_CODENAME",[118,26192,379],{"class":233},[118,26194,557],{"class":128},[118,26196,26197],{"class":233},"\" stable\"",[118,26199,25114],{"class":124},[118,26201,24683],{"class":177},[118,26203,26204,26207,26210,26213,26216],{"class":120,"line":1204},[118,26205,26206],{"class":1967},"  sudo",[118,26208,26209],{"class":233}," tee",[118,26211,26212],{"class":233}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[118,26214,26215],{"class":124}," >",[118,26217,26218],{"class":233}," \u002Fdev\u002Fnull\n",[15,26220,26221],{},"最后安装",[109,26223,26225],{"className":23827,"code":26224,"language":23829,"meta":39,"style":39},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[115,26226,26227,26236],{"__ignoreMap":39},[118,26228,26229,26231,26233],{"class":120,"line":121},[118,26230,24581],{"class":1967},[118,26232,26069],{"class":233},[118,26234,26235],{"class":233}," update\n",[118,26237,26238,26240,26242,26244,26247,26250,26253,26256],{"class":120,"line":40},[118,26239,24581],{"class":1967},[118,26241,26069],{"class":233},[118,26243,23839],{"class":233},[118,26245,26246],{"class":233}," docker-ce",[118,26248,26249],{"class":233}," docker-ce-cli",[118,26251,26252],{"class":233}," containerd.io",[118,26254,26255],{"class":233}," docker-buildx-plugin",[118,26257,26258],{"class":233}," docker-compose-plugin\n",[22003,26260,26262],{"id":26261},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[15,26264,26265,26266,26269,26270,26273],{},"查看自己自己包管理工具版本（dnf是 ",[278,26267,26268],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[278,26271,26272],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[109,26275,26277],{"className":23827,"code":26276,"language":23829,"meta":39,"style":39},"dnf --version\n",[115,26278,26279],{"__ignoreMap":39},[118,26280,26281,26284],{"class":120,"line":121},[118,26282,26283],{"class":1967},"dnf",[118,26285,26286],{"class":177}," --version\n",[15,26288,26012,26289,26293],{},[21,26290,26017],{"href":26291,"rel":26292},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[15,26295,26296],{},"如果你之前安装过 docker，请先删掉",[109,26298,26300],{"className":23827,"code":26299,"language":23829,"meta":39,"style":39},"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",[115,26301,26302,26316,26323,26330,26337,26344,26351,26358,26365,26372],{"__ignoreMap":39},[118,26303,26304,26306,26309,26311,26314],{"class":120,"line":121},[118,26305,24581],{"class":1967},[118,26307,26308],{"class":233}," dnf",[118,26310,26072],{"class":233},[118,26312,26313],{"class":233}," docker",[118,26315,24683],{"class":177},[118,26317,26318,26321],{"class":120,"line":40},[118,26319,26320],{"class":233},"                  docker-client",[118,26322,24683],{"class":177},[118,26324,26325,26328],{"class":120,"line":1183},[118,26326,26327],{"class":233},"                  docker-client-latest",[118,26329,24683],{"class":177},[118,26331,26332,26335],{"class":120,"line":1198},[118,26333,26334],{"class":233},"                  docker-common",[118,26336,24683],{"class":177},[118,26338,26339,26342],{"class":120,"line":1204},[118,26340,26341],{"class":233},"                  docker-latest",[118,26343,24683],{"class":177},[118,26345,26346,26349],{"class":120,"line":1218},[118,26347,26348],{"class":233},"                  docker-latest-logrotate",[118,26350,24683],{"class":177},[118,26352,26353,26356],{"class":120,"line":1224},[118,26354,26355],{"class":233},"                  docker-logrotate",[118,26357,24683],{"class":177},[118,26359,26360,26363],{"class":120,"line":1315},[118,26361,26362],{"class":233},"                  docker-selinux",[118,26364,24683],{"class":177},[118,26366,26367,26370],{"class":120,"line":1321},[118,26368,26369],{"class":233},"                  docker-engine-selinux",[118,26371,24683],{"class":177},[118,26373,26374],{"class":120,"line":1333},[118,26375,26376],{"class":233},"                  docker-engine\n",[15,26378,26379],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[109,26381,26383],{"className":23827,"code":26382,"language":23829,"meta":39,"style":39},"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",[115,26384,26385,26399,26414],{"__ignoreMap":39},[118,26386,26387,26389,26391,26394,26396],{"class":120,"line":121},[118,26388,24581],{"class":1967},[118,26390,26308],{"class":233},[118,26392,26393],{"class":177}," -y",[118,26395,23839],{"class":233},[118,26397,26398],{"class":233}," dnf-plugins-core\n",[118,26400,26401,26403,26405,26408,26411],{"class":120,"line":40},[118,26402,24581],{"class":1967},[118,26404,26308],{"class":233},[118,26406,26407],{"class":233}," config-manager",[118,26409,26410],{"class":233}," addrepo",[118,26412,26413],{"class":177}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[118,26415,26416,26418,26421,26424,26427],{"class":120,"line":1183},[118,26417,24581],{"class":1967},[118,26419,26420],{"class":233}," sed",[118,26422,26423],{"class":177}," -i",[118,26425,26426],{"class":233}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[118,26428,26429],{"class":233}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[15,26431,26432],{},"最后安装：",[109,26434,26436],{"className":23827,"code":26435,"language":23829,"meta":39,"style":39},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[115,26437,26438],{"__ignoreMap":39},[118,26439,26440,26442,26444,26446,26448,26450,26452,26454],{"class":120,"line":121},[118,26441,24581],{"class":1967},[118,26443,26308],{"class":233},[118,26445,23839],{"class":233},[118,26447,26246],{"class":233},[118,26449,26249],{"class":233},[118,26451,26252],{"class":233},[118,26453,26255],{"class":233},[118,26455,26258],{"class":233},[89,26457,26459],{"id":26458},"_22配置环境","2.2.配置环境",[22003,26461,26463,26466],{"id":26462},"_221检查-docker-服务状态",[278,26464,26465],{},"2.2.1.检查 Docker 服务状态"," ：",[15,26468,26469],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[109,26471,26473],{"className":23827,"code":26472,"language":23829,"meta":39,"style":39},"systemctl status docker\n",[115,26474,26475],{"__ignoreMap":39},[118,26476,26477,26480,26483],{"class":120,"line":121},[118,26478,26479],{"class":1967},"systemctl",[118,26481,26482],{"class":233}," status",[118,26484,26485],{"class":233}," docker\n",[22003,26487,26489,26466],{"id":26488},"_222启动-docker-服务",[278,26490,26491],{},"2.2.2.启动 Docker 服务",[15,26493,26494],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[109,26496,26498],{"className":23827,"code":26497,"language":23829,"meta":39,"style":39},"sudo systemctl start docker\n",[115,26499,26500],{"__ignoreMap":39},[118,26501,26502,26504,26507,26509],{"class":120,"line":121},[118,26503,24581],{"class":1967},[118,26505,26506],{"class":233}," systemctl",[118,26508,4188],{"class":233},[118,26510,26485],{"class":233},[22003,26512,26514,26466],{"id":26513},"_223设置-docker-开机自启",[278,26515,26516],{},"2.2.3.设置 Docker 开机自启",[15,26518,26519],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[109,26521,26523],{"className":23827,"code":26522,"language":23829,"meta":39,"style":39},"sudo systemctl enable docker\n",[115,26524,26525],{"__ignoreMap":39},[118,26526,26527,26529,26531,26534],{"class":120,"line":121},[118,26528,24581],{"class":1967},[118,26530,26506],{"class":233},[118,26532,26533],{"class":233}," enable",[118,26535,26485],{"class":233},[22003,26537,26539,13800,26542,13800,26547,26466],{"id":26538},"_224将用户添加到-docker-组",[278,26540,26541],{},"2.2.4.将用户添加到",[278,26543,26544],{},[115,26545,26546],{},"docker",[278,26548,26549],{},"组",[15,26551,26552,26553,26555],{},"使用以下命令将当前用户添加到 ",[115,26554,26546],{}," 组：",[109,26557,26559],{"className":23827,"code":26558,"language":23829,"meta":39,"style":39},"sudo usermod -aG docker $USER\n",[115,26560,26561],{"__ignoreMap":39},[118,26562,26563,26565,26568,26571,26573],{"class":120,"line":121},[118,26564,24581],{"class":1967},[118,26566,26567],{"class":233}," usermod",[118,26569,26570],{"class":177}," -aG",[118,26572,26313],{"class":233},[118,26574,26575],{"class":128}," $USER\n",[22003,26577,26579,26466],{"id":26578},"_225退出并重新登录",[278,26580,26581],{},"2.2.5.退出并重新登录",[15,26583,26584],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[109,26586,26588],{"className":23827,"code":26587,"language":23829,"meta":39,"style":39},"newgrp docker\n",[115,26589,26590],{"__ignoreMap":39},[118,26591,26592,26595],{"class":120,"line":121},[118,26593,26594],{"class":1967},"newgrp",[118,26596,26485],{"class":233},[22003,26598,26600,26466],{"id":26599},"_226重新启动-docker-服务如果需要",[278,26601,26602],{},"2.2.6.重新启动 Docker 服务（如果需要）",[15,26604,26605],{},"确保 Docker 服务正在运行，可以使用以下命令：",[109,26607,26608],{"className":23827,"code":26497,"language":23829,"meta":39,"style":39},[115,26609,26610],{"__ignoreMap":39},[118,26611,26612,26614,26616,26618],{"class":120,"line":121},[118,26613,24581],{"class":1967},[118,26615,26506],{"class":233},[118,26617,4188],{"class":233},[118,26619,26485],{"class":233},[22003,26621,26623,26466],{"id":26622},"_227重启电脑后检查-docker-服务状态",[278,26624,26625],{},"2.2.7.重启电脑后检查 Docker 服务状态",[15,26627,26628],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[109,26630,26632],{"className":23827,"code":26631,"language":23829,"meta":39,"style":39},"sudo reboot\nsystemctl status docker\n",[115,26633,26634,26641],{"__ignoreMap":39},[118,26635,26636,26638],{"class":120,"line":121},[118,26637,24581],{"class":1967},[118,26639,26640],{"class":233}," reboot\n",[118,26642,26643,26645,26647],{"class":120,"line":40},[118,26644,26479],{"class":1967},[118,26646,26482],{"class":233},[118,26648,26485],{"class":233},[15,26650,26651],{},[1466,26652],{"alt":39,"src":26653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[15,26655,26656],{},"第三行显示enabled说明开机自启动成功",[15,26658,26659],{},"按q退出",[89,26661,26663],{"id":26662},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[15,26665,26666],{},"优先使用linux来使用docker是比较好的",[15,26668,26669],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[15,26671,26672],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[15,26674,26675,26676],{},"官方下载安装:",[21,26677,26678],{"href":26678,"rel":26679},"https:\u002F\u002Fwww.docker.com\u002F",[25],[15,26681,26682],{},"Windows的Docker显卡直通与USB直通:",[15,26684,26685],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[15,26687,26688],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[15,26690,26691],{},[1466,26692],{"alt":39,"src":26693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[15,26695,26696],{},[1466,26697],{"alt":39,"src":26698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[15,26700,26701],{},[1466,26702],{"alt":39,"src":26703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5131,26705,26706],{},"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":39,"searchDepth":40,"depth":40,"links":26708},[26709,26710,26711],{"id":25986,"depth":1183,"text":25987},{"id":26458,"depth":1183,"text":26459},{"id":26662,"depth":1183,"text":26663},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25978,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26718,"title":26719,"body":26720,"description":26727,"extension":43,"meta":27420,"navigation":45,"path":27421,"seo":27422,"stem":27423,"__hash__":27424},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26721,"toc":27414},[26722,26725,26728,26732,26737,26742,26745,26773,26778,26787,26790,26795,26799,26806,26811,26817,26821,26824,26828,26833,26925,26930,26948,26953,26974,26979,26995,26999,27004,27033,27038,27084,27089,27133,27141,27158,27163,27179,27184,27198,27201,27204,27207,27210,27239,27242,27247,27251,27254,27257,27263,27266,27269,27272,27334,27341,27346,27349,27367,27371,27374,27391,27394,27397,27411],[10,26723,26719],{"id":26724},"_3docker直通",[15,26726,26727],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[89,26729,26731],{"id":26730},"_31usb直通","3.1.USB直通",[15,26733,26734],{},[1466,26735],{"alt":39,"src":26736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[72,26738,26739],{},[75,26740,26741],{},"方法一(不是很推荐新手)：",[15,26743,26744],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[109,26746,26748],{"className":23827,"code":26747,"language":23829,"meta":39,"style":39},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[115,26749,26750,26758,26763],{"__ignoreMap":39},[118,26751,26752,26755],{"class":120,"line":121},[118,26753,26754],{"class":1967},"ls",[118,26756,26757],{"class":233}," \u002Fdev\n",[118,26759,26760],{"class":120,"line":40},[118,26761,26762],{"class":187},"#例如\n",[118,26764,26765,26768,26770],{"class":120,"line":1183},[118,26766,26767],{"class":128},"--device",[118,26769,174],{"class":124},[118,26771,26772],{"class":233},"\u002Fdev\u002Ftty_USB0\n",[72,26774,26775],{"start":40},[75,26776,26777],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[109,26779,26781],{"className":23827,"code":26780,"language":23829,"meta":39,"style":39},"--privileged\n",[115,26782,26783],{"__ignoreMap":39},[118,26784,26785],{"class":120,"line":121},[118,26786,26780],{"class":1967},[15,26788,26789],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[15,26791,26792],{},[1466,26793],{"alt":39,"src":26794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[89,26796,26798],{"id":26797},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[15,26800,26801,26802,26805],{},"NVIDIA Container Toolkit使用户 ",[278,26803,26804],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[15,26807,26808],{},[1466,26809],{"alt":39,"src":26810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[15,26812,26813],{},[21,26814,26815],{"href":26815,"rel":26816},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25],[22003,26818,26820],{"id":26819},"_321安装","3.2.1.安装",[15,26822,26823],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22915,26825,26827],{"id":26826},"_3211ubuntu","3.2.1.1.Ubuntu",[72,26829,26830],{},[75,26831,26832],{},"配置存储库 并更新",[109,26834,26836],{"className":23827,"code":26835,"language":23829,"meta":39,"style":39},"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",[115,26837,26838,26867,26887,26899,26911,26917],{"__ignoreMap":39},[118,26839,26840,26843,26846,26849,26851,26853,26856,26859,26862,26865],{"class":120,"line":121},[118,26841,26842],{"class":1967},"curl",[118,26844,26845],{"class":177}," -fsSL",[118,26847,26848],{"class":233}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[118,26850,25114],{"class":124},[118,26852,26066],{"class":1967},[118,26854,26855],{"class":233}," gpg",[118,26857,26858],{"class":177}," --dearmor",[118,26860,26861],{"class":177}," -o",[118,26863,26864],{"class":233}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[118,26866,24683],{"class":177},[118,26868,26869,26872,26874,26877,26880,26883,26885],{"class":120,"line":40},[118,26870,26871],{"class":128},"  && ",[118,26873,26842],{"class":1967},[118,26875,26876],{"class":177}," -s",[118,26878,26879],{"class":177}," -L",[118,26881,26882],{"class":233}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[118,26884,25114],{"class":124},[118,26886,24683],{"class":177},[118,26888,26889,26892,26895,26897],{"class":120,"line":1183},[118,26890,26891],{"class":1967},"    sed",[118,26893,26894],{"class":233}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[118,26896,25114],{"class":124},[118,26898,24683],{"class":177},[118,26900,26901,26904,26906,26909],{"class":120,"line":1198},[118,26902,26903],{"class":1967},"    sudo",[118,26905,26209],{"class":233},[118,26907,26908],{"class":233}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[118,26910,24683],{"class":177},[118,26912,26913,26915],{"class":120,"line":1204},[118,26914,26871],{"class":128},[118,26916,26168],{"class":177},[118,26918,26919,26921,26923],{"class":120,"line":1218},[118,26920,26903],{"class":1967},[118,26922,26069],{"class":233},[118,26924,26235],{"class":233},[72,26926,26927],{"start":40},[75,26928,26929],{},"安装nvidia-docker2",[109,26931,26933],{"className":23827,"code":26932,"language":23829,"meta":39,"style":39},"sudo apt-get install -y nvidia-docker2\n",[115,26934,26935],{"__ignoreMap":39},[118,26936,26937,26939,26941,26943,26945],{"class":120,"line":121},[118,26938,24581],{"class":1967},[118,26940,26069],{"class":233},[118,26942,23839],{"class":233},[118,26944,26393],{"class":177},[118,26946,26947],{"class":233}," nvidia-docker2\n",[72,26949,26950],{"start":1183},[75,26951,26952],{},"使用nvidia-ctk命令配置container runtime",[109,26954,26956],{"className":23827,"code":26955,"language":23829,"meta":39,"style":39},"sudo nvidia-ctk runtime configure --runtime=docker\n",[115,26957,26958],{"__ignoreMap":39},[118,26959,26960,26962,26965,26968,26971],{"class":120,"line":121},[118,26961,24581],{"class":1967},[118,26963,26964],{"class":233}," nvidia-ctk",[118,26966,26967],{"class":233}," runtime",[118,26969,26970],{"class":233}," configure",[118,26972,26973],{"class":177}," --runtime=docker\n",[72,26975,26976],{"start":1198},[75,26977,26978],{},"重启docker服务:",[109,26980,26982],{"className":23827,"code":26981,"language":23829,"meta":39,"style":39},"sudo systemctl restart docker\n",[115,26983,26984],{"__ignoreMap":39},[118,26985,26986,26988,26990,26993],{"class":120,"line":121},[118,26987,24581],{"class":1967},[118,26989,26506],{"class":233},[118,26991,26992],{"class":233}," restart",[118,26994,26485],{"class":233},[22915,26996,26998],{"id":26997},"_3212fedora","3.2.1.2.Fedora",[72,27000,27001],{},[75,27002,27003],{},"配置存储库",[109,27005,27007],{"className":23827,"code":27006,"language":23829,"meta":39,"style":39},"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",[115,27008,27009,27024],{"__ignoreMap":39},[118,27010,27011,27013,27015,27017,27020,27022],{"class":120,"line":121},[118,27012,26842],{"class":1967},[118,27014,26876],{"class":177},[118,27016,26879],{"class":177},[118,27018,27019],{"class":233}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[118,27021,25114],{"class":124},[118,27023,24683],{"class":177},[118,27025,27026,27028,27030],{"class":120,"line":40},[118,27027,24581],{"class":1967},[118,27029,26209],{"class":233},[118,27031,27032],{"class":233}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[72,27034,27035],{"start":40},[75,27036,27037],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[109,27039,27041],{"className":23827,"code":27040,"language":23829,"meta":39,"style":39},"# 如果是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",[115,27042,27043,27048,27062,27066,27071],{"__ignoreMap":39},[118,27044,27045],{"class":120,"line":121},[118,27046,27047],{"class":187},"# 如果是RHEL或者Rocky（DNF4）\n",[118,27049,27050,27052,27054,27056,27059],{"class":120,"line":40},[118,27051,24581],{"class":1967},[118,27053,26308],{"class":233},[118,27055,26407],{"class":233},[118,27057,27058],{"class":177}," --add-repo",[118,27060,27061],{"class":233}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[118,27063,27064],{"class":120,"line":1183},[118,27065,2404],{"emptyLinePlaceholder":45},[118,27067,27068],{"class":120,"line":1198},[118,27069,27070],{"class":187},"# 如果是Feodra41+（DNF5）\n",[118,27072,27073,27075,27077,27079,27081],{"class":120,"line":1204},[118,27074,24581],{"class":1967},[118,27076,26308],{"class":233},[118,27078,26407],{"class":233},[118,27080,26410],{"class":233},[118,27082,27083],{"class":177}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[72,27085,27086],{"start":1183},[75,27087,27088],{},"安装NVIDIA Container Toolki包",[109,27090,27092],{"className":23827,"code":27091,"language":23829,"meta":39,"style":39},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[115,27093,27094,27099,27112,27116,27121],{"__ignoreMap":39},[118,27095,27096],{"class":120,"line":121},[118,27097,27098],{"class":187},"# 如果是RHEL或者Rocky\n",[118,27100,27101,27103,27105,27107,27109],{"class":120,"line":40},[118,27102,24581],{"class":1967},[118,27104,26308],{"class":233},[118,27106,23839],{"class":233},[118,27108,26393],{"class":177},[118,27110,27111],{"class":233}," nvidia-container-toolkit\n",[118,27113,27114],{"class":120,"line":1183},[118,27115,2404],{"emptyLinePlaceholder":45},[118,27117,27118],{"class":120,"line":1198},[118,27119,27120],{"class":187},"# 如果是Fedora\n",[118,27122,27123,27125,27127,27129,27131],{"class":120,"line":1204},[118,27124,24581],{"class":1967},[118,27126,26308],{"class":233},[118,27128,23839],{"class":233},[118,27130,26393],{"class":177},[118,27132,27111],{"class":233},[72,27134,27135],{"start":1198},[75,27136,27137,27138,27140],{},"安装nvidia-docker2 ： 在Fedora上使用",[115,27139,26283],{},"进行安装",[109,27142,27144],{"className":23827,"code":27143,"language":23829,"meta":39,"style":39},"sudo dnf install -y nvidia-docker2\n",[115,27145,27146],{"__ignoreMap":39},[118,27147,27148,27150,27152,27154,27156],{"class":120,"line":121},[118,27149,24581],{"class":1967},[118,27151,26308],{"class":233},[118,27153,23839],{"class":233},[118,27155,26393],{"class":177},[118,27157,26947],{"class":233},[72,27159,27160],{"start":1204},[75,27161,27162],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[109,27164,27165],{"className":23827,"code":26955,"language":23829,"meta":39,"style":39},[115,27166,27167],{"__ignoreMap":39},[118,27168,27169,27171,27173,27175,27177],{"class":120,"line":121},[118,27170,24581],{"class":1967},[118,27172,26964],{"class":233},[118,27174,26967],{"class":233},[118,27176,26970],{"class":233},[118,27178,26973],{"class":177},[72,27180,27181],{"start":1218},[75,27182,27183],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[109,27185,27186],{"className":23827,"code":26981,"language":23829,"meta":39,"style":39},[115,27187,27188],{"__ignoreMap":39},[118,27189,27190,27192,27194,27196],{"class":120,"line":121},[118,27191,24581],{"class":1967},[118,27193,26506],{"class":233},[118,27195,26992],{"class":233},[118,27197,26485],{"class":233},[15,27199,27200],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[15,27202,27203],{},"方法：",[15,27205,27206],{},"1️⃣nvidia-smi",[15,27208,27209],{},"2️⃣运行nvidia cuda 容器进行测试",[109,27211,27213],{"className":23827,"code":27212,"language":23829,"meta":39,"style":39},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[115,27214,27215],{"__ignoreMap":39},[118,27216,27217,27219,27221,27224,27227,27230,27233,27236],{"class":120,"line":121},[118,27218,24581],{"class":1967},[118,27220,26313],{"class":233},[118,27222,27223],{"class":233}," run",[118,27225,27226],{"class":177}," --rm",[118,27228,27229],{"class":177}," --gpus",[118,27231,27232],{"class":233}," all",[118,27234,27235],{"class":233}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[118,27237,27238],{"class":233}," nvidia-smi\n",[15,27240,27241],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[15,27243,27244],{},[1466,27245],{"alt":39,"src":27246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[89,27248,27250],{"id":27249},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[15,27252,27253],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[15,27255,27256],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[15,27258,27259],{},[21,27260,27261],{"href":27261,"rel":27262},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25],[15,27264,27265],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[15,27267,27268],{},"我们只需要找到对应的Docker镜像当底包即可。",[15,27270,27271],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[266,27273,27274,27290],{},[269,27275,27276],{},[272,27277,27278,27281,27284,27287],{},[275,27279,27280],{"align":23741},"镜像类型",[275,27282,27283],{"align":23741},"适用场景",[275,27285,27286],{"align":23741},"示例标签",[275,27288,27289],{"align":23741},"大小",[313,27291,27292,27306,27320],{},[272,27293,27294,27297,27300,27303],{},[318,27295,27296],{"align":23741},"base",[318,27298,27299],{"align":23741},"仅需 CUDA 运行时库",[318,27301,27302],{"align":23741},"12.4.0-base-ubuntu22.04",[318,27304,27305],{"align":23741},"~240MB",[272,27307,27308,27311,27314,27317],{},[318,27309,27310],{"align":23741},"runtime",[318,27312,27313],{"align":23741},"部署编译后的应用（含数学库）",[318,27315,27316],{"align":23741},"12.4.0-runtime-ubuntu22.04",[318,27318,27319],{"align":23741},"~2GB",[272,27321,27322,27325,27328,27331],{},[318,27323,27324],{"align":23741},"devel",[318,27326,27327],{"align":23741},"开发环境（含编译工具）",[318,27329,27330],{"align":23741},"12.4.0-devel-ubuntu22.04",[318,27332,27333],{"align":23741},"~3GB",[15,27335,27336,27337,27340],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[115,27338,27339],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[15,27342,27343],{},[1466,27344],{"alt":39,"src":27345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[15,27347,27348],{},"在dockerfile里就可以开头这么写：",[109,27350,27352],{"className":23827,"code":27351,"language":23829,"meta":39,"style":39},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[115,27353,27354,27359],{"__ignoreMap":39},[118,27355,27356],{"class":120,"line":121},[118,27357,27358],{"class":187},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[118,27360,27361,27364],{"class":120,"line":40},[118,27362,27363],{"class":1967},"FROM",[118,27365,27366],{"class":233}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[89,27368,27370],{"id":27369},"_34配置以太网","3.4.配置以太网",[15,27372,27373],{},"指定网络模式",[109,27375,27377],{"className":23827,"code":27376,"language":23829,"meta":39,"style":39},"--net=host \\\n",[115,27378,27379],{"__ignoreMap":39},[118,27380,27381,27384,27386,27389],{"class":120,"line":121},[118,27382,27383],{"class":128},"--net",[118,27385,174],{"class":124},[118,27387,27388],{"class":233},"host",[118,27390,24683],{"class":1967},[15,27392,27393],{},"启动参数里加上这行即可。具体在下方",[15,27395,27396],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1135,27398,27399,27402,27405,27408],{},[75,27400,27401],{},"--net=bridge:默认选项，表示连接到默认的网桥",[75,27403,27404],{},"--net=host:容器使用宿主机的网络",[75,27406,27407],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[75,27409,27410],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5131,27412,27413],{},"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":39,"searchDepth":40,"depth":40,"links":27415},[27416,27417,27418,27419],{"id":26730,"depth":1183,"text":26731},{"id":26797,"depth":1183,"text":26798},{"id":27249,"depth":1183,"text":27250},{"id":27369,"depth":1183,"text":27370},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26719,"description":26727},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27426,"title":27427,"body":27428,"description":27435,"extension":43,"meta":27441,"navigation":45,"path":27442,"seo":27443,"stem":27444,"__hash__":27445},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27429,"toc":27439},[27430,27433,27436],[10,27431,27427],{"id":27432},"_4dockerhub换源",[15,27434,27435],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[15,27437,27438],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":39,"searchDepth":40,"depth":40,"links":27440},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27427,"description":27435},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27447,"title":27448,"body":27449,"description":39,"extension":43,"meta":28461,"navigation":45,"path":28462,"seo":28463,"stem":28464,"__hash__":28465},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27450,"toc":28456},[27451,27454,27458,27464,27468,27471,27811,27814,27817,27820,27825,27830,27833,27836,27839,27842,27861,27864,27875,27881,28063,28073,28089,28352,28354,28379,28394,28403,28453],[10,27452,27448],{"id":27453},"_5docker命令学习",[89,27455,27457],{"id":27456},"_51参考文档","5.1.参考文档",[15,27459,27460],{},[21,27461,27462],{"href":27462,"rel":27463},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25],[89,27465,27467],{"id":27466},"_52常用命令","5.2.常用命令",[15,27469,27470],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[266,27472,27473,27486],{},[269,27474,27475],{},[272,27476,27477,27480,27483],{},[275,27478,27479],{"align":23741},"命令",[275,27481,27482],{"align":23741},"描述",[275,27484,27485],{"align":23741},"示例",[313,27487,27488,27499,27510,27521,27532,27543,27554,27565,27575,27586,27597,27608,27618,27629,27640,27651,27661,27671,27681,27691,27702,27713,27724,27735,27746,27757,27767,27778,27789,27800],{},[272,27489,27490,27493,27496],{},[318,27491,27492],{"align":23741},"docker run",[318,27494,27495],{"align":23741},"创建并启动一个新的容器。",[318,27497,27498],{"align":23741},"docker run -it ubuntu bash",[272,27500,27501,27504,27507],{},[318,27502,27503],{"align":23741},"docker build",[318,27505,27506],{"align":23741},"通过指定的 Dockerfile 创建一个新的镜像。",[318,27508,27509],{"align":23741},"docker build -t myimage .",[272,27511,27512,27515,27518],{},[318,27513,27514],{"align":23741},"docker pull",[318,27516,27517],{"align":23741},"从 Docker 仓库拉取镜像。",[318,27519,27520],{"align":23741},"docker pull ubuntu",[272,27522,27523,27526,27529],{},[318,27524,27525],{"align":23741},"docker push",[318,27527,27528],{"align":23741},"将本地镜像推送到 Docker 仓库。",[318,27530,27531],{"align":23741},"docker push myimage",[272,27533,27534,27537,27540],{},[318,27535,27536],{"align":23741},"docker stop",[318,27538,27539],{"align":23741},"停止一个正在运行的容器。",[318,27541,27542],{"align":23741},"docker stop container_id",[272,27544,27545,27548,27551],{},[318,27546,27547],{"align":23741},"docker start",[318,27549,27550],{"align":23741},"启动一个已经存在的容器。",[318,27552,27553],{"align":23741},"docker start container_id",[272,27555,27556,27559,27562],{},[318,27557,27558],{"align":23741},"docker restart",[318,27560,27561],{"align":23741},"重新启动容器。",[318,27563,27564],{"align":23741},"docker restart container_id",[272,27566,27567,27570,27573],{},[318,27568,27569],{"align":23741},"docker ps",[318,27571,27572],{"align":23741},"列出当前正在运行的容器。",[318,27574,27569],{"align":23741},[272,27576,27577,27580,27583],{},[318,27578,27579],{"align":23741},"docker rm",[318,27581,27582],{"align":23741},"删除一个或多个停止的容器。",[318,27584,27585],{"align":23741},"docker rm container_id",[272,27587,27588,27591,27594],{},[318,27589,27590],{"align":23741},"docker exec",[318,27592,27593],{"align":23741},"在一个正在运行的容器中执行命令。",[318,27595,27596],{"align":23741},"docker exec -it container_id bash",[272,27598,27599,27602,27605],{},[318,27600,27601],{"align":23741},"docker logs",[318,27603,27604],{"align":23741},"查看容器的日志输出。",[318,27606,27607],{"align":23741},"docker logs container_id",[272,27609,27610,27613,27616],{},[318,27611,27612],{"align":23741},"docker images",[318,27614,27615],{"align":23741},"列出本地所有镜像。",[318,27617,27612],{"align":23741},[272,27619,27620,27623,27626],{},[318,27621,27622],{"align":23741},"docker rmi",[318,27624,27625],{"align":23741},"删除一个或多个镜像。",[318,27627,27628],{"align":23741},"docker rmi myimage",[272,27630,27631,27634,27637],{},[318,27632,27633],{"align":23741},"docker network",[318,27635,27636],{"align":23741},"管理 Docker 网络。",[318,27638,27639],{"align":23741},"docker network ls",[272,27641,27642,27645,27648],{},[318,27643,27644],{"align":23741},"docker volume",[318,27646,27647],{"align":23741},"管理 Docker 数据卷。",[318,27649,27650],{"align":23741},"docker volume ls",[272,27652,27653,27656,27659],{},[318,27654,27655],{"align":23741},"docker-compose up",[318,27657,27658],{"align":23741},"启动 docker-compose.yml 中定义的所有服务。",[318,27660,27655],{"align":23741},[272,27662,27663,27666,27669],{},[318,27664,27665],{"align":23741},"docker-compose down",[318,27667,27668],{"align":23741},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[318,27670,27665],{"align":23741},[272,27672,27673,27676,27679],{},[318,27674,27675],{"align":23741},"docker info",[318,27677,27678],{"align":23741},"显示 Docker 系统的详细信息。",[318,27680,27675],{"align":23741},[272,27682,27683,27686,27689],{},[318,27684,27685],{"align":23741},"docker stats",[318,27687,27688],{"align":23741},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[318,27690,27685],{"align":23741},[272,27692,27693,27696,27699],{},[318,27694,27695],{"align":23741},"docker inspect",[318,27697,27698],{"align":23741},"查看容器或镜像的详细信息（JSON 格式）。",[318,27700,27701],{"align":23741},"docker inspect container_id",[272,27703,27704,27707,27710],{},[318,27705,27706],{"align":23741},"docker save",[318,27708,27709],{"align":23741},"将一个镜像保存为 tar 文件。",[318,27711,27712],{"align":23741},"docker save -o myimage.tar myimage",[272,27714,27715,27718,27721],{},[318,27716,27717],{"align":23741},"docker load",[318,27719,27720],{"align":23741},"从 tar 文件中加载镜像。",[318,27722,27723],{"align":23741},"docker load -i myimage.tar",[272,27725,27726,27729,27732],{},[318,27727,27728],{"align":23741},"docker tag",[318,27730,27731],{"align":23741},"为镜像添加标签（tag）。",[318,27733,27734],{"align":23741},"docker tag myimage myimage:v1",[272,27736,27737,27740,27743],{},[318,27738,27739],{"align":23741},"docker buildx build",[318,27741,27742],{"align":23741},"使用 Buildx 构建多架构镜像。",[318,27744,27745],{"align":23741},"docker buildx build -t myimage .",[272,27747,27748,27751,27754],{},[318,27749,27750],{"align":23741},"docker buildx create",[318,27752,27753],{"align":23741},"创建一个新的 Buildx 构建实例。",[318,27755,27756],{"align":23741},"docker buildx create –use",[272,27758,27759,27762,27765],{},[318,27760,27761],{"align":23741},"docker buildx ls",[318,27763,27764],{"align":23741},"列出所有可用的 Buildx 构建实例。",[318,27766,27761],{"align":23741},[272,27768,27769,27772,27775],{},[318,27770,27771],{"align":23741},"docker buildx use",[318,27773,27774],{"align":23741},"设置当前的 Buildx 构建实例。",[318,27776,27777],{"align":23741},"docker buildx use mybuilder",[272,27779,27780,27783,27786],{},[318,27781,27782],{"align":23741},"docker buildx bake",[318,27784,27785],{"align":23741},"使用 Bake 文件批量构建镜像。",[318,27787,27788],{"align":23741},"docker buildx bake -f bake.hcl",[272,27790,27791,27794,27797],{},[318,27792,27793],{"align":23741},"docker buildx build –push",[318,27795,27796],{"align":23741},"构建镜像并推送到镜像仓库。",[318,27798,27799],{"align":23741},"docker buildx build –push -t myimage .",[272,27801,27802,27805,27808],{},[318,27803,27804],{"align":23741},"docker buildx build –platform",[318,27806,27807],{"align":23741},"构建镜像并为多个平台生成支持。",[318,27809,27810],{"align":23741},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[15,27812,27813],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[15,27815,27816],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[15,27818,27819],{},"docker images 可以查看已经下载的镜像",[15,27821,27822],{},[1466,27823],{"alt":39,"src":27824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[15,27826,27827],{},[278,27828,27829],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[15,27831,27832],{},"docker rmi $(docker images -q) 删除所有的镜像",[15,27834,27835],{},"docker container logs 查看容器日志",[15,27837,27838],{},"docker top 查看容器里的进程",[15,27840,27841],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[109,27843,27845],{"className":23827,"code":27844,"language":23829,"meta":39,"style":39},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[115,27846,27847],{"__ignoreMap":39},[118,27848,27849,27852,27855,27858],{"class":120,"line":121},[118,27850,27851],{"class":1967},"如：docker",[118,27853,27854],{"class":233}," cp",[118,27856,27857],{"class":233}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[118,27859,27860],{"class":233}," \u002Fmydata\u002Fnginx\n",[15,27862,27863],{},"docker run时在启动容器的时候会有几个常用的选项：",[1135,27865,27866,27869,27872],{},[75,27867,27868],{},"-d选项：表示后台运行",[75,27870,27871],{},"-P选项：随机端口映射",[75,27873,27874],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[89,27876,27878],{"id":27877},"_53run命令的参数非常重要",[278,27879,27880],{},"5.3.run命令的参数（非常重要）",[266,27882,27883,27896],{},[269,27884,27885],{},[272,27886,27887,27890,27893],{},[275,27888,27889],{"align":23741},"参数\u002F配置",[275,27891,27892],{"align":23741},"功能说明",[275,27894,27895],{"align":23741},"重要性与参考依据",[313,27897,27898,27909,27920,27931,27942,27953,27964,27975,27986,27997,28008,28019,28030,28041,28052],{},[272,27899,27900,27903,27906],{},[318,27901,27902],{"align":23741},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[318,27904,27905],{"align":23741},"指定容器名称，便于后续管理",[318,27907,27908],{"align":23741},"替代随机生成的容器名。",[272,27910,27911,27914,27917],{},[318,27912,27913],{"align":23741},"–gpus all",[318,27915,27916],{"align":23741},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[318,27918,27919],{"align":23741},"用于CUDA加速等GPU依赖任务。",[272,27921,27922,27925,27928],{},[318,27923,27924],{"align":23741},"-e NVIDIA_DRIVER_CAPABILITIES=all",[318,27926,27927],{"align":23741},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[318,27929,27930],{"align":23741},"确保容器内GPU功能完整67。",[272,27932,27933,27936,27939],{},[318,27934,27935],{"align":23741},"-dit",[318,27937,27938],{"align":23741},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[318,27940,27941],{"align":23741},"允许容器在后台运行并支持交互操作。",[272,27943,27944,27947,27950],{},[318,27945,27946],{"align":23741},"–privileged",[318,27948,27949],{"align":23741},"赋予容器完全主机权限（可访问设备、内核模块等）",[318,27951,27952],{"align":23741},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[272,27954,27955,27958,27961],{},[318,27956,27957],{"align":23741},"–net=host",[318,27959,27960],{"align":23741},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[318,27962,27963],{"align":23741},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[272,27965,27966,27969,27972],{},[318,27967,27968],{"align":23741},"–group-add audio–group-add video–group-add dialout",[318,27970,27971],{"align":23741},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[318,27973,27974],{"align":23741},"避免权限问题（如避免无法调用摄像头、麦克风）。",[272,27976,27977,27980,27983],{},[318,27978,27979],{"align":23741},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[318,27981,27982],{"align":23741},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[318,27984,27985],{"align":23741},"支持容器内运行图形界面应用（如OpenCV可视化）。",[272,27987,27988,27991,27994],{},[318,27989,27990],{"align":23741},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[318,27992,27993],{"align":23741},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[318,27995,27996],{"align":23741},"实现容器内图形显示。",[272,27998,27999,28002,28005],{},[318,28000,28001],{"align":23741},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[318,28003,28004],{"align":23741},"挂载X11认证文件（只读）",[318,28006,28007],{"align":23741},"确保容器有权连接宿主机显示服务。",[272,28009,28010,28013,28016],{},[318,28011,28012],{"align":23741},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[318,28014,28015],{"align":23741},"挂载Wayland显示协议相关目录",[318,28017,28018],{"align":23741},"支持Wayland协议的图形显示。",[272,28020,28021,28024,28027],{},[318,28022,28023],{"align":23741},"–ulimit nofile=1024:524288",[318,28025,28026],{"align":23741},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[318,28028,28029],{"align":23741},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[272,28031,28032,28035,28038],{},[318,28033,28034],{"align":23741},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[318,28036,28037],{"align":23741},"挂载宿主机用户目录到容器内同名路径",[318,28039,28040],{"align":23741},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[272,28042,28043,28046,28049],{},[318,28044,28045],{"align":23741},"-w \u002Fhome\u002Ftungchiahui",[318,28047,28048],{"align":23741},"设置容器启动后的默认工作目录",[318,28050,28051],{"align":23741},"直接进入项目路径，方便执行命令2324。",[272,28053,28054,28057,28060],{},[318,28055,28056],{"align":23741},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[318,28058,28059],{"align":23741},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[318,28061,28062],{"align":23741},"提供预配置的深度学习与机器人开发环境。",[15,28064,28065,28066,28068,28069,28072],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[115,28067,24581],{},"加不加",[115,28070,28071],{},"sudo -E","都无所谓。",[15,28074,28075,28076,28078,28079,28081,28082,28085,28086,28088],{},"用户已经被加到docker组了，不用",[115,28077,24581],{},"也行跑，其次，",[115,28080,24581],{},"运行的话，你的",[115,28083,28084],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[115,28087,28084],{},"更不可能变了。",[109,28090,28092],{"className":23827,"code":28091,"language":23829,"meta":39,"style":39},"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",[115,28093,28094,28107,28117,28127,28139,28146,28153,28160,28170,28179,28188,28202,28214,28226,28235,28245,28254,28269,28302,28329,28340,28347],{"__ignoreMap":39},[118,28095,28096,28098,28100,28102,28105],{"class":120,"line":121},[118,28097,24581],{"class":1967},[118,28099,26313],{"class":233},[118,28101,27223],{"class":233},[118,28103,28104],{"class":177}," --name=ros_opencv_cuda",[118,28106,24683],{"class":177},[118,28108,28109,28112,28115],{"class":120,"line":40},[118,28110,28111],{"class":128},"--gpus ",[118,28113,28114],{"class":233},"all",[118,28116,24683],{"class":177},[118,28118,28119,28122,28125],{"class":120,"line":1183},[118,28120,28121],{"class":128},"-e ",[118,28123,28124],{"class":233},"NVIDIA_DRIVER_CAPABILITIES=all",[118,28126,24683],{"class":177},[118,28128,28129,28131,28134,28137],{"class":120,"line":1198},[118,28130,28121],{"class":128},[118,28132,28133],{"class":233},"DISPLAY=",[118,28135,28136],{"class":128},"$DISPLAY ",[118,28138,26168],{"class":177},[118,28140,28141,28144],{"class":120,"line":1204},[118,28142,28143],{"class":128},"-dit ",[118,28145,26168],{"class":177},[118,28147,28148,28151],{"class":120,"line":1218},[118,28149,28150],{"class":128},"--privileged ",[118,28152,26168],{"class":177},[118,28154,28155,28158],{"class":120,"line":1224},[118,28156,28157],{"class":128},"--net=host ",[118,28159,26168],{"class":177},[118,28161,28162,28165,28168],{"class":120,"line":1315},[118,28163,28164],{"class":128},"--group-add ",[118,28166,28167],{"class":233},"audio",[118,28169,24683],{"class":177},[118,28171,28172,28174,28177],{"class":120,"line":1321},[118,28173,28164],{"class":128},[118,28175,28176],{"class":233},"video",[118,28178,24683],{"class":177},[118,28180,28181,28183,28186],{"class":120,"line":1333},[118,28182,28164],{"class":128},[118,28184,28185],{"class":233},"dialout",[118,28187,24683],{"class":177},[118,28189,28190,28192,28195,28197,28200],{"class":120,"line":1616},[118,28191,28121],{"class":128},[118,28193,28194],{"class":233},"XAUTHORITY=",[118,28196,28084],{"class":128},[118,28198,28199],{"class":233},"\u002F.Xauthority",[118,28201,24683],{"class":177},[118,28203,28204,28206,28209,28212],{"class":120,"line":1621},[118,28205,28121],{"class":128},[118,28207,28208],{"class":233},"WAYLAND_DISPLAY=",[118,28210,28211],{"class":128},"$WAYLAND_DISPLAY ",[118,28213,26168],{"class":177},[118,28215,28216,28218,28221,28224],{"class":120,"line":1627},[118,28217,28121],{"class":128},[118,28219,28220],{"class":233},"XDG_RUNTIME_DIR=",[118,28222,28223],{"class":128},"$XDG_RUNTIME_DIR ",[118,28225,26168],{"class":177},[118,28227,28228,28230,28233],{"class":120,"line":1632},[118,28229,28121],{"class":128},[118,28231,28232],{"class":233},"QT_QPA_PLATFORM=xcb",[118,28234,24683],{"class":177},[118,28236,28237,28240,28243],{"class":120,"line":1646},[118,28238,28239],{"class":128},"-v ",[118,28241,28242],{"class":233},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[118,28244,24683],{"class":177},[118,28246,28247,28249,28252],{"class":120,"line":1651},[118,28248,28239],{"class":128},[118,28250,28251],{"class":233},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[118,28253,24683],{"class":177},[118,28255,28256,28259,28262,28264,28267],{"class":120,"line":1657},[118,28257,28258],{"class":128},"-v $HOME",[118,28260,28261],{"class":233},"\u002F.Xauthority:",[118,28263,28084],{"class":128},[118,28265,28266],{"class":233},"\u002F.Xauthority:ro",[118,28268,24683],{"class":177},[118,28270,28271,28273,28276,28278,28281,28284,28286,28289,28291,28293,28295,28297,28300],{"class":120,"line":1678},[118,28272,28239],{"class":128},[118,28274,28275],{"class":233},"\u002Frun\u002Fuser\u002F",[118,28277,25104],{"class":128},[118,28279,28280],{"class":1967},"id",[118,28282,28283],{"class":177}," -u",[118,28285,557],{"class":128},[118,28287,28288],{"class":233},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[118,28290,25104],{"class":128},[118,28292,28280],{"class":1967},[118,28294,28283],{"class":177},[118,28296,557],{"class":128},[118,28298,28299],{"class":233},"\u002Fwayland-0",[118,28301,24683],{"class":177},[118,28303,28304,28306,28308,28310,28312,28314,28316,28319,28321,28323,28325,28327],{"class":120,"line":1683},[118,28305,28239],{"class":128},[118,28307,28275],{"class":233},[118,28309,25104],{"class":128},[118,28311,28280],{"class":1967},[118,28313,28283],{"class":177},[118,28315,557],{"class":128},[118,28317,28318],{"class":233},":\u002Frun\u002Fuser\u002F",[118,28320,25104],{"class":128},[118,28322,28280],{"class":1967},[118,28324,28283],{"class":177},[118,28326,13719],{"class":128},[118,28328,26168],{"class":177},[118,28330,28331,28333,28335,28338],{"class":120,"line":1697},[118,28332,28258],{"class":128},[118,28334,987],{"class":233},[118,28336,28337],{"class":128},"$HOME ",[118,28339,26168],{"class":177},[118,28341,28342,28345],{"class":120,"line":1702},[118,28343,28344],{"class":128},"-w $HOME ",[118,28346,26168],{"class":177},[118,28348,28349],{"class":120,"line":1731},[118,28350,28351],{"class":128},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[15,28353,9030],{},[72,28355,28356,28364,28367,28370],{},[75,28357,28358,13800,28360,28363],{},[115,28359,28124],{},[115,28361,28362],{},"--gpus all","没有英伟达显卡请注释。",[75,28365,28366],{},"--name后面请自己为容器起名。",[75,28368,28369],{},"最后一行仓库名称请你自己找对应的镜像填上。",[75,28371,28372,28373,28378],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23558,28374,28375],{},[278,28376,28377],{},"请不要加","。",[109,28380,28382],{"className":23827,"code":28381,"language":23829,"meta":39,"style":39},"--ulimit nofile=1024:524288 \\\n",[115,28383,28384],{"__ignoreMap":39},[118,28385,28386,28389,28392],{"class":120,"line":121},[118,28387,28388],{"class":1967},"--ulimit",[118,28390,28391],{"class":233}," nofile=1024:524288",[118,28393,24683],{"class":177},[15,28395,28396,28397,28402],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23558,28398,28399],{},[278,28400,28401],{},"不建议","**.**",[109,28404,28406],{"className":23827,"code":28405,"language":23829,"meta":39,"style":39},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[115,28407,28408,28435,28444],{"__ignoreMap":39},[118,28409,28410,28413,28416,28418,28420,28422,28424,28426,28428,28431,28433],{"class":120,"line":121},[118,28411,28412],{"class":1967},"--user",[118,28414,28415],{"class":128}," $(",[118,28417,28280],{"class":1967},[118,28419,28283],{"class":177},[118,28421,557],{"class":128},[118,28423,987],{"class":233},[118,28425,25104],{"class":128},[118,28427,28280],{"class":1967},[118,28429,28430],{"class":177}," -g",[118,28432,13719],{"class":128},[118,28434,26168],{"class":177},[118,28436,28437,28439,28442],{"class":120,"line":40},[118,28438,28239],{"class":128},[118,28440,28441],{"class":233},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[118,28443,24683],{"class":177},[118,28445,28446,28448,28451],{"class":120,"line":1183},[118,28447,28239],{"class":128},[118,28449,28450],{"class":233},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[118,28452,24683],{"class":177},[5131,28454,28455],{},"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":39,"searchDepth":40,"depth":40,"links":28457},[28458,28459,28460],{"id":27456,"depth":1183,"text":27457},{"id":27466,"depth":1183,"text":27467},{"id":27877,"depth":1183,"text":27880},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27448,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28467,"title":28468,"body":28469,"description":39,"extension":43,"meta":30092,"navigation":45,"path":30093,"seo":30094,"stem":30095,"__hash__":30096},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28470,"toc":30087},[28471,28474,28478,28481,28703,28707,28711,28714,28820,28825,28828,28833,28836,28841,28844,28849,28852,28864,28867,28872,28879,28907,28914,28990,28995,28998,29021,29023,29098,29103,29106,29110,29118,29123,29128,29132,29143,29149,29152,29155,29179,29182,29185,29213,29216,29219,29684,29687,29692,29697,29701,29724,29729,29733,29737,29740,29743,29746,29773,29776,29779,29797,29800,29803,29825,29833,29838,29843,29847,29850,29853,29856,29859,29904,29907,29925,29928,29933,29936,29957,29960,30016,30019,30024,30028,30031,30038,30041,30044,30049,30052,30068,30071,30084],[10,28472,28468],{"id":28473},"_6手动创建docker镜像",[89,28475,28477],{"id":28476},"_61dockerfile","6.1.DockerFile",[15,28479,28480],{},"常用命令：",[266,28482,28483,28494],{},[269,28484,28485],{},[272,28486,28487,28490,28492],{},[275,28488,28489],{"align":23741},"指令",[275,28491,25862],{"align":23741},[275,28493,27485],{"align":23741},[313,28495,28496,28506,28522,28533,28544,28555,28566,28577,28588,28602,28616,28627,28641,28652,28663,28677,28692],{},[272,28497,28498,28500,28503],{},[318,28499,27363],{"align":23741},[318,28501,28502],{"align":23741},"指定基础镜像，是 Dockerfile 的起点",[318,28504,28505],{"align":23741},"FROM ubuntu:22.04",[272,28507,28508,28511,28514],{},[318,28509,28510],{"align":23741},"LABEL",[318,28512,28513],{"align":23741},"添加元数据（如作者、版本等）",[318,28515,28516,28517,28521],{"align":23741},"LABEL maintainer=”",[21,28518,28520],{"href":28519},"mailto:you@example.com","you@example.com","”",[272,28523,28524,28527,28530],{},[318,28525,28526],{"align":23741},"ENV",[318,28528,28529],{"align":23741},"设置环境变量",[318,28531,28532],{"align":23741},"ENV PORT=8080",[272,28534,28535,28538,28541],{},[318,28536,28537],{"align":23741},"ARG",[318,28539,28540],{"align":23741},"构建参数，只在构建期间可用",[318,28542,28543],{"align":23741},"ARG VERSION=1.0",[272,28545,28546,28549,28552],{},[318,28547,28548],{"align":23741},"RUN",[318,28550,28551],{"align":23741},"构建镜像时运行命令",[318,28553,28554],{"align":23741},"RUN apt-get update && apt-get install -y curl",[272,28556,28557,28560,28563],{},[318,28558,28559],{"align":23741},"COPY",[318,28561,28562],{"align":23741},"复制文件到镜像中",[318,28564,28565],{"align":23741},"COPY . \u002Fapp",[272,28567,28568,28571,28574],{},[318,28569,28570],{"align":23741},"ADD",[318,28572,28573],{"align":23741},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[318,28575,28576],{"align":23741},"ADD archive.tar.gz \u002Fdata\u002F",[272,28578,28579,28582,28585],{},[318,28580,28581],{"align":23741},"WORKDIR",[318,28583,28584],{"align":23741},"设置工作目录",[318,28586,28587],{"align":23741},"WORKDIR \u002Fopt",[272,28589,28590,28593,28596],{},[318,28591,28592],{"align":23741},"CMD",[318,28594,28595],{"align":23741},"设置容器启动时默认命令（可被 docker run 覆盖）",[318,28597,28598,28599],{"align":23741},"CMD ",[118,28600,28601],{},"“node”, “index.js”",[272,28603,28604,28607,28610],{},[318,28605,28606],{"align":23741},"ENTRYPOINT",[318,28608,28609],{"align":23741},"设置容器启动时固定命令（通常用于 CLI 工具等）",[318,28611,28612,28613],{"align":23741},"ENTRYPOINT ",[118,28614,28615],{},"“python3”",[272,28617,28618,28621,28624],{},[318,28619,28620],{"align":23741},"EXPOSE",[318,28622,28623],{"align":23741},"声明镜像内服务监听的端口（不会自动映射）",[318,28625,28626],{"align":23741},"EXPOSE 80",[272,28628,28629,28632,28635],{},[318,28630,28631],{"align":23741},"VOLUME",[318,28633,28634],{"align":23741},"声明数据卷挂载点",[318,28636,28637,28638],{"align":23741},"VOLUME ",[118,28639,28640],{},"“\u002Fdata”",[272,28642,28643,28646,28649],{},[318,28644,28645],{"align":23741},"USER",[318,28647,28648],{"align":23741},"设置后续命令执行的用户",[318,28650,28651],{"align":23741},"USER appuser",[272,28653,28654,28657,28660],{},[318,28655,28656],{"align":23741},"ONBUILD",[318,28658,28659],{"align":23741},"当镜像作为其他镜像基础镜像时触发的构建指令",[318,28661,28662],{"align":23741},"ONBUILD COPY . \u002Fsrc",[272,28664,28665,28668,28671],{},[318,28666,28667],{"align":23741},"SHELL",[318,28669,28670],{"align":23741},"更改默认 shell，比如将 sh -c 改为 bash -c",[318,28672,28673,28674],{"align":23741},"SHELL ",[118,28675,28676],{},"“\u002Fbin\u002Fbash”, “-c”",[272,28678,28679,28682,28685],{},[318,28680,28681],{"align":23741},"HEALTHCHECK",[318,28683,28684],{"align":23741},"定义容器运行时的健康检查命令",[318,28686,28687,28688],{"align":23741},"`HEALTHCHECK CMD curl –fail ",[21,28689,28690],{"href":28690,"rel":28691},"http:\u002F\u002Flocalhost:8080",[25],[272,28693,28694,28697,28700],{},[318,28695,28696],{"align":23741},"STOPSIGNAL",[318,28698,28699],{"align":23741},"容器停止时发送的信号",[318,28701,28702],{"align":23741},"STOPSIGNAL SIGKILL",[89,28704,28706],{"id":28705},"_62自己创建容器","6.2.自己创建容器",[22003,28708,28710],{"id":28709},"_621手动创建","6.2.1.手动创建",[15,28712,28713],{},"在x86电脑上编译x86的：",[109,28715,28717],{"className":23827,"code":28716,"language":23829,"meta":39,"style":39},"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",[115,28718,28719,28735,28739,28752,28756,28769,28773,28786,28790,28803,28807],{"__ignoreMap":39},[118,28720,28721,28723,28726,28729,28732],{"class":120,"line":121},[118,28722,26546],{"class":1967},[118,28724,28725],{"class":233}," build",[118,28727,28728],{"class":177}," -t",[118,28730,28731],{"class":233}," ros-melodic-cuda118-cudnn8-bionic:latest",[118,28733,28734],{"class":233}," .\n",[118,28736,28737],{"class":120,"line":40},[118,28738,2404],{"emptyLinePlaceholder":45},[118,28740,28741,28743,28745,28747,28750],{"class":120,"line":1183},[118,28742,26546],{"class":1967},[118,28744,28725],{"class":233},[118,28746,28728],{"class":177},[118,28748,28749],{"class":233}," ros-noetic-focal:latest",[118,28751,28734],{"class":233},[118,28753,28754],{"class":120,"line":1198},[118,28755,2404],{"emptyLinePlaceholder":45},[118,28757,28758,28760,28762,28764,28767],{"class":120,"line":1204},[118,28759,26546],{"class":1967},[118,28761,28725],{"class":233},[118,28763,28728],{"class":177},[118,28765,28766],{"class":233}," ros-humble-jammy:latest",[118,28768,28734],{"class":233},[118,28770,28771],{"class":120,"line":1218},[118,28772,2404],{"emptyLinePlaceholder":45},[118,28774,28775,28777,28779,28781,28784],{"class":120,"line":1224},[118,28776,26546],{"class":1967},[118,28778,28725],{"class":233},[118,28780,28728],{"class":177},[118,28782,28783],{"class":233}," ros-jazzy-noble:latest",[118,28785,28734],{"class":233},[118,28787,28788],{"class":120,"line":1315},[118,28789,2404],{"emptyLinePlaceholder":45},[118,28791,28792,28794,28796,28798,28801],{"class":120,"line":1321},[118,28793,26546],{"class":1967},[118,28795,28725],{"class":233},[118,28797,28728],{"class":177},[118,28799,28800],{"class":233}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[118,28802,28734],{"class":233},[118,28804,28805],{"class":120,"line":1333},[118,28806,2404],{"emptyLinePlaceholder":45},[118,28808,28809,28811,28813,28815,28818],{"class":120,"line":1616},[118,28810,26546],{"class":1967},[118,28812,28725],{"class":233},[118,28814,28728],{"class":177},[118,28816,28817],{"class":233}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[118,28819,28734],{"class":233},[15,28821,28822],{},[1466,28823],{"alt":39,"src":28824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[15,28826,28827],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[15,28829,28830],{},[1466,28831],{"alt":39,"src":28832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[15,28834,28835],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[72,28837,28838],{},[75,28839,28840],{},"创建 Docker Hub 账户",[15,28842,28843],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[72,28845,28846],{"start":40},[75,28847,28848],{},"登录 Docker Hub",[15,28850,28851],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[109,28853,28855],{"className":23827,"code":28854,"language":23829,"meta":39,"style":39},"docker login\n",[115,28856,28857],{"__ignoreMap":39},[118,28858,28859,28861],{"class":120,"line":121},[118,28860,26546],{"class":1967},[118,28862,28863],{"class":233}," login\n",[15,28865,28866],{},"输入你的 Docker Hub 用户名和密码进行验证。",[72,28868,28869],{},[75,28870,28871],{},"为你的镜像打标签",[15,28873,28874,28875,28878],{},"Docker Hub 使用 ",[115,28876,28877],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[109,28880,28882],{"className":23827,"code":28881,"language":23829,"meta":39,"style":39},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[115,28883,28884],{"__ignoreMap":39},[118,28885,28886,28888,28891,28893,28896,28899,28902,28904],{"class":120,"line":121},[118,28887,26546],{"class":1967},[118,28889,28890],{"class":233}," tag",[118,28892,28783],{"class":233},[118,28894,28895],{"class":124}," \u003C",[118,28897,28898],{"class":233},"你的用户",[118,28900,28901],{"class":128},"名",[118,28903,1088],{"class":124},[118,28905,28906],{"class":233},"\u002Fros-jazzy-noble:latest\n",[15,28908,28909,28910,28913],{},"例如，如果你的 Docker Hub 用户名是 ",[115,28911,28912],{},"tungchiahui","，你应该执行：",[109,28915,28917],{"className":23827,"code":28916,"language":23829,"meta":39,"style":39},"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",[115,28918,28919,28930,28934,28945,28949,28960,28964,28975,28979],{"__ignoreMap":39},[118,28920,28921,28923,28925,28927],{"class":120,"line":121},[118,28922,26546],{"class":1967},[118,28924,28890],{"class":233},[118,28926,28749],{"class":233},[118,28928,28929],{"class":233}," tungchiahui\u002Fros-noetic-focal:latest\n",[118,28931,28932],{"class":120,"line":40},[118,28933,2404],{"emptyLinePlaceholder":45},[118,28935,28936,28938,28940,28942],{"class":120,"line":1183},[118,28937,26546],{"class":1967},[118,28939,28890],{"class":233},[118,28941,28766],{"class":233},[118,28943,28944],{"class":233}," tungchiahui\u002Fros-humble-jammy:latest\n",[118,28946,28947],{"class":120,"line":1198},[118,28948,2404],{"emptyLinePlaceholder":45},[118,28950,28951,28953,28955,28957],{"class":120,"line":1204},[118,28952,26546],{"class":1967},[118,28954,28890],{"class":233},[118,28956,28783],{"class":233},[118,28958,28959],{"class":233}," tungchiahui\u002Fros-jazzy-noble:latest\n",[118,28961,28962],{"class":120,"line":1218},[118,28963,2404],{"emptyLinePlaceholder":45},[118,28965,28966,28968,28970,28972],{"class":120,"line":1224},[118,28967,26546],{"class":1967},[118,28969,28890],{"class":233},[118,28971,28800],{"class":233},[118,28973,28974],{"class":233}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[118,28976,28977],{"class":120,"line":1315},[118,28978,2404],{"emptyLinePlaceholder":45},[118,28980,28981,28983,28985,28987],{"class":120,"line":1321},[118,28982,26546],{"class":1967},[118,28984,28890],{"class":233},[118,28986,28817],{"class":233},[118,28988,28989],{"class":233}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[72,28991,28992],{"start":40},[75,28993,28994],{},"推送镜像到 Docker Hub",[15,28996,28997],{},"使用以下命令将镜像推送到 Docker Hub：",[109,28999,29001],{"className":23827,"code":29000,"language":23829,"meta":39,"style":39},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[115,29002,29003],{"__ignoreMap":39},[118,29004,29005,29007,29010,29012,29014,29016,29018],{"class":120,"line":121},[118,29006,26546],{"class":1967},[118,29008,29009],{"class":233}," push",[118,29011,28895],{"class":124},[118,29013,28898],{"class":233},[118,29015,28901],{"class":128},[118,29017,1088],{"class":124},[118,29019,29020],{"class":233},"\u002Fros-noetic-jazzy-noble:latest\n",[15,29022,14638],{},[109,29024,29026],{"className":23827,"code":29025,"language":23829,"meta":39,"style":39},"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",[115,29027,29028,29036,29040,29048,29052,29060,29064,29073,29077,29085,29089],{"__ignoreMap":39},[118,29029,29030,29032,29034],{"class":120,"line":121},[118,29031,26546],{"class":1967},[118,29033,29009],{"class":233},[118,29035,28929],{"class":233},[118,29037,29038],{"class":120,"line":40},[118,29039,2404],{"emptyLinePlaceholder":45},[118,29041,29042,29044,29046],{"class":120,"line":1183},[118,29043,26546],{"class":1967},[118,29045,29009],{"class":233},[118,29047,28944],{"class":233},[118,29049,29050],{"class":120,"line":1198},[118,29051,2404],{"emptyLinePlaceholder":45},[118,29053,29054,29056,29058],{"class":120,"line":1204},[118,29055,26546],{"class":1967},[118,29057,29009],{"class":233},[118,29059,28959],{"class":233},[118,29061,29062],{"class":120,"line":1218},[118,29063,2404],{"emptyLinePlaceholder":45},[118,29065,29066,29068,29070],{"class":120,"line":1224},[118,29067,26546],{"class":1967},[118,29069,29009],{"class":233},[118,29071,29072],{"class":233}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[118,29074,29075],{"class":120,"line":1315},[118,29076,2404],{"emptyLinePlaceholder":45},[118,29078,29079,29081,29083],{"class":120,"line":1321},[118,29080,26546],{"class":1967},[118,29082,29009],{"class":233},[118,29084,28989],{"class":233},[118,29086,29087],{"class":120,"line":1333},[118,29088,2404],{"emptyLinePlaceholder":45},[118,29090,29091,29093,29095],{"class":120,"line":1616},[118,29092,26546],{"class":1967},[118,29094,29009],{"class":233},[118,29096,29097],{"class":233}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[72,29099,29100],{"start":1183},[75,29101,29102],{},"验证推送成功",[15,29104,29105],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[15,29107,29108],{},[278,29109,3788],{},[1135,29111,29112,29115],{},[75,29113,29114],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[75,29116,29117],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[15,29119,29120],{},[1466,29121],{"alt":39,"src":29122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[15,29124,29125],{},[1466,29126],{"alt":39,"src":29127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22003,29129,29131],{"id":29130},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[15,29133,29134,29135,29138,29139,29142],{},"如果您想在 ",[278,29136,29137],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[278,29140,29141],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[15,29144,29145,29146],{},"1. ",[278,29147,29148],{},"启用 Docker 跨平台构建",[15,29150,29151],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[15,29153,29154],{},"第一步：启用 buildx（只需执行一次）",[109,29156,29158],{"className":23827,"code":29157,"language":23829,"meta":39,"style":39},"docker buildx create --name multiarch_builder --use\n",[115,29159,29160],{"__ignoreMap":39},[118,29161,29162,29164,29167,29170,29173,29176],{"class":120,"line":121},[118,29163,26546],{"class":1967},[118,29165,29166],{"class":233}," buildx",[118,29168,29169],{"class":233}," create",[118,29171,29172],{"class":177}," --name",[118,29174,29175],{"class":233}," multiarch_builder",[118,29177,29178],{"class":177}," --use\n",[15,29180,29181],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[15,29183,29184],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[109,29186,29188],{"className":23827,"code":29187,"language":23829,"meta":39,"style":39},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[115,29189,29190],{"__ignoreMap":39},[118,29191,29192,29194,29196,29198,29201,29204,29207,29210],{"class":120,"line":121},[118,29193,26546],{"class":1967},[118,29195,27223],{"class":233},[118,29197,27226],{"class":177},[118,29199,29200],{"class":177}," --privileged",[118,29202,29203],{"class":233}," multiarch\u002Fqemu-user-static",[118,29205,29206],{"class":177}," --reset",[118,29208,29209],{"class":177}," -p",[118,29211,29212],{"class":233}," yes\n",[15,29214,29215],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[15,29217,29218],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[109,29220,29222],{"className":23827,"code":29221,"language":23829,"meta":39,"style":39},"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",[115,29223,29224,29266,29270,29275,29285,29295,29304,29310,29314,29318,29328,29336,29345,29351,29355,29359,29369,29377,29386,29392,29396,29400,29410,29418,29427,29433,29437,29441,29451,29459,29468,29474,29478,29482,29492,29500,29509,29515,29519,29523,29533,29541,29550,29556,29560,29564,29574,29582,29591,29597,29601,29605,29615,29623,29632,29638,29642,29646,29657,29665,29674,29680],{"__ignoreMap":39},[118,29225,29226,29228,29230,29232,29235,29238,29240,29242,29245,29247,29249,29251,29253,29256,29259,29261,29264],{"class":120,"line":121},[118,29227,26546],{"class":1967},[118,29229,29166],{"class":233},[118,29231,28725],{"class":233},[118,29233,29234],{"class":177}," --platform",[118,29236,29237],{"class":233}," linux\u002Famd64,linux\u002Farm64",[118,29239,28728],{"class":177},[118,29241,28895],{"class":124},[118,29243,29244],{"class":233},"你的镜像",[118,29246,28901],{"class":128},[118,29248,1088],{"class":124},[118,29250,987],{"class":233},[118,29252,1038],{"class":124},[118,29254,29255],{"class":233},"标",[118,29257,29258],{"class":128},"签",[118,29260,1088],{"class":124},[118,29262,29263],{"class":177}," --push",[118,29265,28734],{"class":233},[118,29267,29268],{"class":120,"line":40},[118,29269,2404],{"emptyLinePlaceholder":45},[118,29271,29272],{"class":120,"line":1183},[118,29273,29274],{"class":187},"# 例子：\n",[118,29276,29277,29279,29281,29283],{"class":120,"line":1198},[118,29278,26546],{"class":1967},[118,29280,29166],{"class":233},[118,29282,28725],{"class":233},[118,29284,24683],{"class":177},[118,29286,29287,29290,29293],{"class":120,"line":1204},[118,29288,29289],{"class":128},"--platform ",[118,29291,29292],{"class":233},"linux\u002Famd64,linux\u002Farm64",[118,29294,24683],{"class":177},[118,29296,29297,29299,29302],{"class":120,"line":1218},[118,29298,28728],{"class":177},[118,29300,29301],{"class":233}," tungchiahui\u002Fros:noetic-focal",[118,29303,24683],{"class":177},[118,29305,29306,29308],{"class":120,"line":1224},[118,29307,29263],{"class":177},[118,29309,24683],{"class":177},[118,29311,29312],{"class":120,"line":1315},[118,29313,28734],{"class":233},[118,29315,29316],{"class":120,"line":1321},[118,29317,2404],{"emptyLinePlaceholder":45},[118,29319,29320,29322,29324,29326],{"class":120,"line":1333},[118,29321,26546],{"class":1967},[118,29323,29166],{"class":233},[118,29325,28725],{"class":233},[118,29327,24683],{"class":177},[118,29329,29330,29332,29334],{"class":120,"line":1616},[118,29331,29289],{"class":128},[118,29333,29292],{"class":233},[118,29335,24683],{"class":177},[118,29337,29338,29340,29343],{"class":120,"line":1621},[118,29339,28728],{"class":177},[118,29341,29342],{"class":233}," tungchiahui\u002Fros:humble-jammy",[118,29344,24683],{"class":177},[118,29346,29347,29349],{"class":120,"line":1627},[118,29348,29263],{"class":177},[118,29350,24683],{"class":177},[118,29352,29353],{"class":120,"line":1632},[118,29354,28734],{"class":233},[118,29356,29357],{"class":120,"line":1646},[118,29358,2404],{"emptyLinePlaceholder":45},[118,29360,29361,29363,29365,29367],{"class":120,"line":1651},[118,29362,26546],{"class":1967},[118,29364,29166],{"class":233},[118,29366,28725],{"class":233},[118,29368,24683],{"class":177},[118,29370,29371,29373,29375],{"class":120,"line":1657},[118,29372,29289],{"class":128},[118,29374,29292],{"class":233},[118,29376,24683],{"class":177},[118,29378,29379,29381,29384],{"class":120,"line":1678},[118,29380,28728],{"class":177},[118,29382,29383],{"class":233}," tungchiahui\u002Fros:jazzy-noble",[118,29385,24683],{"class":177},[118,29387,29388,29390],{"class":120,"line":1683},[118,29389,29263],{"class":177},[118,29391,24683],{"class":177},[118,29393,29394],{"class":120,"line":1697},[118,29395,28734],{"class":233},[118,29397,29398],{"class":120,"line":1702},[118,29399,2404],{"emptyLinePlaceholder":45},[118,29401,29402,29404,29406,29408],{"class":120,"line":1731},[118,29403,26313],{"class":1967},[118,29405,29166],{"class":233},[118,29407,28725],{"class":233},[118,29409,24683],{"class":177},[118,29411,29412,29414,29416],{"class":120,"line":1736},[118,29413,29289],{"class":128},[118,29415,29292],{"class":233},[118,29417,24683],{"class":177},[118,29419,29420,29422,29425],{"class":120,"line":1753},[118,29421,28728],{"class":177},[118,29423,29424],{"class":233}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[118,29426,24683],{"class":177},[118,29428,29429,29431],{"class":120,"line":1758},[118,29430,29263],{"class":177},[118,29432,24683],{"class":177},[118,29434,29435],{"class":120,"line":1763},[118,29436,28734],{"class":233},[118,29438,29439],{"class":120,"line":1768},[118,29440,2404],{"emptyLinePlaceholder":45},[118,29442,29443,29445,29447,29449],{"class":120,"line":1782},[118,29444,26546],{"class":1967},[118,29446,29166],{"class":233},[118,29448,28725],{"class":233},[118,29450,24683],{"class":177},[118,29452,29453,29455,29457],{"class":120,"line":1787},[118,29454,29289],{"class":128},[118,29456,29292],{"class":233},[118,29458,24683],{"class":177},[118,29460,29461,29463,29466],{"class":120,"line":2581},[118,29462,28728],{"class":177},[118,29464,29465],{"class":233}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[118,29467,24683],{"class":177},[118,29469,29470,29472],{"class":120,"line":2595},[118,29471,29263],{"class":177},[118,29473,24683],{"class":177},[118,29475,29476],{"class":120,"line":2603},[118,29477,28734],{"class":233},[118,29479,29480],{"class":120,"line":2608},[118,29481,2404],{"emptyLinePlaceholder":45},[118,29483,29484,29486,29488,29490],{"class":120,"line":2614},[118,29485,26313],{"class":1967},[118,29487,29166],{"class":233},[118,29489,28725],{"class":233},[118,29491,24683],{"class":177},[118,29493,29494,29496,29498],{"class":120,"line":2620},[118,29495,29289],{"class":128},[118,29497,29292],{"class":233},[118,29499,24683],{"class":177},[118,29501,29502,29504,29507],{"class":120,"line":2625},[118,29503,28728],{"class":177},[118,29505,29506],{"class":233}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[118,29508,24683],{"class":177},[118,29510,29511,29513],{"class":120,"line":7953},[118,29512,29263],{"class":177},[118,29514,24683],{"class":177},[118,29516,29517],{"class":120,"line":7977},[118,29518,28734],{"class":233},[118,29520,29521],{"class":120,"line":7982},[118,29522,2404],{"emptyLinePlaceholder":45},[118,29524,29525,29527,29529,29531],{"class":120,"line":7988},[118,29526,26546],{"class":1967},[118,29528,29166],{"class":233},[118,29530,28725],{"class":233},[118,29532,24683],{"class":177},[118,29534,29535,29537,29539],{"class":120,"line":8015},[118,29536,29289],{"class":128},[118,29538,29292],{"class":233},[118,29540,24683],{"class":177},[118,29542,29543,29545,29548],{"class":120,"line":8020},[118,29544,28728],{"class":177},[118,29546,29547],{"class":233}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[118,29549,24683],{"class":177},[118,29551,29552,29554],{"class":120,"line":8026},[118,29553,29263],{"class":177},[118,29555,24683],{"class":177},[118,29557,29558],{"class":120,"line":8038},[118,29559,28734],{"class":233},[118,29561,29562],{"class":120,"line":8050},[118,29563,2404],{"emptyLinePlaceholder":45},[118,29565,29566,29568,29570,29572],{"class":120,"line":8062},[118,29567,26546],{"class":1967},[118,29569,29166],{"class":233},[118,29571,28725],{"class":233},[118,29573,24683],{"class":177},[118,29575,29576,29578,29580],{"class":120,"line":9721},[118,29577,29289],{"class":128},[118,29579,29292],{"class":233},[118,29581,24683],{"class":177},[118,29583,29584,29586,29589],{"class":120,"line":9746},[118,29585,28728],{"class":177},[118,29587,29588],{"class":233}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[118,29590,24683],{"class":177},[118,29592,29593,29595],{"class":120,"line":9769},[118,29594,29263],{"class":177},[118,29596,24683],{"class":177},[118,29598,29599],{"class":120,"line":9793},[118,29600,28734],{"class":233},[118,29602,29603],{"class":120,"line":9798},[118,29604,2404],{"emptyLinePlaceholder":45},[118,29606,29607,29609,29611,29613],{"class":120,"line":9803},[118,29608,26313],{"class":1967},[118,29610,29166],{"class":233},[118,29612,28725],{"class":233},[118,29614,24683],{"class":177},[118,29616,29617,29619,29621],{"class":120,"line":9808},[118,29618,29289],{"class":128},[118,29620,29292],{"class":233},[118,29622,24683],{"class":177},[118,29624,29625,29627,29630],{"class":120,"line":9817},[118,29626,28728],{"class":177},[118,29628,29629],{"class":233}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[118,29631,24683],{"class":177},[118,29633,29634,29636],{"class":120,"line":9822},[118,29635,29263],{"class":177},[118,29637,24683],{"class":177},[118,29639,29640],{"class":120,"line":9828},[118,29641,28734],{"class":233},[118,29643,29644],{"class":120,"line":9849},[118,29645,2404],{"emptyLinePlaceholder":45},[118,29647,29648,29651,29653,29655],{"class":120,"line":9855},[118,29649,29650],{"class":1967},"  docker",[118,29652,29166],{"class":233},[118,29654,28725],{"class":233},[118,29656,24683],{"class":177},[118,29658,29659,29661,29663],{"class":120,"line":9869},[118,29660,29289],{"class":128},[118,29662,29292],{"class":233},[118,29664,24683],{"class":177},[118,29666,29667,29669,29672],{"class":120,"line":9875},[118,29668,28728],{"class":177},[118,29670,29671],{"class":233}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[118,29673,24683],{"class":177},[118,29675,29676,29678],{"class":120,"line":9902},[118,29677,29263],{"class":177},[118,29679,24683],{"class":177},[118,29681,29682],{"class":120,"line":9911},[118,29683,28734],{"class":233},[15,29685,29686],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[15,29688,29689],{},[1466,29690],{"alt":39,"src":29691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[15,29693,29694],{},[1466,29695],{"alt":39,"src":29696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22003,29698,29700],{"id":29699},"_623清除构建缓存","6.2.3.清除构建缓存",[109,29702,29704],{"className":23827,"code":29703,"language":23829,"meta":39,"style":39},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[115,29705,29706,29711],{"__ignoreMap":39},[118,29707,29708],{"class":120,"line":121},[118,29709,29710],{"class":187},"# 清理BuildKit构建缓存\n",[118,29712,29713,29715,29718,29721],{"class":120,"line":40},[118,29714,26546],{"class":1967},[118,29716,29717],{"class":233}," builder",[118,29719,29720],{"class":233}," prune",[118,29722,29723],{"class":177}," -f\n",[15,29725,29726],{},[1466,29727],{"alt":39,"src":29728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[89,29730,29732],{"id":29731},"_63补充","6.3.补充",[22003,29734,29736],{"id":29735},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[15,29738,29739],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[15,29741,29742],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[15,29744,29745],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[109,29747,29749],{"className":23827,"code":29748,"language":23829,"meta":39,"style":39},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[115,29750,29751,29758],{"__ignoreMap":39},[118,29752,29753,29755],{"class":120,"line":121},[118,29754,27363],{"class":1967},[118,29756,29757],{"class":233}," nginx\n",[118,29759,29760,29762,29765,29768,29770],{"class":120,"line":40},[118,29761,28548],{"class":1967},[118,29763,29764],{"class":233}," echo",[118,29766,29767],{"class":233}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[118,29769,26215],{"class":124},[118,29771,29772],{"class":233}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[15,29774,29775],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[15,29777,29778],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[109,29780,29782],{"className":23827,"code":29781,"language":23829,"meta":39,"style":39},"docker build -t nginx:tuling .\n",[115,29783,29784],{"__ignoreMap":39},[118,29785,29786,29788,29790,29792,29795],{"class":120,"line":121},[118,29787,26546],{"class":1967},[118,29789,28725],{"class":233},[118,29791,28728],{"class":177},[118,29793,29794],{"class":233}," nginx:tuling",[118,29796,28734],{"class":233},[15,29798,29799],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[15,29801,29802],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[109,29804,29806],{"className":23827,"code":29805,"language":23829,"meta":39,"style":39},"docker run -d -p 92:80 nginx:tuling\n",[115,29807,29808],{"__ignoreMap":39},[118,29809,29810,29812,29814,29817,29819,29822],{"class":120,"line":121},[118,29811,26546],{"class":1967},[118,29813,27223],{"class":233},[118,29815,29816],{"class":177}," -d",[118,29818,29209],{"class":177},[118,29820,29821],{"class":233}," 92:80",[118,29823,29824],{"class":233}," nginx:tuling\n",[15,29826,29827,29828],{},"4、访问 ",[21,29829,29832],{"href":29830,"rel":29831},"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",[25],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[15,29834,29835],{},[1466,29836],{"alt":39,"src":29837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[15,29839,29840],{},[1466,29841],{"alt":39,"src":29842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22003,29844,29846],{"id":29845},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[15,29848,29849],{},"只需要知道大体流程即可",[15,29851,29852],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[15,29854,29855],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[15,29857,29858],{},"2、在Dockerfile中添加以下内容",[109,29860,29862],{"className":26084,"code":29861,"language":26086,"meta":39,"style":39},"# 基于哪个镜像\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",[115,29863,29864,29869,29874,29879,29884,29889,29894,29899],{"__ignoreMap":39},[118,29865,29866],{"class":120,"line":121},[118,29867,29868],{},"# 基于哪个镜像\n",[118,29870,29871],{"class":120,"line":40},[118,29872,29873],{},"From java:8\n",[118,29875,29876],{"class":120,"line":1183},[118,29877,29878],{},"# 复制文件到容器\n",[118,29880,29881],{"class":120,"line":1198},[118,29882,29883],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[118,29885,29886],{"class":120,"line":1204},[118,29887,29888],{},"# 声明需要暴露的端口\n",[118,29890,29891],{"class":120,"line":1218},[118,29892,29893],{},"EXPOSE 8877\n",[118,29895,29896],{"class":120,"line":1224},[118,29897,29898],{},"# 配置容器启动后执行的命令\n",[118,29900,29901],{"class":120,"line":1315},[118,29902,29903],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[15,29905,29906],{},"3、使用docker build命令构建镜像",[109,29908,29910],{"className":23827,"code":29909,"language":23829,"meta":39,"style":39},"docker build -t tulingmall-member:0.0.5 .\n",[115,29911,29912],{"__ignoreMap":39},[118,29913,29914,29916,29918,29920,29923],{"class":120,"line":121},[118,29915,26546],{"class":1967},[118,29917,28725],{"class":233},[118,29919,28728],{"class":177},[118,29921,29922],{"class":233}," tulingmall-member:0.0.5",[118,29924,28734],{"class":233},[15,29926,29927],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[15,29929,29930],{},[1466,29931],{"alt":39,"src":29932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[15,29934,29935],{},"4、启动镜像，加-d可在后台启动",[109,29937,29939],{"className":23827,"code":29938,"language":23829,"meta":39,"style":39},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[115,29940,29941],{"__ignoreMap":39},[118,29942,29943,29945,29947,29949,29951,29954],{"class":120,"line":121},[118,29944,26546],{"class":1967},[118,29946,27223],{"class":233},[118,29948,29816],{"class":177},[118,29950,29209],{"class":177},[118,29952,29953],{"class":233}," 8877:8877",[118,29955,29956],{"class":233}," tulingmall-member:0.0.5\n",[15,29958,29959],{},"加上JVM参数：",[109,29961,29963],{"className":23827,"code":29962,"language":23829,"meta":39,"style":39},"# --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",[115,29964,29965,29970,29985,29995,30004,30011],{"__ignoreMap":39},[118,29966,29967],{"class":120,"line":121},[118,29968,29969],{"class":187},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[118,29971,29972,29974,29976,29979,29981,29983],{"class":120,"line":40},[118,29973,26546],{"class":1967},[118,29975,27223],{"class":233},[118,29977,29978],{"class":177},"  -d",[118,29980,29209],{"class":177},[118,29982,29953],{"class":233},[118,29984,24683],{"class":177},[118,29986,29987,29989,29992],{"class":120,"line":1183},[118,29988,28121],{"class":128},[118,29990,29991],{"class":233},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[118,29993,29994],{"class":177},"  \\\n",[118,29996,29997,29999,30002],{"class":120,"line":1198},[118,29998,28121],{"class":128},[118,30000,30001],{"class":233},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[118,30003,29994],{"class":177},[118,30005,30006,30009],{"class":120,"line":1204},[118,30007,30008],{"class":128},"--cap-add=SYS_PTRACE  ",[118,30010,26168],{"class":177},[118,30012,30013],{"class":120,"line":1218},[118,30014,30015],{"class":128},"tulingmall-member:0.0.5\n",[15,30017,30018],{},"5、访问会员服务接口",[15,30020,30021],{},[1466,30022],{"alt":39,"src":30023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22003,30025,30027],{"id":30026},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[15,30029,30030],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[15,30032,30033,30034],{},"阿里云docker镜像仓库：",[21,30035,30036],{"href":30036,"rel":30037},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25],[15,30039,30040],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[15,30042,30043],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[15,30045,30046],{},[1466,30047],{"alt":39,"src":30048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[15,30050,30051],{},"要把镜像推送到镜像仓库",[109,30053,30055],{"className":23827,"code":30054,"language":23829,"meta":39,"style":39},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[115,30056,30057],{"__ignoreMap":39},[118,30058,30059,30061,30063,30065],{"class":120,"line":121},[118,30060,26546],{"class":1967},[118,30062,28890],{"class":233},[118,30064,29922],{"class":233},[118,30066,30067],{"class":233}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[15,30069,30070],{},"最后将镜像推送到远程仓库",[109,30072,30074],{"className":23827,"code":30073,"language":23829,"meta":39,"style":39},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[115,30075,30076],{"__ignoreMap":39},[118,30077,30078,30080,30082],{"class":120,"line":121},[118,30079,26546],{"class":1967},[118,30081,29009],{"class":233},[118,30083,30067],{"class":233},[5131,30085,30086],{},"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":39,"searchDepth":40,"depth":40,"links":30088},[30089,30090,30091],{"id":28476,"depth":1183,"text":28477},{"id":28705,"depth":1183,"text":28706},{"id":29731,"depth":1183,"text":29732},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28468,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30098,"title":30099,"body":30100,"description":39,"extension":43,"meta":30243,"navigation":45,"path":30244,"seo":30245,"stem":30246,"__hash__":30247},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30101,"toc":30241},[30102,30105,30110,30115,30118,30123,30128,30131,30136,30141,30144,30149,30152,30155,30158,30161,30164,30167,30187,30209,30212,30215,30235,30238],[10,30103,30099],{"id":30104},"_7vscode远程开发",[72,30106,30107],{},[75,30108,30109],{},"插件1：微软Docker工具",[15,30111,30112],{},[1466,30113],{"alt":39,"src":30114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[15,30116,30117],{},"docker扩展插件已经进化为container tools了，请安装container tools",[15,30119,30120],{},[1466,30121],{"alt":39,"src":30122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[72,30124,30125],{"start":40},[75,30126,30127],{},"插件2：微软Docker远程开发工具",[15,30129,30130],{},"下面这是远程开发的插件。",[15,30132,30133],{},[1466,30134],{"alt":39,"src":30135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[15,30137,30138],{},[1466,30139],{"alt":39,"src":30140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[15,30142,30143],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[15,30145,30146],{},[1466,30147],{"alt":39,"src":30148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[15,30150,30151],{},"安装完拓展之后，vscode进行链接：",[15,30153,30154],{},"1.按ctrl+shift+p",[15,30156,30157],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[15,30159,30160],{},"3.选择目前运行的容器",[15,30162,30163],{},"4.VS Code 会在新窗口中打开并连接到容器",[15,30165,30166],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[109,30168,30170],{"className":23827,"code":30169,"language":23829,"meta":39,"style":39},"docker run -v 主机目录:容器目录 image-name\n",[115,30171,30172],{"__ignoreMap":39},[118,30173,30174,30176,30178,30181,30184],{"class":120,"line":121},[118,30175,26546],{"class":1967},[118,30177,27223],{"class":233},[118,30179,30180],{"class":177}," -v",[118,30182,30183],{"class":233}," 主机目录:容器目录",[118,30185,30186],{"class":233}," image-name\n",[109,30188,30190],{"className":23827,"code":30189,"language":23829,"meta":39,"style":39},"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",[115,30191,30192],{"__ignoreMap":39},[118,30193,30194,30196,30198,30201,30203,30206],{"class":120,"line":121},[118,30195,26546],{"class":1967},[118,30197,27223],{"class":233},[118,30199,30200],{"class":177}," -it",[118,30202,30180],{"class":177},[118,30204,30205],{"class":233}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[118,30207,30208],{"class":233}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[15,30210,30211],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[15,30213,30214],{},"查看挂载情况：",[109,30216,30218],{"className":23827,"code":30217,"language":23829,"meta":39,"style":39},"mount | grep -i project\n",[115,30219,30220],{"__ignoreMap":39},[118,30221,30222,30225,30227,30230,30232],{"class":120,"line":121},[118,30223,30224],{"class":1967},"mount",[118,30226,25114],{"class":124},[118,30228,30229],{"class":1967}," grep",[118,30231,26423],{"class":177},[118,30233,30234],{"class":233}," project\n",[15,30236,30237],{},"也可以通过ls来进行查看",[5131,30239,30240],{},"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":39,"searchDepth":40,"depth":40,"links":30242},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30099,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30249,"title":30250,"body":30251,"description":42,"extension":43,"meta":30255,"navigation":45,"path":30257,"seo":30258,"stem":30259,"__hash__":30260},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30252,"toc":30253},[],{"title":39,"searchDepth":40,"depth":40,"links":30254},[],{"category":30256},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30250,"description":42},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30262,"title":30263,"body":30264,"description":42,"extension":43,"meta":30268,"navigation":45,"path":30269,"seo":30270,"stem":30271,"__hash__":30272},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30265,"toc":30266},[],{"title":39,"searchDepth":40,"depth":40,"links":30267},[],{"category":30256},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30263,"description":42},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30274,"title":30275,"body":30276,"description":42,"extension":43,"meta":30569,"navigation":45,"path":30570,"seo":30571,"stem":30572,"__hash__":30573},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30277,"toc":30567},[30278,30281,30289,30304,30309,30360,30363,30369,30556,30561,30564],[10,30279,30275],{"id":30280},"_1验证深度学习环境",[15,30282,30283,30284],{},"关于环境的安装，看",[21,30285,30288],{"href":30286,"rel":30287},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25],"Pytorch-->深度学习",[15,30290,30291,30292,30295,30296,30299,30300,30303],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[115,30293,30294],{},"pytorch-cuda=12.4"," 是一个“ ",[278,30297,30298],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[278,30301,30302],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[15,30305,30306],{},[1466,30307],{"alt":39,"src":30308},"\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",[109,30310,30312],{"className":23827,"code":30311,"language":23829,"meta":39,"style":39},"# 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",[115,30313,30314,30319],{"__ignoreMap":39},[118,30315,30316],{"class":120,"line":121},[118,30317,30318],{"class":187},"# CUDA 12.4\n",[118,30320,30321,30324,30326,30329,30332,30335,30338,30341,30343,30346,30349,30352,30355,30357],{"class":120,"line":40},[118,30322,30323],{"class":1967},"conda",[118,30325,23839],{"class":233},[118,30327,30328],{"class":233}," pytorch==",[118,30330,30331],{"class":177},"2.5.1",[118,30333,30334],{"class":233}," torchvision==",[118,30336,30337],{"class":177},"0.20.1",[118,30339,30340],{"class":233}," torchaudio==",[118,30342,30331],{"class":177},[118,30344,30345],{"class":233}," pytorch-cuda=",[118,30347,30348],{"class":177},"12.4",[118,30350,30351],{"class":177}," -c",[118,30353,30354],{"class":233}," pytorch",[118,30356,30351],{"class":177},[118,30358,30359],{"class":233}," nvidia\n",[15,30361,30362],{},"）：",[15,30364,30365],{},[21,30366,30367],{"href":30367,"rel":30368},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25],[109,30370,30374],{"className":30371,"code":30372,"language":30373,"meta":39,"style":39},"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",[115,30375,30376,30381,30389,30394,30404,30420,30425,30435,30472,30479,30491,30507,30512,30522,30534,30544],{"__ignoreMap":39},[118,30377,30378],{"class":120,"line":121},[118,30379,30380],{"class":187},"# 对深度学习环境进行测试\n",[118,30382,30383,30386],{"class":120,"line":40},[118,30384,30385],{"class":124},"import",[118,30387,30388],{"class":128}," torch\n",[118,30390,30391],{"class":120,"line":1183},[118,30392,30393],{"class":187},"# 查看cuda是否被激活\n",[118,30395,30396,30399,30401],{"class":120,"line":1198},[118,30397,30398],{"class":128},"flag",[118,30400,174],{"class":124},[118,30402,30403],{"class":128},"torch.cuda.is_available()\n",[118,30405,30406,30409,30411,30414,30417],{"class":120,"line":1204},[118,30407,30408],{"class":177},"print",[118,30410,129],{"class":128},[118,30412,30413],{"class":233},"\"cuda:\"",[118,30415,30416],{"class":128},", flag)   ",[118,30418,30419],{"class":187},"#返回true的话说明被激活\n",[118,30421,30422],{"class":120,"line":1218},[118,30423,30424],{"class":187},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[118,30426,30427,30430,30432],{"class":120,"line":1224},[118,30428,30429],{"class":128},"ngpu",[118,30431,174],{"class":124},[118,30433,30434],{"class":177},"1\n",[118,30436,30437,30440,30442,30445,30448,30450,30453,30456,30459,30461,30463,30465,30467,30470],{"class":120,"line":1315},[118,30438,30439],{"class":128},"device",[118,30441,174],{"class":124},[118,30443,30444],{"class":128},"torch.device(",[118,30446,30447],{"class":233},"\"cuda:0\"",[118,30449,1708],{"class":124},[118,30451,30452],{"class":128},"(torch.cuda.is_available() ",[118,30454,30455],{"class":124},"and",[118,30457,30458],{"class":128}," ngpu",[118,30460,1088],{"class":124},[118,30462,320],{"class":177},[118,30464,13719],{"class":128},[118,30466,1705],{"class":124},[118,30468,30469],{"class":233}," \"cpu\"",[118,30471,135],{"class":128},[118,30473,30474,30476],{"class":120,"line":1321},[118,30475,30408],{"class":177},[118,30477,30478],{"class":128},"(device)\n",[118,30480,30481,30483,30486,30488],{"class":120,"line":1333},[118,30482,30408],{"class":177},[118,30484,30485],{"class":128},"(torch.cuda.get_device_name(",[118,30487,320],{"class":177},[118,30489,30490],{"class":128},"))\n",[118,30492,30493,30495,30498,30500,30502,30504],{"class":120,"line":1616},[118,30494,30408],{"class":177},[118,30496,30497],{"class":128},"(torch.rand(",[118,30499,200],{"class":177},[118,30501,506],{"class":128},[118,30503,200],{"class":177},[118,30505,30506],{"class":128},").cuda())\n",[118,30508,30509],{"class":120,"line":1621},[118,30510,30511],{"class":187},"# 查看cuda和cudnn的版本\n",[118,30513,30514,30517,30519],{"class":120,"line":1627},[118,30515,30516],{"class":128},"cuda_version",[118,30518,174],{"class":124},[118,30520,30521],{"class":128},"torch.version.cuda\n",[118,30523,30524,30526,30528,30531],{"class":120,"line":1632},[118,30525,30408],{"class":177},[118,30527,129],{"class":128},[118,30529,30530],{"class":233},"\"cuda version\"",[118,30532,30533],{"class":128},",cuda_version)\n",[118,30535,30536,30539,30541],{"class":120,"line":1646},[118,30537,30538],{"class":128},"cudnn_version",[118,30540,174],{"class":124},[118,30542,30543],{"class":128},"torch.backends.cudnn.version()\n",[118,30545,30546,30548,30550,30553],{"class":120,"line":1651},[118,30547,30408],{"class":177},[118,30549,129],{"class":128},[118,30551,30552],{"class":233},"\"cudnn version\"",[118,30554,30555],{"class":128},",cudnn_version)\n",[15,30557,30558],{},[1466,30559],{"alt":39,"src":30560},"\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",[15,30562,30563],{},"cuda:0 指的是一块显卡",[5131,30565,30566],{},"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":39,"searchDepth":40,"depth":40,"links":30568},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30275,"description":42},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30575,"title":30576,"body":30577,"description":42,"extension":43,"meta":50381,"navigation":45,"path":50382,"seo":50383,"stem":50384,"__hash__":50385},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30578,"toc":50375},[30579,30582,30586,30590,30593,30598,30603,30606,30611,30616,30621,30624,30628,30633,30637,30642,30645,30650,30653,30656,30659,30662,30667,30670,30675,30680,30685,30690,30693,30697,30700,30705,31309,31314,31317,31322,31325,31328,31792,31795,31798,31801,31804,33855,33858,33863,33868,34663,34666,34671,35449,35453,37112,37116,37830,37834,37838,37843,37848,37853,37856,37861,37866,37871,37876,37881,37885,37890,39172,39177,39180,39183,39186,39341,39344,39347,40563,40568,41263,41267,41271,41276,41281,41284,41289,41294,41299,41304,41309,41314,41319,41324,41329,41334,41339,41344,41349,41354,41359,41364,41369,41374,41379,41384,41389,41394,41399,41404,41409,41414,41419,41424,41429,41434,41438,41442,41445,42923,42927,44574,44578,45272,45276,45279,45282,45826,45829,45833,45836,47233,47237,47240,47818,49605,49609,49612,50372],[10,30580,30576],{"id":30581},"_2经典神经网络",[89,30583,30585],{"id":30584},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22003,30587,30589],{"id":30588},"_211原理介绍","2.1.1.原理介绍",[15,30591,30592],{},"LeNet-5",[72,30594,30595],{},[75,30596,30597],{},"原理",[15,30599,30600],{},[1466,30601],{"alt":39,"src":30602},"\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",[15,30604,30605],{},"B是batch批次；C是channel通道",[72,30607,30608],{"start":40},[75,30609,30610],{},"网络参数详细",[15,30612,30613],{},[1466,30614],{"alt":39,"src":30615},"\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",[15,30617,30618],{},[1466,30619],{"alt":39,"src":30620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[15,30622,30623],{},"AlexNet",[72,30625,30626],{},[75,30627,30597],{},[15,30629,30630],{},[1466,30631],{"alt":39,"src":30632},"\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",[72,30634,30635],{"start":40},[75,30636,30610],{},[15,30638,30639],{},[1466,30640],{"alt":39,"src":30641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[15,30643,30644],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[15,30646,30647],{},[1466,30648],{"alt":39,"src":30649},"\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",[15,30651,30652],{},"数据处理中的图像增强操作:",[15,30654,30655],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[15,30657,30658],{},"①增加数据量，保证训练数据充足；②防止过拟合",[15,30660,30661],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[15,30663,30664],{},[1466,30665],{"alt":39,"src":30666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[15,30668,30669],{},"提升网络精确度的方法：LRN正则化",[15,30671,30672],{},[1466,30673],{"alt":39,"src":30674},"\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",[15,30676,30677],{},[1466,30678],{"alt":39,"src":30679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[72,30681,30682],{"start":1183},[75,30683,30684],{},"AlexNet的总结",[15,30686,30687],{},[1466,30688],{"alt":39,"src":30689},"\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",[15,30691,30692],{},"比LeNet模型要深一丢丢",[22003,30694,30696],{"id":30695},"_212代码实现","2.1.2.代码实现",[15,30698,30699],{},"（1）LeNet",[72,30701,30702],{},[75,30703,30704],{},"模型搭建",[109,30706,30708],{"className":30371,"code":30707,"language":30373,"meta":39,"style":39},"# 导入库\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",[115,30709,30710,30715,30721,30726,30739,30744,30756,30760,30780,30785,30790,30801,30806,30825,30829,30834,30883,30895,30900,30929,30964,30991,30996,31008,31013,31033,31052,31071,31075,31080,31090,31107,31118,31133,31144,31155,31170,31185,31196,31203,31207,31221,31226,31249,31254,31259,31264,31268,31273,31278,31288],{"__ignoreMap":39},[118,30711,30712],{"class":120,"line":121},[118,30713,30714],{"class":187},"# 导入库\n",[118,30716,30717,30719],{"class":120,"line":40},[118,30718,30385],{"class":124},[118,30720,30388],{"class":128},[118,30722,30723],{"class":120,"line":1183},[118,30724,30725],{"class":187},"# 导入神经网络层\n",[118,30727,30728,30731,30734,30736],{"class":120,"line":1198},[118,30729,30730],{"class":124},"from",[118,30732,30733],{"class":128}," torch ",[118,30735,30385],{"class":124},[118,30737,30738],{"class":128}," nn\n",[118,30740,30741],{"class":120,"line":1204},[118,30742,30743],{"class":187},"# 导入展示神经网络参数的包\n",[118,30745,30746,30748,30751,30753],{"class":120,"line":1218},[118,30747,30730],{"class":124},[118,30749,30750],{"class":128}," torchsummary ",[118,30752,30385],{"class":124},[118,30754,30755],{"class":128}," summary\n",[118,30757,30758],{"class":120,"line":1224},[118,30759,2404],{"emptyLinePlaceholder":45},[118,30761,30762,30764,30767,30769,30772,30774,30777],{"class":120,"line":1315},[118,30763,14699],{"class":124},[118,30765,30766],{"class":1967}," LeNet",[118,30768,129],{"class":128},[118,30770,30771],{"class":1967},"nn",[118,30773,686],{"class":128},[118,30775,30776],{"class":1967},"Module",[118,30778,30779],{"class":128},"):\n",[118,30781,30782],{"class":120,"line":1321},[118,30783,30784],{"class":187},"    # 模型初始化:\n",[118,30786,30787],{"class":120,"line":1333},[118,30788,30789],{"class":187},"    # 定义一些网络层和激活函数\n",[118,30791,30792,30795,30798],{"class":120,"line":1616},[118,30793,30794],{"class":124},"    def",[118,30796,30797],{"class":177}," __init__",[118,30799,30800],{"class":128},"(self):\n",[118,30802,30803],{"class":120,"line":1621},[118,30804,30805],{"class":187},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[118,30807,30808,30811,30814,30817,30820,30823],{"class":120,"line":1627},[118,30809,30810],{"class":177},"        super",[118,30812,30813],{"class":128},"(LeNet,",[118,30815,30816],{"class":177},"self",[118,30818,30819],{"class":128},").",[118,30821,30822],{"class":177},"__init__",[118,30824,1980],{"class":128},[118,30826,30827],{"class":120,"line":1632},[118,30828,2404],{"emptyLinePlaceholder":45},[118,30830,30831],{"class":120,"line":1646},[118,30832,30833],{"class":187},"        # 定义网络层\n",[118,30835,30836,30839,30842,30844,30847,30850,30852,30854,30856,30859,30861,30863,30865,30868,30870,30872,30874,30877,30879,30881],{"class":120,"line":1651},[118,30837,30838],{"class":177},"        self",[118,30840,30841],{"class":128},".c1",[118,30843,174],{"class":124},[118,30845,30846],{"class":128},"nn.Conv2d(",[118,30848,30849],{"class":5221},"in_channels",[118,30851,174],{"class":124},[118,30853,346],{"class":177},[118,30855,506],{"class":128},[118,30857,30858],{"class":5221},"out_channels",[118,30860,174],{"class":124},[118,30862,472],{"class":177},[118,30864,506],{"class":128},[118,30866,30867],{"class":5221},"kernel_size",[118,30869,174],{"class":124},[118,30871,447],{"class":177},[118,30873,506],{"class":128},[118,30875,30876],{"class":5221},"padding",[118,30878,174],{"class":124},[118,30880,206],{"class":177},[118,30882,135],{"class":128},[118,30884,30885,30887,30890,30892],{"class":120,"line":1657},[118,30886,30838],{"class":177},[118,30888,30889],{"class":128},".sig",[118,30891,174],{"class":124},[118,30893,30894],{"class":128},"nn.Sigmoid()\n",[118,30896,30897],{"class":120,"line":1678},[118,30898,30899],{"class":187},"        # 定义池化\n",[118,30901,30902,30904,30907,30909,30912,30914,30916,30918,30920,30923,30925,30927],{"class":120,"line":1683},[118,30903,30838],{"class":177},[118,30905,30906],{"class":128},".s2",[118,30908,174],{"class":124},[118,30910,30911],{"class":128},"nn.AvgPool2d(",[118,30913,30867],{"class":5221},[118,30915,174],{"class":124},[118,30917,206],{"class":177},[118,30919,506],{"class":128},[118,30921,30922],{"class":5221},"stride",[118,30924,174],{"class":124},[118,30926,206],{"class":177},[118,30928,135],{"class":128},[118,30930,30931,30933,30936,30938,30940,30942,30944,30946,30948,30950,30952,30954,30956,30958,30960,30962],{"class":120,"line":1697},[118,30932,30838],{"class":177},[118,30934,30935],{"class":128},".c3",[118,30937,174],{"class":124},[118,30939,30846],{"class":128},[118,30941,30849],{"class":5221},[118,30943,174],{"class":124},[118,30945,472],{"class":177},[118,30947,506],{"class":128},[118,30949,30858],{"class":5221},[118,30951,174],{"class":124},[118,30953,729],{"class":177},[118,30955,506],{"class":128},[118,30957,30867],{"class":5221},[118,30959,174],{"class":124},[118,30961,447],{"class":177},[118,30963,135],{"class":128},[118,30965,30966,30968,30971,30973,30975,30977,30979,30981,30983,30985,30987,30989],{"class":120,"line":1702},[118,30967,30838],{"class":177},[118,30969,30970],{"class":128},".s4",[118,30972,174],{"class":124},[118,30974,30911],{"class":128},[118,30976,30867],{"class":5221},[118,30978,174],{"class":124},[118,30980,206],{"class":177},[118,30982,506],{"class":128},[118,30984,30922],{"class":5221},[118,30986,174],{"class":124},[118,30988,206],{"class":177},[118,30990,135],{"class":128},[118,30992,30993],{"class":120,"line":1731},[118,30994,30995],{"class":187},"        # 定义平展层\n",[118,30997,30998,31000,31003,31005],{"class":120,"line":1736},[118,30999,30838],{"class":177},[118,31001,31002],{"class":128},".flatten",[118,31004,174],{"class":124},[118,31006,31007],{"class":128},"nn.Flatten()\n",[118,31009,31010],{"class":120,"line":1753},[118,31011,31012],{"class":187},"        # 定义全连接层\n",[118,31014,31015,31017,31020,31022,31025,31027,31029,31031],{"class":120,"line":1758},[118,31016,30838],{"class":177},[118,31018,31019],{"class":128},".f5",[118,31021,174],{"class":124},[118,31023,31024],{"class":128},"nn.Linear(",[118,31026,3991],{"class":177},[118,31028,506],{"class":128},[118,31030,945],{"class":177},[118,31032,135],{"class":128},[118,31034,31035,31037,31040,31042,31044,31046,31048,31050],{"class":120,"line":1763},[118,31036,30838],{"class":177},[118,31038,31039],{"class":128},".f6",[118,31041,174],{"class":124},[118,31043,31024],{"class":128},[118,31045,945],{"class":177},[118,31047,506],{"class":128},[118,31049,839],{"class":177},[118,31051,135],{"class":128},[118,31053,31054,31056,31059,31061,31063,31065,31067,31069],{"class":120,"line":1768},[118,31055,30838],{"class":177},[118,31057,31058],{"class":128},".f7",[118,31060,174],{"class":124},[118,31062,31024],{"class":128},[118,31064,839],{"class":177},[118,31066,506],{"class":128},[118,31068,574],{"class":177},[118,31070,135],{"class":128},[118,31072,31073],{"class":120,"line":1782},[118,31074,2404],{"emptyLinePlaceholder":45},[118,31076,31077],{"class":120,"line":1787},[118,31078,31079],{"class":187},"    # 写工具->写前向传播\n",[118,31081,31082,31084,31087],{"class":120,"line":2581},[118,31083,30794],{"class":124},[118,31085,31086],{"class":1967}," forward",[118,31088,31089],{"class":128},"(self,x):\n",[118,31091,31092,31095,31097,31099,31102,31104],{"class":120,"line":2595},[118,31093,31094],{"class":128},"        x",[118,31096,174],{"class":124},[118,31098,30816],{"class":177},[118,31100,31101],{"class":128},".sig(",[118,31103,30816],{"class":177},[118,31105,31106],{"class":128},".c1(x))\n",[118,31108,31109,31111,31113,31115],{"class":120,"line":2603},[118,31110,31094],{"class":128},[118,31112,174],{"class":124},[118,31114,30816],{"class":177},[118,31116,31117],{"class":128},".s2(x)\n",[118,31119,31120,31122,31124,31126,31128,31130],{"class":120,"line":2608},[118,31121,31094],{"class":128},[118,31123,174],{"class":124},[118,31125,30816],{"class":177},[118,31127,31101],{"class":128},[118,31129,30816],{"class":177},[118,31131,31132],{"class":128},".c3(x))\n",[118,31134,31135,31137,31139,31141],{"class":120,"line":2614},[118,31136,31094],{"class":128},[118,31138,174],{"class":124},[118,31140,30816],{"class":177},[118,31142,31143],{"class":128},".s4(x)\n",[118,31145,31146,31148,31150,31152],{"class":120,"line":2620},[118,31147,31094],{"class":128},[118,31149,174],{"class":124},[118,31151,30816],{"class":177},[118,31153,31154],{"class":128},".flatten(x)\n",[118,31156,31157,31159,31161,31163,31165,31167],{"class":120,"line":2625},[118,31158,31094],{"class":128},[118,31160,174],{"class":124},[118,31162,30816],{"class":177},[118,31164,31101],{"class":128},[118,31166,30816],{"class":177},[118,31168,31169],{"class":128},".f5(x))\n",[118,31171,31172,31174,31176,31178,31180,31182],{"class":120,"line":7953},[118,31173,31094],{"class":128},[118,31175,174],{"class":124},[118,31177,30816],{"class":177},[118,31179,31101],{"class":128},[118,31181,30816],{"class":177},[118,31183,31184],{"class":128},".f6(x))\n",[118,31186,31187,31189,31191,31193],{"class":120,"line":7977},[118,31188,31094],{"class":128},[118,31190,174],{"class":124},[118,31192,30816],{"class":177},[118,31194,31195],{"class":128},".f7(x)\n",[118,31197,31198,31200],{"class":120,"line":7982},[118,31199,14757],{"class":124},[118,31201,31202],{"class":128}," x\n",[118,31204,31205],{"class":120,"line":7988},[118,31206,2404],{"emptyLinePlaceholder":45},[118,31208,31209,31211,31214,31216,31219],{"class":120,"line":8015},[118,31210,1535],{"class":124},[118,31212,31213],{"class":177}," __name__",[118,31215,2953],{"class":124},[118,31217,31218],{"class":233},"\"__main__\"",[118,31220,3743],{"class":128},[118,31222,31223],{"class":120,"line":8020},[118,31224,31225],{"class":187},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[118,31227,31228,31231,31233,31235,31238,31240,31243,31245,31247],{"class":120,"line":8026},[118,31229,31230],{"class":128},"    device",[118,31232,174],{"class":124},[118,31234,30444],{"class":128},[118,31236,31237],{"class":233},"\"cuda\"",[118,31239,1708],{"class":124},[118,31241,31242],{"class":128}," torch.cuda.is_available() ",[118,31244,1705],{"class":124},[118,31246,30469],{"class":233},[118,31248,135],{"class":128},[118,31250,31251],{"class":120,"line":8038},[118,31252,31253],{"class":187},"    # 如果就是想指定用cpu用下方代码:\n",[118,31255,31256],{"class":120,"line":8050},[118,31257,31258],{"class":187},"    # device=\"cpu\"\n",[118,31260,31261],{"class":120,"line":8062},[118,31262,31263],{"class":187},"    # print(device)\n",[118,31265,31266],{"class":120,"line":9721},[118,31267,2404],{"emptyLinePlaceholder":45},[118,31269,31270],{"class":120,"line":9746},[118,31271,31272],{"class":187},"    # 实例化模型\n",[118,31274,31275],{"class":120,"line":9769},[118,31276,31277],{"class":187},"    # 将模型放到设备中去运行\n",[118,31279,31280,31283,31285],{"class":120,"line":9793},[118,31281,31282],{"class":128},"    model",[118,31284,174],{"class":124},[118,31286,31287],{"class":128},"LeNet().to(device)\n",[118,31289,31290,31293,31296,31298,31300,31302,31304,31306],{"class":120,"line":9798},[118,31291,31292],{"class":177},"    print",[118,31294,31295],{"class":128},"(summary(model,(",[118,31297,346],{"class":177},[118,31299,506],{"class":128},[118,31301,1029],{"class":177},[118,31303,506],{"class":128},[118,31305,1029],{"class":177},[118,31307,31308],{"class":128},")))\n",[15,31310,31311],{},[1466,31312],{"alt":39,"src":31313},"\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",[15,31315,31316],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[72,31318,31319],{"start":40},[75,31320,31321],{},"训练",[15,31323,31324],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[15,31326,31327],{},"在训练之前可以将数据展示看一下",[109,31329,31331],{"className":30371,"code":31330,"language":30373,"meta":39,"style":39},"# 建立画图的函数，用于展示数据\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",[115,31332,31333,31338,31343,31355,31367,31380,31385,31397,31402,31414,31419,31431,31435,31439,31460,31472,31477,31498,31509,31513,31518,31536,31547,31552,31563,31568,31579,31583,31588,31603,31616,31621,31626,31639,31652,31665,31670,31674,31679,31699,31716,31736,31749,31762,31772,31787],{"__ignoreMap":39},[118,31334,31335],{"class":120,"line":121},[118,31336,31337],{"class":187},"# 建立画图的函数，用于展示数据\n",[118,31339,31340],{"class":120,"line":40},[118,31341,31342],{"class":187},"# torchvision中包含很多内置的数据集\n",[118,31344,31345,31347,31350,31352],{"class":120,"line":1183},[118,31346,30730],{"class":124},[118,31348,31349],{"class":128}," sklearn.externals.array_api_compat.torch ",[118,31351,30385],{"class":124},[118,31353,31354],{"class":128}," squeeze\n",[118,31356,31357,31359,31362,31364],{"class":120,"line":1198},[118,31358,30730],{"class":124},[118,31360,31361],{"class":128}," torchvision.datasets ",[118,31363,30385],{"class":124},[118,31365,31366],{"class":128}," FashionMNIST\n",[118,31368,31369,31371,31374,31377],{"class":120,"line":1204},[118,31370,30385],{"class":124},[118,31372,31373],{"class":128}," numpy ",[118,31375,31376],{"class":124},"as",[118,31378,31379],{"class":128}," np\n",[118,31381,31382],{"class":120,"line":1218},[118,31383,31384],{"class":187},"# 引入处理数据集的包\n",[118,31386,31387,31389,31392,31394],{"class":120,"line":1224},[118,31388,30730],{"class":124},[118,31390,31391],{"class":128}," torchvision ",[118,31393,30385],{"class":124},[118,31395,31396],{"class":128}," transforms\n",[118,31398,31399],{"class":120,"line":1315},[118,31400,31401],{"class":187},"# 从torch库中引入数据处理的包\n",[118,31403,31404,31406,31409,31411],{"class":120,"line":1321},[118,31405,30385],{"class":124},[118,31407,31408],{"class":128}," torch.utils.data ",[118,31410,31376],{"class":124},[118,31412,31413],{"class":128}," Data\n",[118,31415,31416],{"class":120,"line":1333},[118,31417,31418],{"class":187},"# 导入画图的库\n",[118,31420,31421,31423,31426,31428],{"class":120,"line":1616},[118,31422,30385],{"class":124},[118,31424,31425],{"class":128}," matplotlib.pyplot ",[118,31427,31376],{"class":124},[118,31429,31430],{"class":128}," plt\n",[118,31432,31433],{"class":120,"line":1621},[118,31434,2404],{"emptyLinePlaceholder":45},[118,31436,31437],{"class":120,"line":1627},[118,31438,2404],{"emptyLinePlaceholder":45},[118,31440,31441,31444,31446,31449,31452,31454,31457],{"class":120,"line":1632},[118,31442,31443],{"class":128},"train_data",[118,31445,174],{"class":124},[118,31447,31448],{"class":128},"FashionMNIST(",[118,31450,31451],{"class":5221},"root",[118,31453,174],{"class":124},[118,31455,31456],{"class":233},"'.\u002Fdata'",[118,31458,31459],{"class":128},",\n",[118,31461,31462,31465,31467,31470],{"class":120,"line":1646},[118,31463,31464],{"class":5221},"                        train",[118,31466,174],{"class":124},[118,31468,31469],{"class":177},"True",[118,31471,31459],{"class":128},[118,31473,31474],{"class":120,"line":1651},[118,31475,31476],{"class":187},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[118,31478,31479,31482,31484,31487,31490,31492,31495],{"class":120,"line":1657},[118,31480,31481],{"class":5221},"                        transform",[118,31483,174],{"class":124},[118,31485,31486],{"class":128},"transforms.Compose([transforms.Resize(",[118,31488,31489],{"class":5221},"size",[118,31491,174],{"class":124},[118,31493,31494],{"class":177},"224",[118,31496,31497],{"class":128},"),transforms.ToTensor()]),\n",[118,31499,31500,31503,31505,31507],{"class":120,"line":1678},[118,31501,31502],{"class":5221},"                        download",[118,31504,174],{"class":124},[118,31506,31469],{"class":177},[118,31508,135],{"class":128},[118,31510,31511],{"class":120,"line":1683},[118,31512,2404],{"emptyLinePlaceholder":45},[118,31514,31515],{"class":120,"line":1697},[118,31516,31517],{"class":187},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[118,31519,31520,31523,31525,31528,31531,31533],{"class":120,"line":1702},[118,31521,31522],{"class":128},"train_loader",[118,31524,174],{"class":124},[118,31526,31527],{"class":128},"Data.DataLoader(",[118,31529,31530],{"class":5221},"dataset",[118,31532,174],{"class":124},[118,31534,31535],{"class":128},"train_data,\n",[118,31537,31538,31541,31543,31545],{"class":120,"line":1731},[118,31539,31540],{"class":5221},"                             batch_size",[118,31542,174],{"class":124},[118,31544,332],{"class":177},[118,31546,31459],{"class":128},[118,31548,31549],{"class":120,"line":1736},[118,31550,31551],{"class":187},"                             # 数据是否打乱\n",[118,31553,31554,31557,31559,31561],{"class":120,"line":1753},[118,31555,31556],{"class":5221},"                             shuffle",[118,31558,174],{"class":124},[118,31560,31469],{"class":177},[118,31562,31459],{"class":128},[118,31564,31565],{"class":120,"line":1758},[118,31566,31567],{"class":187},"                             # 规定加载数据的进程\n",[118,31569,31570,31573,31575,31577],{"class":120,"line":1763},[118,31571,31572],{"class":5221},"                             num_workers",[118,31574,174],{"class":124},[118,31576,320],{"class":177},[118,31578,135],{"class":128},[118,31580,31581],{"class":120,"line":1768},[118,31582,2404],{"emptyLinePlaceholder":45},[118,31584,31585],{"class":120,"line":1782},[118,31586,31587],{"class":187},"# 获得一个batch的数据\n",[118,31589,31590,31592,31595,31597,31600],{"class":120,"line":1787},[118,31591,3029],{"class":124},[118,31593,31594],{"class":128}," step,(b_x,b_y) ",[118,31596,26036],{"class":124},[118,31598,31599],{"class":177}," enumerate",[118,31601,31602],{"class":128},"(train_loader):\n",[118,31604,31605,31607,31610,31612,31614],{"class":120,"line":2581},[118,31606,3105],{"class":124},[118,31608,31609],{"class":128}," step ",[118,31611,1088],{"class":124},[118,31613,4097],{"class":177},[118,31615,3743],{"class":128},[118,31617,31618],{"class":120,"line":2595},[118,31619,31620],{"class":124},"        break\n",[118,31622,31623],{"class":120,"line":2603},[118,31624,31625],{"class":187},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[118,31627,31628,31631,31633,31636],{"class":120,"line":2608},[118,31629,31630],{"class":128},"batch_x",[118,31632,174],{"class":124},[118,31634,31635],{"class":128},"b_x.squeeze().numpy()  ",[118,31637,31638],{"class":187},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[118,31640,31641,31644,31646,31649],{"class":120,"line":2614},[118,31642,31643],{"class":128},"batch_y",[118,31645,174],{"class":124},[118,31647,31648],{"class":128},"b_y.numpy()   ",[118,31650,31651],{"class":187},"#将张量转换成功numpy数组\n",[118,31653,31654,31657,31659,31662],{"class":120,"line":2620},[118,31655,31656],{"class":128},"class_label",[118,31658,174],{"class":124},[118,31660,31661],{"class":128},"train_data.classes  ",[118,31663,31664],{"class":187},"#训练集标签\n",[118,31666,31667],{"class":120,"line":2625},[118,31668,31669],{"class":187},"# print(class_label)\n",[118,31671,31672],{"class":120,"line":7953},[118,31673,2404],{"emptyLinePlaceholder":45},[118,31675,31676],{"class":120,"line":7977},[118,31677,31678],{"class":187},"# 可视化一个batch的图像\n",[118,31680,31681,31684,31687,31689,31691,31693,31695,31697],{"class":120,"line":7982},[118,31682,31683],{"class":128},"plt.figure(",[118,31685,31686],{"class":5221},"figsize",[118,31688,174],{"class":124},[118,31690,129],{"class":128},[118,31692,626],{"class":177},[118,31694,506],{"class":128},[118,31696,447],{"class":177},[118,31698,30490],{"class":128},[118,31700,31701,31703,31706,31708,31711,31713],{"class":120,"line":7988},[118,31702,3029],{"class":124},[118,31704,31705],{"class":128}," ii ",[118,31707,26036],{"class":124},[118,31709,31710],{"class":128}," np.arange(",[118,31712,7363],{"class":177},[118,31714,31715],{"class":128},"(batch_y)):\n",[118,31717,31718,31721,31723,31725,31727,31730,31732,31734],{"class":120,"line":8015},[118,31719,31720],{"class":128},"    plt.subplot(",[118,31722,421],{"class":177},[118,31724,506],{"class":128},[118,31726,729],{"class":177},[118,31728,31729],{"class":128},",ii ",[118,31731,609],{"class":124},[118,31733,25123],{"class":177},[118,31735,135],{"class":128},[118,31737,31738,31741,31744,31746],{"class":120,"line":8020},[118,31739,31740],{"class":128},"    plt.imshow(batch_x[ii,:,:],",[118,31742,31743],{"class":5221},"cmap",[118,31745,174],{"class":124},[118,31747,31748],{"class":128},"plt.cm.gray)\n",[118,31750,31751,31754,31756,31758,31760],{"class":120,"line":8026},[118,31752,31753],{"class":128},"    plt.title(class_label[batch_y[ii]],",[118,31755,31489],{"class":5221},[118,31757,174],{"class":124},[118,31759,574],{"class":177},[118,31761,135],{"class":128},[118,31763,31764,31767,31770],{"class":120,"line":8038},[118,31765,31766],{"class":128},"    plt.axis(",[118,31768,31769],{"class":233},"\"off\"",[118,31771,135],{"class":128},[118,31773,31774,31777,31780,31782,31785],{"class":120,"line":8050},[118,31775,31776],{"class":128},"    plt.subplots_adjust(",[118,31778,31779],{"class":5221},"wspace",[118,31781,174],{"class":124},[118,31783,31784],{"class":177},"0.05",[118,31786,135],{"class":128},[118,31788,31789],{"class":120,"line":8062},[118,31790,31791],{"class":128},"plt.show()\n",[15,31793,31794],{},"用matplotlib进行展示的过程可以后续再补",[15,31796,31797],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[15,31799,31800],{},"训练次数就是按照批次过整个训练集数据的次数",[15,31802,31803],{},"模型训练：",[109,31805,31807],{"className":30371,"code":31806,"language":30373,"meta":39,"style":39},"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",[115,31808,31809,31816,31823,31827,31839,31845,31856,31866,31876,31886,31896,31901,31913,31923,31927,31931,31936,31947,31960,31971,31988,31999,32038,32054,32066,32077,32082,32093,32109,32120,32131,32142,32149,32153,32158,32163,32167,32172,32182,32203,32207,32211,32216,32221,32226,32246,32250,32255,32265,32269,32274,32283,32288,32293,32298,32308,32312,32316,32321,32326,32336,32341,32351,32356,32365,32370,32379,32384,32393,32397,32402,32412,32416,32420,32425,32440,32468,32483,32487,32492,32497,32506,32511,32520,32525,32534,32539,32548,32553,32562,32567,32576,32581,32594,32599,32609,32614,32624,32630,32636,32642,32648,32659,32665,32685,32691,32702,32708,32714,32720,32726,32732,32738,32744,32764,32770,32786,32792,32806,32812,32827,32833,32842,32848,32857,32863,32869,32878,32884,32895,32901,32920,32926,32937,32943,32963,32979,32985,32999,33005,33011,33022,33028,33034,33044,33050,33061,33067,33077,33082,33088,33137,33184,33189,33195,33214,33220,33240,33246,33252,33262,33267,33273,33289,33334,33340,33346,33352,33363,33369,33375,33381,33399,33413,33422,33431,33440,33449,33455,33461,33469,33474,33480,33491,33497,33517,33523,33529,33535,33552,33558,33564,33570,33576,33582,33609,33633,33639,33645,33651,33662,33673,33679,33696,33719,33742,33748,33753,33762,33772,33778,33783,33789,33802,33808,33819,33830,33849],{"__ignoreMap":39},[118,31810,31811,31813],{"class":120,"line":121},[118,31812,30385],{"class":124},[118,31814,31815],{"class":128}," copy\n",[118,31817,31818,31820],{"class":120,"line":40},[118,31819,30385],{"class":124},[118,31821,31822],{"class":128}," time\n",[118,31824,31825],{"class":120,"line":1183},[118,31826,2404],{"emptyLinePlaceholder":45},[118,31828,31829,31831,31834,31836],{"class":120,"line":1198},[118,31830,30385],{"class":124},[118,31832,31833],{"class":128}," pandas ",[118,31835,31376],{"class":124},[118,31837,31838],{"class":128}," pd\n",[118,31840,31841,31843],{"class":120,"line":1204},[118,31842,30385],{"class":124},[118,31844,30388],{"class":128},[118,31846,31847,31849,31851,31853],{"class":120,"line":1218},[118,31848,30730],{"class":124},[118,31850,31408],{"class":128},[118,31852,30385],{"class":124},[118,31854,31855],{"class":128}," Dataset\n",[118,31857,31858,31860,31862,31864],{"class":120,"line":1224},[118,31859,30730],{"class":124},[118,31861,31361],{"class":128},[118,31863,30385],{"class":124},[118,31865,31366],{"class":128},[118,31867,31868,31870,31872,31874],{"class":120,"line":1315},[118,31869,30730],{"class":124},[118,31871,31391],{"class":128},[118,31873,30385],{"class":124},[118,31875,31396],{"class":128},[118,31877,31878,31880,31882,31884],{"class":120,"line":1321},[118,31879,30385],{"class":124},[118,31881,31408],{"class":128},[118,31883,31376],{"class":124},[118,31885,31413],{"class":128},[118,31887,31888,31890,31892,31894],{"class":120,"line":1333},[118,31889,30385],{"class":124},[118,31891,31425],{"class":128},[118,31893,31376],{"class":124},[118,31895,31430],{"class":128},[118,31897,31898],{"class":120,"line":1616},[118,31899,31900],{"class":187},"# 导入模型\n",[118,31902,31903,31905,31908,31910],{"class":120,"line":1621},[118,31904,30730],{"class":124},[118,31906,31907],{"class":128}," model ",[118,31909,30385],{"class":124},[118,31911,31912],{"class":128}," LeNet\n",[118,31914,31915,31917,31919,31921],{"class":120,"line":1627},[118,31916,30730],{"class":124},[118,31918,30733],{"class":128},[118,31920,30385],{"class":124},[118,31922,30738],{"class":128},[118,31924,31925],{"class":120,"line":1632},[118,31926,2404],{"emptyLinePlaceholder":45},[118,31928,31929],{"class":120,"line":1646},[118,31930,2404],{"emptyLinePlaceholder":45},[118,31932,31933],{"class":120,"line":1651},[118,31934,31935],{"class":187},"# 处理训练集与验证集函数--->划分数据集\n",[118,31937,31938,31941,31944],{"class":120,"line":1657},[118,31939,31940],{"class":124},"def",[118,31942,31943],{"class":1967}," train_val_data_process",[118,31945,31946],{"class":128},"():\n",[118,31948,31949,31952,31954,31956,31958],{"class":120,"line":1678},[118,31950,31951],{"class":128},"    train_data",[118,31953,174],{"class":124},[118,31955,31448],{"class":128},[118,31957,31456],{"class":233},[118,31959,31459],{"class":128},[118,31961,31962,31965,31967,31969],{"class":120,"line":1683},[118,31963,31964],{"class":5221},"                            train",[118,31966,174],{"class":124},[118,31968,31469],{"class":177},[118,31970,31459],{"class":128},[118,31972,31973,31976,31978,31980,31982,31984,31986],{"class":120,"line":1697},[118,31974,31975],{"class":5221},"                            transform",[118,31977,174],{"class":124},[118,31979,31486],{"class":128},[118,31981,31489],{"class":5221},[118,31983,174],{"class":124},[118,31985,1029],{"class":177},[118,31987,31497],{"class":128},[118,31989,31990,31993,31995,31997],{"class":120,"line":1702},[118,31991,31992],{"class":5221},"                            download",[118,31994,174],{"class":124},[118,31996,31469],{"class":177},[118,31998,135],{"class":128},[118,32000,32001,32004,32006,32009,32012,32014,32017,32019,32021,32024,32026,32028,32031,32033,32035],{"class":120,"line":1731},[118,32002,32003],{"class":128},"    train_data,val_data",[118,32005,174],{"class":124},[118,32007,32008],{"class":128},"Data.random_split(train_data,[",[118,32010,32011],{"class":177},"round",[118,32013,129],{"class":128},[118,32015,32016],{"class":177},"0.8",[118,32018,583],{"class":124},[118,32020,7363],{"class":177},[118,32022,32023],{"class":128},"(train_data)),",[118,32025,32011],{"class":177},[118,32027,129],{"class":128},[118,32029,32030],{"class":177},"0.2",[118,32032,583],{"class":124},[118,32034,7363],{"class":177},[118,32036,32037],{"class":128},"(train_data))])\n",[118,32039,32040,32043,32045,32048,32050,32052],{"class":120,"line":1736},[118,32041,32042],{"class":128},"    train_dataloader ",[118,32044,174],{"class":124},[118,32046,32047],{"class":128}," Data.DataLoader(",[118,32049,31530],{"class":5221},[118,32051,174],{"class":124},[118,32053,31535],{"class":128},[118,32055,32056,32059,32061,32064],{"class":120,"line":1753},[118,32057,32058],{"class":5221},"                                       batch_size",[118,32060,174],{"class":124},[118,32062,32063],{"class":177},"128",[118,32065,31459],{"class":128},[118,32067,32068,32071,32073,32075],{"class":120,"line":1758},[118,32069,32070],{"class":5221},"                                       shuffle",[118,32072,174],{"class":124},[118,32074,31469],{"class":177},[118,32076,31459],{"class":128},[118,32078,32079],{"class":120,"line":1763},[118,32080,32081],{"class":187},"                                       # 规定8个进程\n",[118,32083,32084,32087,32089,32091],{"class":120,"line":1768},[118,32085,32086],{"class":5221},"                                       num_workers",[118,32088,174],{"class":124},[118,32090,523],{"class":177},[118,32092,135],{"class":128},[118,32094,32095,32098,32100,32102,32104,32106],{"class":120,"line":1782},[118,32096,32097],{"class":128},"    val_dataloader",[118,32099,174],{"class":124},[118,32101,31527],{"class":128},[118,32103,31530],{"class":5221},[118,32105,174],{"class":124},[118,32107,32108],{"class":128},"val_data,\n",[118,32110,32111,32114,32116,32118],{"class":120,"line":1787},[118,32112,32113],{"class":5221},"                                   batch_size",[118,32115,174],{"class":124},[118,32117,32063],{"class":177},[118,32119,31459],{"class":128},[118,32121,32122,32125,32127,32129],{"class":120,"line":2581},[118,32123,32124],{"class":5221},"                                   shuffle",[118,32126,174],{"class":124},[118,32128,31469],{"class":177},[118,32130,31459],{"class":128},[118,32132,32133,32136,32138,32140],{"class":120,"line":2595},[118,32134,32135],{"class":5221},"                                   num_workers",[118,32137,174],{"class":124},[118,32139,523],{"class":177},[118,32141,135],{"class":128},[118,32143,32144,32146],{"class":120,"line":2603},[118,32145,4094],{"class":124},[118,32147,32148],{"class":128}," train_dataloader,val_dataloader\n",[118,32150,32151],{"class":120,"line":2608},[118,32152,2404],{"emptyLinePlaceholder":45},[118,32154,32155],{"class":120,"line":2614},[118,32156,32157],{"class":187},"# 验证是否出错\n",[118,32159,32160],{"class":120,"line":2620},[118,32161,32162],{"class":187},"# train_val_data_process()\n",[118,32164,32165],{"class":120,"line":2625},[118,32166,2404],{"emptyLinePlaceholder":45},[118,32168,32169],{"class":120,"line":7953},[118,32170,32171],{"class":187},"# 定义模型训练函数\n",[118,32173,32174,32176,32179],{"class":120,"line":7977},[118,32175,31940],{"class":124},[118,32177,32178],{"class":1967}," train_model_process",[118,32180,32181],{"class":128},"(model,train_dataloader,val_dataloader,num_epochs):\n",[118,32183,32184,32186,32188,32190,32192,32194,32196,32198,32201],{"class":120,"line":7982},[118,32185,31230],{"class":128},[118,32187,174],{"class":124},[118,32189,30444],{"class":128},[118,32191,31237],{"class":233},[118,32193,1708],{"class":124},[118,32195,31242],{"class":128},[118,32197,1705],{"class":124},[118,32199,32200],{"class":233}," 'cpu'",[118,32202,135],{"class":128},[118,32204,32205],{"class":120,"line":7988},[118,32206,2404],{"emptyLinePlaceholder":45},[118,32208,32209],{"class":120,"line":8015},[118,32210,2404],{"emptyLinePlaceholder":45},[118,32212,32213],{"class":120,"line":8020},[118,32214,32215],{"class":187},"    # 定义优化器\n",[118,32217,32218],{"class":120,"line":8026},[118,32219,32220],{"class":187},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[118,32222,32223],{"class":120,"line":8038},[118,32224,32225],{"class":187},"    # lr为学习率\n",[118,32227,32228,32231,32233,32236,32239,32241,32244],{"class":120,"line":8050},[118,32229,32230],{"class":128},"    optimizer",[118,32232,174],{"class":124},[118,32234,32235],{"class":128},"torch.optim.Adam(model.parameters(),",[118,32237,32238],{"class":5221},"lr",[118,32240,174],{"class":124},[118,32242,32243],{"class":177},"0.001",[118,32245,135],{"class":128},[118,32247,32248],{"class":120,"line":8062},[118,32249,2404],{"emptyLinePlaceholder":45},[118,32251,32252],{"class":120,"line":9721},[118,32253,32254],{"class":187},"    # 定义损失函数使用交叉熵损失函数\n",[118,32256,32257,32260,32262],{"class":120,"line":9746},[118,32258,32259],{"class":128},"    criterion",[118,32261,174],{"class":124},[118,32263,32264],{"class":128},"nn.CrossEntropyLoss()\n",[118,32266,32267],{"class":120,"line":9769},[118,32268,2404],{"emptyLinePlaceholder":45},[118,32270,32271],{"class":120,"line":9793},[118,32272,32273],{"class":187},"    # 将模型放到GPU中进行训练\n",[118,32275,32276,32278,32280],{"class":120,"line":9798},[118,32277,31282],{"class":128},[118,32279,174],{"class":124},[118,32281,32282],{"class":128},"model.to(device)\n",[118,32284,32285],{"class":120,"line":9803},[118,32286,32287],{"class":187},"    # 复制当前模型的参数\n",[118,32289,32290],{"class":120,"line":9808},[118,32291,32292],{"class":187},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[118,32294,32295],{"class":120,"line":9817},[118,32296,32297],{"class":187},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[118,32299,32300,32303,32305],{"class":120,"line":9822},[118,32301,32302],{"class":128},"    best_model_wts",[118,32304,174],{"class":124},[118,32306,32307],{"class":128},"copy.deepcopy(model.state_dict())\n",[118,32309,32310],{"class":120,"line":9828},[118,32311,2404],{"emptyLinePlaceholder":45},[118,32313,32314],{"class":120,"line":9849},[118,32315,2404],{"emptyLinePlaceholder":45},[118,32317,32318],{"class":120,"line":9855},[118,32319,32320],{"class":187},"    # 初始化参数\n",[118,32322,32323],{"class":120,"line":9869},[118,32324,32325],{"class":187},"    # 最高准确度\n",[118,32327,32328,32331,32333],{"class":120,"line":9875},[118,32329,32330],{"class":128},"    best_acc",[118,32332,174],{"class":124},[118,32334,32335],{"class":177},"0.0\n",[118,32337,32338],{"class":120,"line":9902},[118,32339,32340],{"class":187},"    # 训练集损失列表\n",[118,32342,32343,32346,32348],{"class":120,"line":9911},[118,32344,32345],{"class":128},"    train_loss_all",[118,32347,174],{"class":124},[118,32349,32350],{"class":128},"[]\n",[118,32352,32353],{"class":120,"line":9917},[118,32354,32355],{"class":187},"    # 验证集函数列表\n",[118,32357,32358,32361,32363],{"class":120,"line":9925},[118,32359,32360],{"class":128},"    val_loss_all",[118,32362,174],{"class":124},[118,32364,32350],{"class":128},[118,32366,32367],{"class":120,"line":9930},[118,32368,32369],{"class":187},"    # 训练集准确度列表\n",[118,32371,32372,32375,32377],{"class":120,"line":16609},[118,32373,32374],{"class":128},"    train_acc_all",[118,32376,174],{"class":124},[118,32378,32350],{"class":128},[118,32380,32381],{"class":120,"line":16615},[118,32382,32383],{"class":187},"    # 验证集准确度列表\n",[118,32385,32386,32389,32391],{"class":120,"line":16638},[118,32387,32388],{"class":128},"    val_acc_all",[118,32390,174],{"class":124},[118,32392,32350],{"class":128},[118,32394,32395],{"class":120,"line":16644},[118,32396,2404],{"emptyLinePlaceholder":45},[118,32398,32399],{"class":120,"line":16667},[118,32400,32401],{"class":187},"    # 保存当前时间--->方便看每轮训练的时间\n",[118,32403,32404,32407,32409],{"class":120,"line":16681},[118,32405,32406],{"class":128},"    since",[118,32408,174],{"class":124},[118,32410,32411],{"class":128},"time.time()\n",[118,32413,32414],{"class":120,"line":16701},[118,32415,2404],{"emptyLinePlaceholder":45},[118,32417,32418],{"class":120,"line":16707},[118,32419,2404],{"emptyLinePlaceholder":45},[118,32421,32422],{"class":120,"line":16718},[118,32423,32424],{"class":187},"    # 准备工作完成--->开始训练模型\n",[118,32426,32427,32429,32432,32434,32437],{"class":120,"line":16741},[118,32428,3205],{"class":124},[118,32430,32431],{"class":128}," epoch ",[118,32433,26036],{"class":124},[118,32435,32436],{"class":177}," range",[118,32438,32439],{"class":128},"(num_epochs):\n",[118,32441,32442,32445,32447,32450,32453,32455,32457,32459,32462,32464,32466],{"class":120,"line":16763},[118,32443,32444],{"class":177},"        print",[118,32446,129],{"class":128},[118,32448,32449],{"class":233},"\"Epoch ",[118,32451,32452],{"class":177},"{}",[118,32454,712],{"class":233},[118,32456,32452],{"class":177},[118,32458,379],{"class":233},[118,32460,32461],{"class":128},".format(epoch,num_epochs",[118,32463,660],{"class":124},[118,32465,346],{"class":177},[118,32467,30490],{"class":128},[118,32469,32470,32472,32474,32477,32479,32481],{"class":120,"line":16768},[118,32471,32444],{"class":177},[118,32473,129],{"class":128},[118,32475,32476],{"class":233},"\"-\"",[118,32478,583],{"class":124},[118,32480,574],{"class":177},[118,32482,135],{"class":128},[118,32484,32485],{"class":120,"line":16774},[118,32486,2404],{"emptyLinePlaceholder":45},[118,32488,32489],{"class":120,"line":16788},[118,32490,32491],{"class":187},"        # 初始化参数\n",[118,32493,32494],{"class":120,"line":16801},[118,32495,32496],{"class":187},"        # 训练集损失函数\n",[118,32498,32499,32502,32504],{"class":120,"line":16806},[118,32500,32501],{"class":128},"        train_loss",[118,32503,174],{"class":124},[118,32505,32335],{"class":177},[118,32507,32508],{"class":120,"line":16820},[118,32509,32510],{"class":187},"        # 训练集准确度\n",[118,32512,32513,32516,32518],{"class":120,"line":16825},[118,32514,32515],{"class":128},"        train_corrects",[118,32517,174],{"class":124},[118,32519,3089],{"class":177},[118,32521,32522],{"class":120,"line":16831},[118,32523,32524],{"class":187},"        # 验证集损失函数\n",[118,32526,32527,32530,32532],{"class":120,"line":16836},[118,32528,32529],{"class":128},"        val_loss",[118,32531,174],{"class":124},[118,32533,32335],{"class":177},[118,32535,32536],{"class":120,"line":16850},[118,32537,32538],{"class":187},"        # 验证集准确度\n",[118,32540,32541,32544,32546],{"class":120,"line":16855},[118,32542,32543],{"class":128},"        val_corrects",[118,32545,174],{"class":124},[118,32547,3089],{"class":177},[118,32549,32550],{"class":120,"line":16860},[118,32551,32552],{"class":187},"        # 训练集样本数量\n",[118,32554,32555,32558,32560],{"class":120,"line":16874},[118,32556,32557],{"class":128},"        train_num",[118,32559,174],{"class":124},[118,32561,3089],{"class":177},[118,32563,32564],{"class":120,"line":16886},[118,32565,32566],{"class":187},"        # 验证集样本数量\n",[118,32568,32569,32572,32574],{"class":120,"line":16891},[118,32570,32571],{"class":128},"        val_num",[118,32573,174],{"class":124},[118,32575,3089],{"class":177},[118,32577,32578],{"class":120,"line":16904},[118,32579,32580],{"class":187},"        # 将数据放到设备,并开始训练\n",[118,32582,32583,32585,32587,32589,32591],{"class":120,"line":16909},[118,32584,3407],{"class":124},[118,32586,31594],{"class":128},[118,32588,26036],{"class":124},[118,32590,31599],{"class":177},[118,32592,32593],{"class":128},"(train_dataloader):\n",[118,32595,32596],{"class":120,"line":16914},[118,32597,32598],{"class":187},"            # 将特征放入到训练设备\n",[118,32600,32601,32604,32606],{"class":120,"line":16919},[118,32602,32603],{"class":128},"            b_x",[118,32605,174],{"class":124},[118,32607,32608],{"class":128},"b_x.to(device)\n",[118,32610,32611],{"class":120,"line":16932},[118,32612,32613],{"class":187},"            # 将标签放入到训练设备当中\n",[118,32615,32616,32619,32621],{"class":120,"line":16937},[118,32617,32618],{"class":128},"            b_y",[118,32620,174],{"class":124},[118,32622,32623],{"class":128},"b_y.to(device)\n",[118,32625,32627],{"class":120,"line":32626},98,[118,32628,32629],{"class":187},"            # 设置模型为训练模式\n",[118,32631,32633],{"class":120,"line":32632},99,[118,32634,32635],{"class":128},"            model.train()\n",[118,32637,32639],{"class":120,"line":32638},100,[118,32640,32641],{"class":187},"            # 将数据放到模型当中,开始前向传播\n",[118,32643,32645],{"class":120,"line":32644},101,[118,32646,32647],{"class":187},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[118,32649,32651,32654,32656],{"class":120,"line":32650},102,[118,32652,32653],{"class":128},"            output",[118,32655,174],{"class":124},[118,32657,32658],{"class":128},"model(b_x)\n",[118,32660,32662],{"class":120,"line":32661},103,[118,32663,32664],{"class":187},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[118,32666,32668,32671,32673,32676,32679,32681,32683],{"class":120,"line":32667},104,[118,32669,32670],{"class":128},"            pre_lab",[118,32672,174],{"class":124},[118,32674,32675],{"class":128},"torch.argmax(output,",[118,32677,32678],{"class":5221},"dim",[118,32680,174],{"class":124},[118,32682,346],{"class":177},[118,32684,135],{"class":128},[118,32686,32688],{"class":120,"line":32687},105,[118,32689,32690],{"class":187},"            # 计算每一个batch的损失函数\n",[118,32692,32694,32697,32699],{"class":120,"line":32693},106,[118,32695,32696],{"class":128},"            loss",[118,32698,174],{"class":124},[118,32700,32701],{"class":128},"criterion(output,b_y)\n",[118,32703,32705],{"class":120,"line":32704},107,[118,32706,32707],{"class":187},"            # 将梯度初始化为0\n",[118,32709,32711],{"class":120,"line":32710},108,[118,32712,32713],{"class":128},"            optimizer.zero_grad()\n",[118,32715,32717],{"class":120,"line":32716},109,[118,32718,32719],{"class":187},"            # 梯度置为0后再进行反向传播\n",[118,32721,32723],{"class":120,"line":32722},110,[118,32724,32725],{"class":128},"            loss.backward()\n",[118,32727,32729],{"class":120,"line":32728},111,[118,32730,32731],{"class":187},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[118,32733,32735],{"class":120,"line":32734},112,[118,32736,32737],{"class":128},"            optimizer.step()\n",[118,32739,32741],{"class":120,"line":32740},113,[118,32742,32743],{"class":187},"            # loss.item()指的是batch的平均损失\n",[118,32745,32747,32750,32752,32755,32757,32760,32762],{"class":120,"line":32746},114,[118,32748,32749],{"class":128},"            train_loss",[118,32751,9482],{"class":124},[118,32753,32754],{"class":128},"loss.item()",[118,32756,583],{"class":124},[118,32758,32759],{"class":128},"b_x.size(",[118,32761,320],{"class":177},[118,32763,135],{"class":128},[118,32765,32767],{"class":120,"line":32766},115,[118,32768,32769],{"class":187},"            # 计算每个批次中正确预测的数量\n",[118,32771,32773,32776,32778,32781,32783],{"class":120,"line":32772},116,[118,32774,32775],{"class":128},"            train_corrects",[118,32777,9482],{"class":124},[118,32779,32780],{"class":128},"torch.sum(pre_lab",[118,32782,2953],{"class":124},[118,32784,32785],{"class":128},"b_y.data)\n",[118,32787,32789],{"class":120,"line":32788},117,[118,32790,32791],{"class":187},"            # 计算目前为止一共处理了多少样本\n",[118,32793,32795,32798,32800,32802,32804],{"class":120,"line":32794},118,[118,32796,32797],{"class":128},"            train_num",[118,32799,9482],{"class":124},[118,32801,32759],{"class":128},[118,32803,320],{"class":177},[118,32805,135],{"class":128},[118,32807,32809],{"class":120,"line":32808},119,[118,32810,32811],{"class":187},"        # 验证数据\n",[118,32813,32815,32817,32820,32822,32824],{"class":120,"line":32814},120,[118,32816,3407],{"class":124},[118,32818,32819],{"class":128}," step ,(b_x,b_y) ",[118,32821,26036],{"class":124},[118,32823,31599],{"class":177},[118,32825,32826],{"class":128},"(val_dataloader):\n",[118,32828,32830],{"class":120,"line":32829},121,[118,32831,32832],{"class":187},"            # 将特征放到验证设备当中\n",[118,32834,32836,32838,32840],{"class":120,"line":32835},122,[118,32837,32603],{"class":128},[118,32839,174],{"class":124},[118,32841,32608],{"class":128},[118,32843,32845],{"class":120,"line":32844},123,[118,32846,32847],{"class":187},"            # 将标签放到放到训练设备当中\n",[118,32849,32851,32853,32855],{"class":120,"line":32850},124,[118,32852,32618],{"class":128},[118,32854,174],{"class":124},[118,32856,32623],{"class":128},[118,32858,32860],{"class":120,"line":32859},125,[118,32861,32862],{"class":187},"            # 开启验证模式，设置模型为评估模式\n",[118,32864,32866],{"class":120,"line":32865},126,[118,32867,32868],{"class":128},"            model.eval()\n",[118,32870,32872,32875],{"class":120,"line":32871},127,[118,32873,32874],{"class":124},"            with",[118,32876,32877],{"class":128}," torch.no_grad():\n",[118,32879,32881],{"class":120,"line":32880},128,[118,32882,32883],{"class":187},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[118,32885,32887,32890,32892],{"class":120,"line":32886},129,[118,32888,32889],{"class":128},"                output ",[118,32891,174],{"class":124},[118,32893,32894],{"class":128}," model(b_x)\n",[118,32896,32898],{"class":120,"line":32897},130,[118,32899,32900],{"class":187},"                # 查找每一行中最大值对应的下标\n",[118,32902,32904,32907,32909,32912,32914,32916,32918],{"class":120,"line":32903},131,[118,32905,32906],{"class":128},"                pre_lab ",[118,32908,174],{"class":124},[118,32910,32911],{"class":128}," torch.argmax(output, ",[118,32913,32678],{"class":5221},[118,32915,174],{"class":124},[118,32917,346],{"class":177},[118,32919,135],{"class":128},[118,32921,32923],{"class":120,"line":32922},132,[118,32924,32925],{"class":187},"                # 计算验证集上的当前 batch 损失\n",[118,32927,32929,32932,32934],{"class":120,"line":32928},133,[118,32930,32931],{"class":128},"                val_batch_loss ",[118,32933,174],{"class":124},[118,32935,32936],{"class":128}," criterion(output, b_y)\n",[118,32938,32940],{"class":120,"line":32939},134,[118,32941,32942],{"class":187},"                # 对损失函数进行累加（按样本数加权）\n",[118,32944,32946,32949,32951,32954,32956,32959,32961],{"class":120,"line":32945},135,[118,32947,32948],{"class":128},"                val_loss ",[118,32950,9482],{"class":124},[118,32952,32953],{"class":128}," val_batch_loss.item() ",[118,32955,583],{"class":124},[118,32957,32958],{"class":128}," b_x.size(",[118,32960,320],{"class":177},[118,32962,135],{"class":128},[118,32964,32966,32969,32971,32974,32976],{"class":120,"line":32965},136,[118,32967,32968],{"class":128},"                val_corrects ",[118,32970,9482],{"class":124},[118,32972,32973],{"class":128}," torch.sum(pre_lab ",[118,32975,2953],{"class":124},[118,32977,32978],{"class":128}," b_y.data)\n",[118,32980,32982],{"class":120,"line":32981},137,[118,32983,32984],{"class":187},"                # 当前用于验证的样本数量\n",[118,32986,32988,32991,32993,32995,32997],{"class":120,"line":32987},138,[118,32989,32990],{"class":128},"            val_num ",[118,32992,9482],{"class":124},[118,32994,32958],{"class":128},[118,32996,320],{"class":177},[118,32998,135],{"class":128},[118,33000,33002],{"class":120,"line":33001},139,[118,33003,33004],{"class":187},"        # 计算并保存每一次迭代的loss值和准确率\n",[118,33006,33008],{"class":120,"line":33007},140,[118,33009,33010],{"class":187},"        # 计算并保存训练集的loss值\n",[118,33012,33014,33017,33019],{"class":120,"line":33013},141,[118,33015,33016],{"class":128},"        train_loss_all.append(train_loss",[118,33018,712],{"class":124},[118,33020,33021],{"class":128},"train_num)\n",[118,33023,33025],{"class":120,"line":33024},142,[118,33026,33027],{"class":187},"        # 取双精度\n",[118,33029,33031],{"class":120,"line":33030},143,[118,33032,33033],{"class":187},"        # 计算并保存训练集的准确率\n",[118,33035,33037,33040,33042],{"class":120,"line":33036},144,[118,33038,33039],{"class":128},"        train_acc_all.append(train_corrects.double().item()",[118,33041,712],{"class":124},[118,33043,33021],{"class":128},[118,33045,33047],{"class":120,"line":33046},145,[118,33048,33049],{"class":187},"        # 计算并保存验证集的loss值\n",[118,33051,33053,33056,33058],{"class":120,"line":33052},146,[118,33054,33055],{"class":128},"        val_loss_all.append(val_loss",[118,33057,712],{"class":124},[118,33059,33060],{"class":128},"val_num)\n",[118,33062,33064],{"class":120,"line":33063},147,[118,33065,33066],{"class":187},"        # 计算并保存验证集的准确率\n",[118,33068,33070,33073,33075],{"class":120,"line":33069},148,[118,33071,33072],{"class":128},"        val_acc_all.append(val_corrects.double().item()",[118,33074,712],{"class":124},[118,33076,33060],{"class":128},[118,33078,33080],{"class":120,"line":33079},149,[118,33081,2404],{"emptyLinePlaceholder":45},[118,33083,33085],{"class":120,"line":33084},150,[118,33086,33087],{"class":187},"        # 打印训练一轮的loss值和准确率\n",[118,33089,33091,33093,33095,33097,33099,33102,33104,33107,33109,33112,33114,33116,33118,33120,33123,33125,33127,33130,33132,33134],{"class":120,"line":33090},151,[118,33092,32444],{"class":177},[118,33094,129],{"class":128},[118,33096,3596],{"class":233},[118,33098,32452],{"class":177},[118,33100,33101],{"class":233},"train loss:",[118,33103,1024],{"class":177},[118,33105,33106],{"class":124},":.4f",[118,33108,1074],{"class":177},[118,33110,33111],{"class":233}," train acc:",[118,33113,1024],{"class":177},[118,33115,33106],{"class":124},[118,33117,1074],{"class":177},[118,33119,3596],{"class":233},[118,33121,33122],{"class":128},".format(epoch,train_loss_all[",[118,33124,660],{"class":124},[118,33126,346],{"class":177},[118,33128,33129],{"class":128},"],train_acc_all[",[118,33131,660],{"class":124},[118,33133,346],{"class":177},[118,33135,33136],{"class":128},"]))\n",[118,33138,33140,33142,33144,33146,33148,33151,33153,33155,33157,33160,33162,33164,33166,33168,33171,33173,33175,33178,33180,33182],{"class":120,"line":33139},152,[118,33141,32444],{"class":177},[118,33143,129],{"class":128},[118,33145,3596],{"class":233},[118,33147,32452],{"class":177},[118,33149,33150],{"class":233},"val loss:",[118,33152,1024],{"class":177},[118,33154,33106],{"class":124},[118,33156,1074],{"class":177},[118,33158,33159],{"class":233}," val acc:",[118,33161,1024],{"class":177},[118,33163,33106],{"class":124},[118,33165,1074],{"class":177},[118,33167,3596],{"class":233},[118,33169,33170],{"class":128},".format(epoch,val_loss_all[",[118,33172,660],{"class":124},[118,33174,346],{"class":177},[118,33176,33177],{"class":128},"],val_acc_all[",[118,33179,660],{"class":124},[118,33181,346],{"class":177},[118,33183,33136],{"class":128},[118,33185,33187],{"class":120,"line":33186},153,[118,33188,2404],{"emptyLinePlaceholder":45},[118,33190,33192],{"class":120,"line":33191},154,[118,33193,33194],{"class":187},"        # 判断准确度--->保存最优模型\n",[118,33196,33198,33200,33203,33205,33207,33209,33211],{"class":120,"line":33197},155,[118,33199,2501],{"class":124},[118,33201,33202],{"class":128}," val_acc_all[",[118,33204,660],{"class":124},[118,33206,346],{"class":177},[118,33208,1068],{"class":128},[118,33210,1088],{"class":124},[118,33212,33213],{"class":128},"best_acc:\n",[118,33215,33217],{"class":120,"line":33216},156,[118,33218,33219],{"class":187},"            # 保存当前模型准确度\n",[118,33221,33223,33226,33228,33230,33233,33235,33237],{"class":120,"line":33222},157,[118,33224,33225],{"class":128},"            best_acc:",[118,33227,168],{"class":177},[118,33229,174],{"class":124},[118,33231,33232],{"class":128},"val_acc_all[",[118,33234,660],{"class":124},[118,33236,346],{"class":177},[118,33238,33239],{"class":128},"]\n",[118,33241,33243],{"class":120,"line":33242},158,[118,33244,33245],{"class":187},"            # 保存当前的准确度\n",[118,33247,33249],{"class":120,"line":33248},159,[118,33250,33251],{"class":187},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[118,33253,33255,33258,33260],{"class":120,"line":33254},160,[118,33256,33257],{"class":128},"            best_model_wts",[118,33259,174],{"class":124},[118,33261,32307],{"class":128},[118,33263,33265],{"class":120,"line":33264},161,[118,33266,2404],{"emptyLinePlaceholder":45},[118,33268,33270],{"class":120,"line":33269},162,[118,33271,33272],{"class":187},"        # 计算耗时\n",[118,33274,33276,33279,33281,33284,33286],{"class":120,"line":33275},163,[118,33277,33278],{"class":128},"        time_use",[118,33280,174],{"class":124},[118,33282,33283],{"class":128},"time.time()",[118,33285,660],{"class":124},[118,33287,33288],{"class":128},"since\n",[118,33290,33292,33294,33296,33299,33301,33304,33306,33308,33310,33312,33314,33317,33320,33323,33325,33328,33330,33332],{"class":120,"line":33291},164,[118,33293,32444],{"class":177},[118,33295,129],{"class":128},[118,33297,33298],{"class":233},"'训练和验证耗费的时间",[118,33300,1024],{"class":177},[118,33302,33303],{"class":124},":.0f",[118,33305,1074],{"class":177},[118,33307,672],{"class":233},[118,33309,1024],{"class":177},[118,33311,33303],{"class":124},[118,33313,1074],{"class":177},[118,33315,33316],{"class":233},"s'",[118,33318,33319],{"class":128},".format(time_use",[118,33321,33322],{"class":124},"\u002F\u002F",[118,33324,1035],{"class":177},[118,33326,33327],{"class":128},",time_use",[118,33329,456],{"class":124},[118,33331,1035],{"class":177},[118,33333,30490],{"class":128},[118,33335,33337],{"class":120,"line":33336},165,[118,33338,33339],{"class":187},"    # 选择最优参数\n",[118,33341,33343],{"class":120,"line":33342},166,[118,33344,33345],{"class":187},"    # 加载最高准确率下的模型参数\n",[118,33347,33349],{"class":120,"line":33348},167,[118,33350,33351],{"class":187},"    # model.load_state_dict(best_model_wts)\n",[118,33353,33355,33358,33361],{"class":120,"line":33354},168,[118,33356,33357],{"class":128},"    torch.save(model.state_dict(best_model_wts), ",[118,33359,33360],{"class":233},"'.\u002Fbest_model.pth'",[118,33362,135],{"class":128},[118,33364,33366],{"class":120,"line":33365},169,[118,33367,33368],{"class":187},"    # 或者写成\n",[118,33370,33372],{"class":120,"line":33371},170,[118,33373,33374],{"class":187},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[118,33376,33378],{"class":120,"line":33377},171,[118,33379,33380],{"class":187},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[118,33382,33384,33387,33389,33392,33395,33397],{"class":120,"line":33383},172,[118,33385,33386],{"class":128},"    train_process",[118,33388,174],{"class":124},[118,33390,33391],{"class":128},"pd.DataFrame(",[118,33393,33394],{"class":5221},"data",[118,33396,174],{"class":124},[118,33398,1550],{"class":128},[118,33400,33402,33405,33407,33410],{"class":120,"line":33401},173,[118,33403,33404],{"class":233},"        \"epoch\"",[118,33406,987],{"class":128},[118,33408,33409],{"class":177},"range",[118,33411,33412],{"class":128},"(num_epochs),\n",[118,33414,33416,33419],{"class":120,"line":33415},174,[118,33417,33418],{"class":233},"        \"train_loss_all\"",[118,33420,33421],{"class":128},":train_loss_all,\n",[118,33423,33425,33428],{"class":120,"line":33424},175,[118,33426,33427],{"class":233},"        \"val_loss_all\"",[118,33429,33430],{"class":128},":val_loss_all,\n",[118,33432,33434,33437],{"class":120,"line":33433},176,[118,33435,33436],{"class":233},"        \"train_acc_all\"",[118,33438,33439],{"class":128},":train_acc_all,\n",[118,33441,33443,33446],{"class":120,"line":33442},177,[118,33444,33445],{"class":233},"        \"val_acc_all\"",[118,33447,33448],{"class":128},":val_acc_all\n",[118,33450,33452],{"class":120,"line":33451},178,[118,33453,33454],{"class":128},"    })\n",[118,33456,33458],{"class":120,"line":33457},179,[118,33459,33460],{"class":187},"    # 返回训练保存的过程\n",[118,33462,33464,33466],{"class":120,"line":33463},180,[118,33465,4094],{"class":124},[118,33467,33468],{"class":128}," train_process\n",[118,33470,33472],{"class":120,"line":33471},181,[118,33473,2404],{"emptyLinePlaceholder":45},[118,33475,33477],{"class":120,"line":33476},182,[118,33478,33479],{"class":187},"# 将loss值和精度按照图片的形式展示出来\n",[118,33481,33483,33485,33488],{"class":120,"line":33482},183,[118,33484,31940],{"class":124},[118,33486,33487],{"class":1967}," matplot_acc_loss",[118,33489,33490],{"class":128},"(train_process):\n",[118,33492,33494],{"class":120,"line":33493},184,[118,33495,33496],{"class":187},"    # 设置图的大小\n",[118,33498,33500,33503,33505,33507,33509,33511,33513,33515],{"class":120,"line":33499},185,[118,33501,33502],{"class":128},"    plt.figure(",[118,33504,31686],{"class":5221},[118,33506,174],{"class":124},[118,33508,129],{"class":128},[118,33510,626],{"class":177},[118,33512,506],{"class":128},[118,33514,421],{"class":177},[118,33516,30490],{"class":128},[118,33518,33520],{"class":120,"line":33519},186,[118,33521,33522],{"class":187},"    # 设置图中有几张图\n",[118,33524,33526],{"class":120,"line":33525},187,[118,33527,33528],{"class":187},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[118,33530,33532],{"class":120,"line":33531},188,[118,33533,33534],{"class":187},"    # ①loss图\n",[118,33536,33538,33540,33542,33544,33546,33548,33550],{"class":120,"line":33537},189,[118,33539,31720],{"class":128},[118,33541,346],{"class":177},[118,33543,506],{"class":128},[118,33545,206],{"class":177},[118,33547,506],{"class":128},[118,33549,346],{"class":177},[118,33551,135],{"class":128},[118,33553,33555],{"class":120,"line":33554},190,[118,33556,33557],{"class":187},"    # 补充:\n",[118,33559,33561],{"class":120,"line":33560},191,[118,33562,33563],{"class":187},"    # plt.subplot(nrows, ncols, index)\n",[118,33565,33567],{"class":120,"line":33566},192,[118,33568,33569],{"class":187},"    # nrows：行数\n",[118,33571,33573],{"class":120,"line":33572},193,[118,33574,33575],{"class":187},"    # ncols：列数\n",[118,33577,33579],{"class":120,"line":33578},194,[118,33580,33581],{"class":187},"    # index：目前选中第几个子图（从1开始）\n",[118,33583,33585,33588,33591,33594,33597,33599,33602,33604,33607],{"class":120,"line":33584},195,[118,33586,33587],{"class":128},"    plt.plot(train_process[",[118,33589,33590],{"class":233},"\"epoch\"",[118,33592,33593],{"class":128},"],train_process.train_loss_all,",[118,33595,33596],{"class":233},"'ro-'",[118,33598,506],{"class":128},[118,33600,33601],{"class":5221},"label",[118,33603,174],{"class":124},[118,33605,33606],{"class":233},"'train loss'",[118,33608,135],{"class":128},[118,33610,33612,33614,33616,33619,33622,33624,33626,33628,33631],{"class":120,"line":33611},196,[118,33613,33587],{"class":128},[118,33615,33590],{"class":233},[118,33617,33618],{"class":128},"],train_process.val_loss_all,",[118,33620,33621],{"class":233},"'bs--'",[118,33623,506],{"class":128},[118,33625,33601],{"class":5221},[118,33627,174],{"class":124},[118,33629,33630],{"class":233},"'val loss'",[118,33632,135],{"class":128},[118,33634,33636],{"class":120,"line":33635},197,[118,33637,33638],{"class":187},"    # 添加一个图例\n",[118,33640,33642],{"class":120,"line":33641},198,[118,33643,33644],{"class":128},"    plt.legend()\n",[118,33646,33648],{"class":120,"line":33647},199,[118,33649,33650],{"class":187},"    # 给轴添加标签\n",[118,33652,33654,33657,33660],{"class":120,"line":33653},200,[118,33655,33656],{"class":128},"    plt.xlabel(",[118,33658,33659],{"class":233},"'epoch'",[118,33661,135],{"class":128},[118,33663,33665,33668,33671],{"class":120,"line":33664},201,[118,33666,33667],{"class":128},"    plt.ylabel(",[118,33669,33670],{"class":233},"'loss'",[118,33672,135],{"class":128},[118,33674,33676],{"class":120,"line":33675},202,[118,33677,33678],{"class":187},"    # ②准确度图\n",[118,33680,33682,33684,33686,33688,33690,33692,33694],{"class":120,"line":33681},203,[118,33683,31720],{"class":128},[118,33685,346],{"class":177},[118,33687,506],{"class":128},[118,33689,206],{"class":177},[118,33691,506],{"class":128},[118,33693,206],{"class":177},[118,33695,135],{"class":128},[118,33697,33699,33701,33703,33706,33708,33710,33712,33714,33717],{"class":120,"line":33698},204,[118,33700,33587],{"class":128},[118,33702,33590],{"class":233},[118,33704,33705],{"class":128},"],train_process.train_acc_all,",[118,33707,33596],{"class":233},[118,33709,506],{"class":128},[118,33711,33601],{"class":5221},[118,33713,174],{"class":124},[118,33715,33716],{"class":233},"'train acc'",[118,33718,135],{"class":128},[118,33720,33722,33724,33726,33729,33731,33733,33735,33737,33740],{"class":120,"line":33721},205,[118,33723,33587],{"class":128},[118,33725,33590],{"class":233},[118,33727,33728],{"class":128},"],train_process.val_acc_all,",[118,33730,33621],{"class":233},[118,33732,506],{"class":128},[118,33734,33601],{"class":5221},[118,33736,174],{"class":124},[118,33738,33739],{"class":233},"'val acc'",[118,33741,135],{"class":128},[118,33743,33745],{"class":120,"line":33744},206,[118,33746,33747],{"class":187},"    # 添加图例\n",[118,33749,33751],{"class":120,"line":33750},207,[118,33752,33644],{"class":128},[118,33754,33756,33758,33760],{"class":120,"line":33755},208,[118,33757,33656],{"class":128},[118,33759,33590],{"class":233},[118,33761,135],{"class":128},[118,33763,33765,33767,33770],{"class":120,"line":33764},209,[118,33766,33667],{"class":128},[118,33768,33769],{"class":233},"\"acc\"",[118,33771,135],{"class":128},[118,33773,33775],{"class":120,"line":33774},210,[118,33776,33777],{"class":128},"    plt.show()\n",[118,33779,33781],{"class":120,"line":33780},211,[118,33782,2404],{"emptyLinePlaceholder":45},[118,33784,33786],{"class":120,"line":33785},212,[118,33787,33788],{"class":187},"# 正式开始训练:\n",[118,33790,33792,33794,33796,33798,33800],{"class":120,"line":33791},213,[118,33793,1535],{"class":124},[118,33795,31213],{"class":177},[118,33797,2953],{"class":124},[118,33799,31218],{"class":233},[118,33801,3743],{"class":128},[118,33803,33805],{"class":120,"line":33804},214,[118,33806,33807],{"class":187},"    # 将模型实例化\n",[118,33809,33811,33814,33816],{"class":120,"line":33810},215,[118,33812,33813],{"class":128},"    LeNet",[118,33815,174],{"class":124},[118,33817,33818],{"class":128},"LeNet()\n",[118,33820,33822,33825,33827],{"class":120,"line":33821},216,[118,33823,33824],{"class":128},"    train_dataloader,val_dataloader",[118,33826,174],{"class":124},[118,33828,33829],{"class":128},"train_val_data_process()\n",[118,33831,33833,33835,33837,33840,33843,33845,33847],{"class":120,"line":33832},217,[118,33834,33386],{"class":128},[118,33836,174],{"class":124},[118,33838,33839],{"class":128},"train_model_process(LeNet,train_dataloader,val_dataloader,",[118,33841,33842],{"class":5221},"num_epochs",[118,33844,174],{"class":124},[118,33846,828],{"class":177},[118,33848,135],{"class":128},[118,33850,33852],{"class":120,"line":33851},218,[118,33853,33854],{"class":128},"    matplot_acc_loss(train_process)\n",[15,33856,33857],{},"画图的补充点学习：",[15,33859,33860],{},[1466,33861],{"alt":39,"src":33862},"\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",[72,33864,33865],{"start":1183},[75,33866,33867],{},"测试",[109,33869,33871],{"className":30371,"code":33870,"language":30373,"meta":39,"style":39},"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",[115,33872,33873,33879,33889,33901,33911,33916,33926,33936,33940,33945,33954,33971,33983,34000,34011,34027,34032,34043,34054,34065,34072,34076,34081,34091,34096,34113,34121,34125,34130,34139,34148,34152,34157,34162,34167,34174,34179,34191,34201,34211,34216,34220,34225,34234,34239,34255,34260,34265,34270,34284,34289,34303,34307,34312,34327,34332,34344,34348,34353,34365,34370,34378,34383,34388,34398,34403,34412,34417,34422,34426,34431,34436,34452,34460,34465,34470,34529,34535,34540,34551,34559,34567,34571,34576,34580,34585,34593,34598,34614,34619,34629,34639],{"__ignoreMap":39},[118,33874,33875,33877],{"class":120,"line":121},[118,33876,30385],{"class":124},[118,33878,30388],{"class":128},[118,33880,33881,33883,33885,33887],{"class":120,"line":40},[118,33882,30385],{"class":124},[118,33884,31408],{"class":128},[118,33886,31376],{"class":124},[118,33888,31413],{"class":128},[118,33890,33891,33893,33896,33898],{"class":120,"line":1183},[118,33892,30730],{"class":124},[118,33894,33895],{"class":128}," jupyter_client.consoleapp ",[118,33897,30385],{"class":124},[118,33899,33900],{"class":128}," classes\n",[118,33902,33903,33905,33907,33909],{"class":120,"line":1198},[118,33904,30730],{"class":124},[118,33906,31391],{"class":128},[118,33908,30385],{"class":124},[118,33910,31396],{"class":128},[118,33912,33913],{"class":120,"line":1204},[118,33914,33915],{"class":187},"# 导入数据集\n",[118,33917,33918,33920,33922,33924],{"class":120,"line":1218},[118,33919,30730],{"class":124},[118,33921,31361],{"class":128},[118,33923,30385],{"class":124},[118,33925,31366],{"class":128},[118,33927,33928,33930,33932,33934],{"class":120,"line":1224},[118,33929,30730],{"class":124},[118,33931,31907],{"class":128},[118,33933,30385],{"class":124},[118,33935,31912],{"class":128},[118,33937,33938],{"class":120,"line":1315},[118,33939,2404],{"emptyLinePlaceholder":45},[118,33941,33942],{"class":120,"line":1321},[118,33943,33944],{"class":187},"# 测试数据处理\n",[118,33946,33947,33949,33952],{"class":120,"line":1333},[118,33948,31940],{"class":124},[118,33950,33951],{"class":1967}," test_data_process",[118,33953,31946],{"class":128},[118,33955,33956,33959,33961,33963,33965,33967,33969],{"class":120,"line":1616},[118,33957,33958],{"class":128},"    test_data",[118,33960,174],{"class":124},[118,33962,31448],{"class":128},[118,33964,31451],{"class":5221},[118,33966,174],{"class":124},[118,33968,31456],{"class":233},[118,33970,31459],{"class":128},[118,33972,33973,33976,33978,33981],{"class":120,"line":1621},[118,33974,33975],{"class":5221},"                           train",[118,33977,174],{"class":124},[118,33979,33980],{"class":177},"False",[118,33982,31459],{"class":128},[118,33984,33985,33988,33990,33992,33994,33996,33998],{"class":120,"line":1627},[118,33986,33987],{"class":5221},"                           transform",[118,33989,174],{"class":124},[118,33991,31486],{"class":128},[118,33993,31489],{"class":5221},[118,33995,174],{"class":124},[118,33997,1029],{"class":177},[118,33999,31497],{"class":128},[118,34001,34002,34005,34007,34009],{"class":120,"line":1632},[118,34003,34004],{"class":5221},"                           download",[118,34006,174],{"class":124},[118,34008,31469],{"class":177},[118,34010,135],{"class":128},[118,34012,34013,34016,34018,34020,34022,34024],{"class":120,"line":1646},[118,34014,34015],{"class":128},"    test_dataloader",[118,34017,174],{"class":124},[118,34019,31527],{"class":128},[118,34021,31530],{"class":5221},[118,34023,174],{"class":124},[118,34025,34026],{"class":128},"test_data,\n",[118,34028,34029],{"class":120,"line":1651},[118,34030,34031],{"class":187},"                                    # 这里是一张一张进行测试\n",[118,34033,34034,34037,34039,34041],{"class":120,"line":1657},[118,34035,34036],{"class":5221},"                                    batch_size",[118,34038,174],{"class":124},[118,34040,346],{"class":177},[118,34042,31459],{"class":128},[118,34044,34045,34048,34050,34052],{"class":120,"line":1678},[118,34046,34047],{"class":5221},"                                    shuffle",[118,34049,174],{"class":124},[118,34051,31469],{"class":177},[118,34053,31459],{"class":128},[118,34055,34056,34059,34061,34063],{"class":120,"line":1683},[118,34057,34058],{"class":5221},"                                    num_workers",[118,34060,174],{"class":124},[118,34062,320],{"class":177},[118,34064,135],{"class":128},[118,34066,34067,34069],{"class":120,"line":1697},[118,34068,4094],{"class":124},[118,34070,34071],{"class":128}," test_dataloader\n",[118,34073,34074],{"class":120,"line":1702},[118,34075,2404],{"emptyLinePlaceholder":45},[118,34077,34078],{"class":120,"line":1731},[118,34079,34080],{"class":187},"# 定义模型测试函数\n",[118,34082,34083,34085,34088],{"class":120,"line":1736},[118,34084,31940],{"class":124},[118,34086,34087],{"class":1967}," test_model_process",[118,34089,34090],{"class":128},"(model,test_dataloader):\n",[118,34092,34093],{"class":120,"line":1753},[118,34094,34095],{"class":187},"    # 将模型放到设备当中，先进行判断\n",[118,34097,34098,34100,34102,34104,34106,34108,34110],{"class":120,"line":1758},[118,34099,31230],{"class":128},[118,34101,174],{"class":124},[118,34103,31237],{"class":233},[118,34105,1708],{"class":124},[118,34107,31242],{"class":128},[118,34109,1705],{"class":124},[118,34111,34112],{"class":233}," \"cpu\"\n",[118,34114,34115,34117,34119],{"class":120,"line":1763},[118,34116,31282],{"class":128},[118,34118,174],{"class":124},[118,34120,32282],{"class":128},[118,34122,34123],{"class":120,"line":1768},[118,34124,2404],{"emptyLinePlaceholder":45},[118,34126,34127],{"class":120,"line":1782},[118,34128,34129],{"class":187},"    # 设置初始化参数\n",[118,34131,34132,34135,34137],{"class":120,"line":1787},[118,34133,34134],{"class":128},"    test_corrects",[118,34136,174],{"class":124},[118,34138,32335],{"class":177},[118,34140,34141,34144,34146],{"class":120,"line":2581},[118,34142,34143],{"class":128},"    test_num",[118,34145,174],{"class":124},[118,34147,3089],{"class":177},[118,34149,34150],{"class":120,"line":2595},[118,34151,2404],{"emptyLinePlaceholder":45},[118,34153,34154],{"class":120,"line":2603},[118,34155,34156],{"class":187},"    # 进行模型测试\n",[118,34158,34159],{"class":120,"line":2608},[118,34160,34161],{"class":187},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[118,34163,34164],{"class":120,"line":2614},[118,34165,34166],{"class":187},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[118,34168,34169,34172],{"class":120,"line":2620},[118,34170,34171],{"class":124},"    with",[118,34173,32877],{"class":128},[118,34175,34176],{"class":120,"line":2625},[118,34177,34178],{"class":187},"        # 从数据中进行\n",[118,34180,34181,34183,34186,34188],{"class":120,"line":7953},[118,34182,3407],{"class":124},[118,34184,34185],{"class":128}," test_data_x,test_data_y ",[118,34187,26036],{"class":124},[118,34189,34190],{"class":128}," test_dataloader:\n",[118,34192,34193,34196,34198],{"class":120,"line":7977},[118,34194,34195],{"class":128},"            test_data_x",[118,34197,174],{"class":124},[118,34199,34200],{"class":128},"test_data_x.to(device)\n",[118,34202,34203,34206,34208],{"class":120,"line":7982},[118,34204,34205],{"class":128},"            test_data_y",[118,34207,174],{"class":124},[118,34209,34210],{"class":128},"test_data_y.to(device)\n",[118,34212,34213],{"class":120,"line":7988},[118,34214,34215],{"class":187},"            # 设置为验证模式\n",[118,34217,34218],{"class":120,"line":8015},[118,34219,32868],{"class":128},[118,34221,34222],{"class":120,"line":8020},[118,34223,34224],{"class":187},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[118,34226,34227,34229,34231],{"class":120,"line":8026},[118,34228,32653],{"class":128},[118,34230,174],{"class":124},[118,34232,34233],{"class":128},"model(test_data_x)\n",[118,34235,34236],{"class":120,"line":8038},[118,34237,34238],{"class":187},"            # 查找每一行中最大值对应的下标\n",[118,34240,34241,34243,34245,34247,34249,34251,34253],{"class":120,"line":8050},[118,34242,32670],{"class":128},[118,34244,174],{"class":124},[118,34246,32675],{"class":128},[118,34248,32678],{"class":5221},[118,34250,174],{"class":124},[118,34252,346],{"class":177},[118,34254,135],{"class":128},[118,34256,34257],{"class":120,"line":8062},[118,34258,34259],{"class":187},"            # 计算正确率\n",[118,34261,34262],{"class":120,"line":9721},[118,34263,34264],{"class":187},"            # .data表示是一个不带梯度信息的tensor\n",[118,34266,34267],{"class":120,"line":9746},[118,34268,34269],{"class":187},"            # 如果预测正确，则准确度test_corrects加1\n",[118,34271,34272,34275,34277,34279,34281],{"class":120,"line":9769},[118,34273,34274],{"class":128},"            test_corrects",[118,34276,9482],{"class":124},[118,34278,32780],{"class":128},[118,34280,2953],{"class":124},[118,34282,34283],{"class":128},"test_data_y.data)\n",[118,34285,34286],{"class":120,"line":9793},[118,34287,34288],{"class":187},"            # 将所有的测试样本进行累计\n",[118,34290,34291,34294,34296,34299,34301],{"class":120,"line":9798},[118,34292,34293],{"class":128},"            test_num",[118,34295,9482],{"class":124},[118,34297,34298],{"class":128},"test_data_x.size(",[118,34300,320],{"class":177},[118,34302,135],{"class":128},[118,34304,34305],{"class":120,"line":9803},[118,34306,2404],{"emptyLinePlaceholder":45},[118,34308,34309],{"class":120,"line":9808},[118,34310,34311],{"class":187},"        # 计算准确度\n",[118,34313,34314,34317,34319,34322,34324],{"class":120,"line":9817},[118,34315,34316],{"class":128},"        test_acc",[118,34318,174],{"class":124},[118,34320,34321],{"class":128},"test_corrects.double().item()",[118,34323,712],{"class":124},[118,34325,34326],{"class":128},"test_num\n",[118,34328,34329],{"class":120,"line":9822},[118,34330,34331],{"class":187},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[118,34333,34334,34336,34338,34341],{"class":120,"line":9828},[118,34335,32444],{"class":177},[118,34337,129],{"class":128},[118,34339,34340],{"class":233},"\"测试的准确率：\"",[118,34342,34343],{"class":128},",test_acc)\n",[118,34345,34346],{"class":120,"line":9849},[118,34347,2404],{"emptyLinePlaceholder":45},[118,34349,34350],{"class":120,"line":9855},[118,34351,34352],{"class":187},"# 实现模型的测试功能\n",[118,34354,34355,34357,34359,34361,34363],{"class":120,"line":9869},[118,34356,1535],{"class":124},[118,34358,31213],{"class":177},[118,34360,2953],{"class":124},[118,34362,31218],{"class":233},[118,34364,3743],{"class":128},[118,34366,34367],{"class":120,"line":9875},[118,34368,34369],{"class":187},"    # 加载模型\n",[118,34371,34372,34374,34376],{"class":120,"line":9902},[118,34373,31282],{"class":128},[118,34375,174],{"class":124},[118,34377,33818],{"class":128},[118,34379,34380],{"class":120,"line":9911},[118,34381,34382],{"class":187},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[118,34384,34385],{"class":120,"line":9917},[118,34386,34387],{"class":187},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[118,34389,34390,34393,34396],{"class":120,"line":9925},[118,34391,34392],{"class":128},"    model.load_state_dict(torch.load(",[118,34394,34395],{"class":233},"'best_model.pth'",[118,34397,30490],{"class":128},[118,34399,34400],{"class":120,"line":9930},[118,34401,34402],{"class":187},"    # 数据加载\n",[118,34404,34405,34407,34409],{"class":120,"line":16609},[118,34406,34015],{"class":128},[118,34408,174],{"class":124},[118,34410,34411],{"class":128},"test_data_process()\n",[118,34413,34414],{"class":120,"line":16615},[118,34415,34416],{"class":187},"    # 加载模型测试的函数\n",[118,34418,34419],{"class":120,"line":16638},[118,34420,34421],{"class":128},"    test_model_process(model,test_dataloader)\n",[118,34423,34424],{"class":120,"line":16644},[118,34425,2404],{"emptyLinePlaceholder":45},[118,34427,34428],{"class":120,"line":16667},[118,34429,34430],{"class":187},"    # 验证集推理实现：\n",[118,34432,34433],{"class":120,"line":16681},[118,34434,34435],{"class":187},"    # 加载数据加载的更详细一些\n",[118,34437,34438,34440,34442,34444,34446,34448,34450],{"class":120,"line":16701},[118,34439,31230],{"class":128},[118,34441,174],{"class":124},[118,34443,31237],{"class":233},[118,34445,1708],{"class":124},[118,34447,31242],{"class":128},[118,34449,1705],{"class":124},[118,34451,34112],{"class":233},[118,34453,34454,34456,34458],{"class":120,"line":16707},[118,34455,31282],{"class":128},[118,34457,174],{"class":124},[118,34459,32282],{"class":128},[118,34461,34462],{"class":120,"line":16718},[118,34463,34464],{"class":187},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[118,34466,34467],{"class":120,"line":16741},[118,34468,34469],{"class":187},"    # 顺序不可改变\n",[118,34471,34472,34475,34477,34479,34482,34484,34487,34489,34492,34494,34497,34499,34502,34504,34507,34509,34512,34514,34517,34519,34522,34524,34527],{"class":120,"line":16763},[118,34473,34474],{"class":128},"    classes",[118,34476,174],{"class":124},[118,34478,1018],{"class":128},[118,34480,34481],{"class":233},"'T-shirt\u002Ftop'",[118,34483,506],{"class":128},[118,34485,34486],{"class":233},"'Trouser'",[118,34488,506],{"class":128},[118,34490,34491],{"class":233},"'Pullover'",[118,34493,506],{"class":128},[118,34495,34496],{"class":233},"'Dress'",[118,34498,506],{"class":128},[118,34500,34501],{"class":233},"'Coat'",[118,34503,506],{"class":128},[118,34505,34506],{"class":233},"'Sandal'",[118,34508,506],{"class":128},[118,34510,34511],{"class":233},"'Shirt'",[118,34513,506],{"class":128},[118,34515,34516],{"class":233},"'Sneaker'",[118,34518,506],{"class":128},[118,34520,34521],{"class":233},"'Bag'",[118,34523,506],{"class":128},[118,34525,34526],{"class":233},"'Ankle boot'",[118,34528,33239],{"class":128},[118,34530,34531,34533],{"class":120,"line":16768},[118,34532,34171],{"class":124},[118,34534,32877],{"class":128},[118,34536,34537],{"class":120,"line":16774},[118,34538,34539],{"class":187},"        # 将数据和标签都放到设备当中\n",[118,34541,34542,34544,34547,34549],{"class":120,"line":16788},[118,34543,3407],{"class":124},[118,34545,34546],{"class":128}," b_x,b_y ",[118,34548,26036],{"class":124},[118,34550,34190],{"class":128},[118,34552,34553,34555,34557],{"class":120,"line":16801},[118,34554,32603],{"class":128},[118,34556,174],{"class":124},[118,34558,32608],{"class":128},[118,34560,34561,34563,34565],{"class":120,"line":16806},[118,34562,32618],{"class":128},[118,34564,174],{"class":124},[118,34566,32623],{"class":128},[118,34568,34569],{"class":120,"line":16820},[118,34570,2404],{"emptyLinePlaceholder":45},[118,34572,34573],{"class":120,"line":16825},[118,34574,34575],{"class":187},"            # 设置模型为验证模式\n",[118,34577,34578],{"class":120,"line":16831},[118,34579,32868],{"class":128},[118,34581,34582],{"class":120,"line":16836},[118,34583,34584],{"class":187},"            # 模型推理结果\n",[118,34586,34587,34589,34591],{"class":120,"line":16850},[118,34588,32653],{"class":128},[118,34590,174],{"class":124},[118,34592,32658],{"class":128},[118,34594,34595],{"class":120,"line":16855},[118,34596,34597],{"class":187},"            # 获取最大下标，最大下标就是类别号\n",[118,34599,34600,34602,34604,34606,34608,34610,34612],{"class":120,"line":16860},[118,34601,32670],{"class":128},[118,34603,174],{"class":124},[118,34605,32675],{"class":128},[118,34607,32678],{"class":5221},[118,34609,174],{"class":124},[118,34611,346],{"class":177},[118,34613,135],{"class":128},[118,34615,34616],{"class":120,"line":16874},[118,34617,34618],{"class":187},"            # 取出张量中的数值\n",[118,34620,34621,34624,34626],{"class":120,"line":16886},[118,34622,34623],{"class":128},"            result",[118,34625,174],{"class":124},[118,34627,34628],{"class":128},"pre_lab.item()\n",[118,34630,34631,34634,34636],{"class":120,"line":16891},[118,34632,34633],{"class":128},"            label",[118,34635,174],{"class":124},[118,34637,34638],{"class":128},"b_y.item()\n",[118,34640,34641,34644,34646,34649,34652,34655,34657,34660],{"class":120,"line":16904},[118,34642,34643],{"class":177},"            print",[118,34645,129],{"class":128},[118,34647,34648],{"class":233},"\"预测值：\"",[118,34650,34651],{"class":128},",classes[result],",[118,34653,34654],{"class":233},"\"------\"",[118,34656,506],{"class":128},[118,34658,34659],{"class":233},"\"真实值：\"",[118,34661,34662],{"class":128},",classes[label])\n",[15,34664,34665],{},"（2）AlexNet",[72,34667,34668],{},[75,34669,34670],{},"神经网络构建",[109,34672,34674],{"className":30371,"code":34673,"language":30373,"meta":39,"style":39},"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",[115,34675,34676,34682,34692,34702,34714,34718,34735,34743,34758,34770,34812,34839,34882,34908,34952,34995,35038,35065,35069,35079,35084,35112,35131,35150,35154,35159,35167,35182,35192,35206,35216,35231,35246,35261,35272,35276,35281,35291,35306,35311,35325,35340,35352,35357,35368,35373,35379,35384,35396,35416,35421,35430],{"__ignoreMap":39},[118,34677,34678,34680],{"class":120,"line":121},[118,34679,30385],{"class":124},[118,34681,30388],{"class":128},[118,34683,34684,34686,34688,34690],{"class":120,"line":40},[118,34685,30730],{"class":124},[118,34687,30733],{"class":128},[118,34689,30385],{"class":124},[118,34691,30738],{"class":128},[118,34693,34694,34696,34698,34700],{"class":120,"line":1183},[118,34695,30730],{"class":124},[118,34697,30750],{"class":128},[118,34699,30385],{"class":124},[118,34701,30755],{"class":128},[118,34703,34704,34706,34709,34711],{"class":120,"line":1198},[118,34705,30385],{"class":124},[118,34707,34708],{"class":128}," torch.nn.functional ",[118,34710,31376],{"class":124},[118,34712,34713],{"class":128}," F\n",[118,34715,34716],{"class":120,"line":1204},[118,34717,2404],{"emptyLinePlaceholder":45},[118,34719,34720,34722,34725,34727,34729,34731,34733],{"class":120,"line":1218},[118,34721,14699],{"class":124},[118,34723,34724],{"class":1967}," AlexNet",[118,34726,129],{"class":128},[118,34728,30771],{"class":1967},[118,34730,686],{"class":128},[118,34732,30776],{"class":1967},[118,34734,30779],{"class":128},[118,34736,34737,34739,34741],{"class":120,"line":1224},[118,34738,30794],{"class":124},[118,34740,30797],{"class":177},[118,34742,30800],{"class":128},[118,34744,34745,34747,34750,34752,34754,34756],{"class":120,"line":1315},[118,34746,30810],{"class":177},[118,34748,34749],{"class":128},"(AlexNet,",[118,34751,30816],{"class":177},[118,34753,30819],{"class":128},[118,34755,30822],{"class":177},[118,34757,1980],{"class":128},[118,34759,34760,34762,34765,34767],{"class":120,"line":1321},[118,34761,30838],{"class":177},[118,34763,34764],{"class":128},".ReLu",[118,34766,174],{"class":124},[118,34768,34769],{"class":128},"nn.ReLU()\n",[118,34771,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798,34800,34802,34804,34806,34808,34810],{"class":120,"line":1333},[118,34773,30838],{"class":177},[118,34775,30841],{"class":128},[118,34777,174],{"class":124},[118,34779,30846],{"class":128},[118,34781,30849],{"class":5221},[118,34783,174],{"class":124},[118,34785,346],{"class":177},[118,34787,506],{"class":128},[118,34789,30858],{"class":5221},[118,34791,174],{"class":124},[118,34793,338],{"class":177},[118,34795,506],{"class":128},[118,34797,30867],{"class":5221},[118,34799,174],{"class":124},[118,34801,600],{"class":177},[118,34803,506],{"class":128},[118,34805,30922],{"class":5221},[118,34807,174],{"class":124},[118,34809,421],{"class":177},[118,34811,135],{"class":128},[118,34813,34814,34816,34818,34820,34823,34825,34827,34829,34831,34833,34835,34837],{"class":120,"line":1616},[118,34815,30838],{"class":177},[118,34817,30906],{"class":128},[118,34819,174],{"class":124},[118,34821,34822],{"class":128},"nn.MaxPool2d(",[118,34824,30867],{"class":5221},[118,34826,174],{"class":124},[118,34828,200],{"class":177},[118,34830,506],{"class":128},[118,34832,30922],{"class":5221},[118,34834,174],{"class":124},[118,34836,206],{"class":177},[118,34838,135],{"class":128},[118,34840,34841,34843,34845,34847,34849,34851,34853,34855,34857,34859,34861,34864,34866,34868,34870,34872,34874,34876,34878,34880],{"class":120,"line":1621},[118,34842,30838],{"class":177},[118,34844,30935],{"class":128},[118,34846,174],{"class":124},[118,34848,30846],{"class":128},[118,34850,30849],{"class":5221},[118,34852,174],{"class":124},[118,34854,338],{"class":177},[118,34856,506],{"class":128},[118,34858,30858],{"class":5221},[118,34860,174],{"class":124},[118,34862,34863],{"class":177},"256",[118,34865,506],{"class":128},[118,34867,30867],{"class":5221},[118,34869,174],{"class":124},[118,34871,447],{"class":177},[118,34873,506],{"class":128},[118,34875,30876],{"class":5221},[118,34877,174],{"class":124},[118,34879,206],{"class":177},[118,34881,135],{"class":128},[118,34883,34884,34886,34888,34890,34892,34894,34896,34898,34900,34902,34904,34906],{"class":120,"line":1627},[118,34885,30838],{"class":177},[118,34887,30970],{"class":128},[118,34889,174],{"class":124},[118,34891,34822],{"class":128},[118,34893,30867],{"class":5221},[118,34895,174],{"class":124},[118,34897,200],{"class":177},[118,34899,506],{"class":128},[118,34901,30922],{"class":5221},[118,34903,174],{"class":124},[118,34905,206],{"class":177},[118,34907,135],{"class":128},[118,34909,34910,34912,34915,34917,34919,34921,34923,34925,34927,34929,34931,34934,34936,34938,34940,34942,34944,34946,34948,34950],{"class":120,"line":1632},[118,34911,30838],{"class":177},[118,34913,34914],{"class":128},".c5",[118,34916,174],{"class":124},[118,34918,30846],{"class":128},[118,34920,30849],{"class":5221},[118,34922,174],{"class":124},[118,34924,34863],{"class":177},[118,34926,506],{"class":128},[118,34928,30858],{"class":5221},[118,34930,174],{"class":124},[118,34932,34933],{"class":177},"384",[118,34935,506],{"class":128},[118,34937,30867],{"class":5221},[118,34939,174],{"class":124},[118,34941,200],{"class":177},[118,34943,506],{"class":128},[118,34945,30876],{"class":5221},[118,34947,174],{"class":124},[118,34949,346],{"class":177},[118,34951,135],{"class":128},[118,34953,34954,34956,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981,34983,34985,34987,34989,34991,34993],{"class":120,"line":1646},[118,34955,30838],{"class":177},[118,34957,34958],{"class":128},".c6",[118,34960,174],{"class":124},[118,34962,30846],{"class":128},[118,34964,30849],{"class":5221},[118,34966,174],{"class":124},[118,34968,34933],{"class":177},[118,34970,506],{"class":128},[118,34972,30858],{"class":5221},[118,34974,174],{"class":124},[118,34976,34933],{"class":177},[118,34978,506],{"class":128},[118,34980,30867],{"class":5221},[118,34982,174],{"class":124},[118,34984,200],{"class":177},[118,34986,506],{"class":128},[118,34988,30876],{"class":5221},[118,34990,174],{"class":124},[118,34992,346],{"class":177},[118,34994,135],{"class":128},[118,34996,34997,34999,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024,35026,35028,35030,35032,35034,35036],{"class":120,"line":1651},[118,34998,30838],{"class":177},[118,35000,35001],{"class":128},".c7",[118,35003,174],{"class":124},[118,35005,30846],{"class":128},[118,35007,30849],{"class":5221},[118,35009,174],{"class":124},[118,35011,34933],{"class":177},[118,35013,506],{"class":128},[118,35015,30858],{"class":5221},[118,35017,174],{"class":124},[118,35019,34863],{"class":177},[118,35021,506],{"class":128},[118,35023,30867],{"class":5221},[118,35025,174],{"class":124},[118,35027,200],{"class":177},[118,35029,506],{"class":128},[118,35031,30876],{"class":5221},[118,35033,174],{"class":124},[118,35035,346],{"class":177},[118,35037,135],{"class":128},[118,35039,35040,35042,35045,35047,35049,35051,35053,35055,35057,35059,35061,35063],{"class":120,"line":1657},[118,35041,30838],{"class":177},[118,35043,35044],{"class":128},".s8",[118,35046,174],{"class":124},[118,35048,34822],{"class":128},[118,35050,30867],{"class":5221},[118,35052,174],{"class":124},[118,35054,200],{"class":177},[118,35056,506],{"class":128},[118,35058,30922],{"class":5221},[118,35060,174],{"class":124},[118,35062,206],{"class":177},[118,35064,135],{"class":128},[118,35066,35067],{"class":120,"line":1678},[118,35068,30995],{"class":187},[118,35070,35071,35073,35075,35077],{"class":120,"line":1683},[118,35072,30838],{"class":177},[118,35074,31002],{"class":128},[118,35076,174],{"class":124},[118,35078,31007],{"class":128},[118,35080,35081],{"class":120,"line":1697},[118,35082,35083],{"class":187},"       # 定义全连接层\n",[118,35085,35086,35088,35091,35093,35095,35097,35099,35101,35103,35105,35107,35110],{"class":120,"line":1702},[118,35087,30838],{"class":177},[118,35089,35090],{"class":128},".f1",[118,35092,174],{"class":124},[118,35094,31024],{"class":128},[118,35096,472],{"class":177},[118,35098,583],{"class":124},[118,35100,472],{"class":177},[118,35102,583],{"class":124},[118,35104,34863],{"class":177},[118,35106,506],{"class":128},[118,35108,35109],{"class":177},"4096",[118,35111,135],{"class":128},[118,35113,35114,35116,35119,35121,35123,35125,35127,35129],{"class":120,"line":1731},[118,35115,30838],{"class":177},[118,35117,35118],{"class":128},".f2",[118,35120,174],{"class":124},[118,35122,31024],{"class":128},[118,35124,35109],{"class":177},[118,35126,506],{"class":128},[118,35128,35109],{"class":177},[118,35130,135],{"class":128},[118,35132,35133,35135,35138,35140,35142,35144,35146,35148],{"class":120,"line":1736},[118,35134,30838],{"class":177},[118,35136,35137],{"class":128},".f3",[118,35139,174],{"class":124},[118,35141,31024],{"class":128},[118,35143,35109],{"class":177},[118,35145,506],{"class":128},[118,35147,574],{"class":177},[118,35149,135],{"class":128},[118,35151,35152],{"class":120,"line":1753},[118,35153,2404],{"emptyLinePlaceholder":45},[118,35155,35156],{"class":120,"line":1758},[118,35157,35158],{"class":187},"    # 定义前向传播\n",[118,35160,35161,35163,35165],{"class":120,"line":1763},[118,35162,30794],{"class":124},[118,35164,31086],{"class":1967},[118,35166,31089],{"class":128},[118,35168,35169,35171,35173,35175,35178,35180],{"class":120,"line":1768},[118,35170,31094],{"class":128},[118,35172,174],{"class":124},[118,35174,30816],{"class":177},[118,35176,35177],{"class":128},".ReLu(",[118,35179,30816],{"class":177},[118,35181,31106],{"class":128},[118,35183,35184,35186,35188,35190],{"class":120,"line":1782},[118,35185,31094],{"class":128},[118,35187,174],{"class":124},[118,35189,30816],{"class":177},[118,35191,31117],{"class":128},[118,35193,35194,35196,35198,35200,35202,35204],{"class":120,"line":1787},[118,35195,31094],{"class":128},[118,35197,174],{"class":124},[118,35199,30816],{"class":177},[118,35201,35177],{"class":128},[118,35203,30816],{"class":177},[118,35205,31132],{"class":128},[118,35207,35208,35210,35212,35214],{"class":120,"line":2581},[118,35209,31094],{"class":128},[118,35211,174],{"class":124},[118,35213,30816],{"class":177},[118,35215,31143],{"class":128},[118,35217,35218,35220,35222,35224,35226,35228],{"class":120,"line":2595},[118,35219,31094],{"class":128},[118,35221,174],{"class":124},[118,35223,30816],{"class":177},[118,35225,35177],{"class":128},[118,35227,30816],{"class":177},[118,35229,35230],{"class":128},".c5(x))\n",[118,35232,35233,35235,35237,35239,35241,35243],{"class":120,"line":2603},[118,35234,31094],{"class":128},[118,35236,174],{"class":124},[118,35238,30816],{"class":177},[118,35240,35177],{"class":128},[118,35242,30816],{"class":177},[118,35244,35245],{"class":128},".c6(x))\n",[118,35247,35248,35250,35252,35254,35256,35258],{"class":120,"line":2608},[118,35249,31094],{"class":128},[118,35251,174],{"class":124},[118,35253,30816],{"class":177},[118,35255,35177],{"class":128},[118,35257,30816],{"class":177},[118,35259,35260],{"class":128},".c7(x))\n",[118,35262,35263,35265,35267,35269],{"class":120,"line":2614},[118,35264,31094],{"class":128},[118,35266,174],{"class":124},[118,35268,30816],{"class":177},[118,35270,35271],{"class":128},".s8(x)\n",[118,35273,35274],{"class":120,"line":2620},[118,35275,2404],{"emptyLinePlaceholder":45},[118,35277,35278],{"class":120,"line":2625},[118,35279,35280],{"class":187},"        # 展平加线性全连接层\n",[118,35282,35283,35285,35287,35289],{"class":120,"line":7953},[118,35284,31094],{"class":128},[118,35286,174],{"class":124},[118,35288,30816],{"class":177},[118,35290,31154],{"class":128},[118,35292,35293,35295,35297,35299,35301,35303],{"class":120,"line":7977},[118,35294,31094],{"class":128},[118,35296,174],{"class":124},[118,35298,30816],{"class":177},[118,35300,35177],{"class":128},[118,35302,30816],{"class":177},[118,35304,35305],{"class":128},".f1(x))\n",[118,35307,35308],{"class":120,"line":7982},[118,35309,35310],{"class":187},"        # 还需要dropout对神经元随机进行失活\n",[118,35312,35313,35315,35317,35320,35323],{"class":120,"line":7988},[118,35314,31094],{"class":128},[118,35316,174],{"class":124},[118,35318,35319],{"class":128},"F.dropout(x,",[118,35321,35322],{"class":177},"0.5",[118,35324,135],{"class":128},[118,35326,35327,35329,35331,35333,35335,35337],{"class":120,"line":8015},[118,35328,31094],{"class":128},[118,35330,174],{"class":124},[118,35332,30816],{"class":177},[118,35334,35177],{"class":128},[118,35336,30816],{"class":177},[118,35338,35339],{"class":128},".f2(x))\n",[118,35341,35342,35344,35346,35348,35350],{"class":120,"line":8020},[118,35343,31094],{"class":128},[118,35345,174],{"class":124},[118,35347,35319],{"class":128},[118,35349,35322],{"class":177},[118,35351,135],{"class":128},[118,35353,35354],{"class":120,"line":8026},[118,35355,35356],{"class":187},"        # 直接输出\n",[118,35358,35359,35361,35363,35365],{"class":120,"line":8038},[118,35360,31094],{"class":128},[118,35362,174],{"class":124},[118,35364,30816],{"class":177},[118,35366,35367],{"class":128},".f3(x)\n",[118,35369,35370],{"class":120,"line":8050},[118,35371,35372],{"class":187},"        # 前向传播输出\n",[118,35374,35375,35377],{"class":120,"line":8062},[118,35376,14757],{"class":124},[118,35378,31202],{"class":128},[118,35380,35381],{"class":120,"line":9721},[118,35382,35383],{"class":187},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[118,35385,35386,35388,35390,35392,35394],{"class":120,"line":9746},[118,35387,1535],{"class":124},[118,35389,31213],{"class":177},[118,35391,2953],{"class":124},[118,35393,31218],{"class":233},[118,35395,3743],{"class":128},[118,35397,35398,35400,35402,35404,35406,35408,35410,35412,35414],{"class":120,"line":9769},[118,35399,31230],{"class":128},[118,35401,174],{"class":124},[118,35403,30444],{"class":128},[118,35405,31237],{"class":233},[118,35407,1708],{"class":124},[118,35409,31242],{"class":128},[118,35411,1705],{"class":124},[118,35413,30469],{"class":233},[118,35415,135],{"class":128},[118,35417,35418],{"class":120,"line":9793},[118,35419,35420],{"class":187},"    # 模型实例化，然后将实例化的模型放到设备中\n",[118,35422,35423,35425,35427],{"class":120,"line":9798},[118,35424,31282],{"class":128},[118,35426,174],{"class":124},[118,35428,35429],{"class":128},"AlexNet().to(device)\n",[118,35431,35432,35434,35436,35438,35440,35443,35445,35447],{"class":120,"line":9803},[118,35433,31292],{"class":177},[118,35435,31295],{"class":128},[118,35437,346],{"class":177},[118,35439,506],{"class":128},[118,35441,35442],{"class":177},"227",[118,35444,506],{"class":128},[118,35446,35442],{"class":177},[118,35448,31308],{"class":128},[72,35450,35451],{"start":40},[75,35452,31321],{},[109,35454,35456],{"className":30371,"code":35455,"language":30373,"meta":39,"style":39},"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",[115,35457,35458,35464,35470,35480,35486,35496,35506,35516,35526,35536,35540,35551,35561,35565,35569,35573,35581,35593,35603,35619,35629,35661,35675,35685,35695,35699,35709,35723,35733,35743,35753,35759,35763,35767,35771,35775,35779,35787,35807,35811,35815,35819,35823,35827,35843,35847,35851,35859,35863,35867,35875,35879,35883,35887,35895,35899,35903,35907,35911,35919,35923,35931,35935,35943,35947,35955,35959,35967,35971,35975,35983,35987,35991,35995,36007,36031,36045,36049,36053,36057,36065,36069,36077,36081,36089,36093,36101,36105,36113,36117,36125,36129,36141,36145,36153,36157,36165,36169,36173,36177,36181,36189,36193,36209,36213,36221,36225,36229,36233,36237,36241,36245,36249,36265,36269,36281,36285,36297,36301,36313,36317,36325,36329,36337,36341,36345,36350,36356,36360,36369,36373,36390,36394,36403,36407,36425,36438,36443,36456,36460,36464,36472,36476,36480,36488,36492,36500,36504,36512,36516,36520,36562,36604,36608,36612,36628,36632,36648,36652,36656,36664,36668,36672,36684,36722,36727,36732,36741,36745,36759,36769,36775,36781,36787,36793,36797,36801,36807,36811,36815,36823,36827,36845,36849,36853,36857,36873,36877,36881,36885,36889,36893,36913,36933,36937,36941,36945,36953,36961,36965,36981,37001,37021,37025,37029,37037,37045,37049,37053,37057,37069,37073,37083,37091,37108],{"__ignoreMap":39},[118,35459,35460,35462],{"class":120,"line":121},[118,35461,30385],{"class":124},[118,35463,31815],{"class":128},[118,35465,35466,35468],{"class":120,"line":40},[118,35467,30385],{"class":124},[118,35469,31822],{"class":128},[118,35471,35472,35474,35476,35478],{"class":120,"line":1183},[118,35473,30385],{"class":124},[118,35475,31833],{"class":128},[118,35477,31376],{"class":124},[118,35479,31838],{"class":128},[118,35481,35482,35484],{"class":120,"line":1198},[118,35483,30385],{"class":124},[118,35485,30388],{"class":128},[118,35487,35488,35490,35492,35494],{"class":120,"line":1204},[118,35489,30730],{"class":124},[118,35491,31408],{"class":128},[118,35493,30385],{"class":124},[118,35495,31855],{"class":128},[118,35497,35498,35500,35502,35504],{"class":120,"line":1218},[118,35499,30730],{"class":124},[118,35501,31361],{"class":128},[118,35503,30385],{"class":124},[118,35505,31366],{"class":128},[118,35507,35508,35510,35512,35514],{"class":120,"line":1224},[118,35509,30730],{"class":124},[118,35511,31391],{"class":128},[118,35513,30385],{"class":124},[118,35515,31396],{"class":128},[118,35517,35518,35520,35522,35524],{"class":120,"line":1315},[118,35519,30385],{"class":124},[118,35521,31408],{"class":128},[118,35523,31376],{"class":124},[118,35525,31413],{"class":128},[118,35527,35528,35530,35532,35534],{"class":120,"line":1321},[118,35529,30385],{"class":124},[118,35531,31425],{"class":128},[118,35533,31376],{"class":124},[118,35535,31430],{"class":128},[118,35537,35538],{"class":120,"line":1333},[118,35539,31900],{"class":187},[118,35541,35542,35544,35546,35548],{"class":120,"line":1616},[118,35543,30730],{"class":124},[118,35545,31907],{"class":128},[118,35547,30385],{"class":124},[118,35549,35550],{"class":128}," AlexNet\n",[118,35552,35553,35555,35557,35559],{"class":120,"line":1621},[118,35554,30730],{"class":124},[118,35556,30733],{"class":128},[118,35558,30385],{"class":124},[118,35560,30738],{"class":128},[118,35562,35563],{"class":120,"line":1627},[118,35564,2404],{"emptyLinePlaceholder":45},[118,35566,35567],{"class":120,"line":1632},[118,35568,2404],{"emptyLinePlaceholder":45},[118,35570,35571],{"class":120,"line":1646},[118,35572,31935],{"class":187},[118,35574,35575,35577,35579],{"class":120,"line":1651},[118,35576,31940],{"class":124},[118,35578,31943],{"class":1967},[118,35580,31946],{"class":128},[118,35582,35583,35585,35587,35589,35591],{"class":120,"line":1657},[118,35584,31951],{"class":128},[118,35586,174],{"class":124},[118,35588,31448],{"class":128},[118,35590,31456],{"class":233},[118,35592,31459],{"class":128},[118,35594,35595,35597,35599,35601],{"class":120,"line":1678},[118,35596,31964],{"class":5221},[118,35598,174],{"class":124},[118,35600,31469],{"class":177},[118,35602,31459],{"class":128},[118,35604,35605,35607,35609,35611,35613,35615,35617],{"class":120,"line":1683},[118,35606,31975],{"class":5221},[118,35608,174],{"class":124},[118,35610,31486],{"class":128},[118,35612,31489],{"class":5221},[118,35614,174],{"class":124},[118,35616,35442],{"class":177},[118,35618,31497],{"class":128},[118,35620,35621,35623,35625,35627],{"class":120,"line":1697},[118,35622,31992],{"class":5221},[118,35624,174],{"class":124},[118,35626,31469],{"class":177},[118,35628,135],{"class":128},[118,35630,35631,35633,35635,35637,35639,35641,35643,35645,35647,35649,35651,35653,35655,35657,35659],{"class":120,"line":1702},[118,35632,32003],{"class":128},[118,35634,174],{"class":124},[118,35636,32008],{"class":128},[118,35638,32011],{"class":177},[118,35640,129],{"class":128},[118,35642,32016],{"class":177},[118,35644,583],{"class":124},[118,35646,7363],{"class":177},[118,35648,32023],{"class":128},[118,35650,32011],{"class":177},[118,35652,129],{"class":128},[118,35654,32030],{"class":177},[118,35656,583],{"class":124},[118,35658,7363],{"class":177},[118,35660,32037],{"class":128},[118,35662,35663,35665,35667,35669,35671,35673],{"class":120,"line":1731},[118,35664,32042],{"class":128},[118,35666,174],{"class":124},[118,35668,32047],{"class":128},[118,35670,31530],{"class":5221},[118,35672,174],{"class":124},[118,35674,31535],{"class":128},[118,35676,35677,35679,35681,35683],{"class":120,"line":1736},[118,35678,32058],{"class":5221},[118,35680,174],{"class":124},[118,35682,32063],{"class":177},[118,35684,31459],{"class":128},[118,35686,35687,35689,35691,35693],{"class":120,"line":1753},[118,35688,32070],{"class":5221},[118,35690,174],{"class":124},[118,35692,31469],{"class":177},[118,35694,31459],{"class":128},[118,35696,35697],{"class":120,"line":1758},[118,35698,32081],{"class":187},[118,35700,35701,35703,35705,35707],{"class":120,"line":1763},[118,35702,32086],{"class":5221},[118,35704,174],{"class":124},[118,35706,523],{"class":177},[118,35708,135],{"class":128},[118,35710,35711,35713,35715,35717,35719,35721],{"class":120,"line":1768},[118,35712,32097],{"class":128},[118,35714,174],{"class":124},[118,35716,31527],{"class":128},[118,35718,31530],{"class":5221},[118,35720,174],{"class":124},[118,35722,32108],{"class":128},[118,35724,35725,35727,35729,35731],{"class":120,"line":1782},[118,35726,32113],{"class":5221},[118,35728,174],{"class":124},[118,35730,32063],{"class":177},[118,35732,31459],{"class":128},[118,35734,35735,35737,35739,35741],{"class":120,"line":1787},[118,35736,32124],{"class":5221},[118,35738,174],{"class":124},[118,35740,31469],{"class":177},[118,35742,31459],{"class":128},[118,35744,35745,35747,35749,35751],{"class":120,"line":2581},[118,35746,32135],{"class":5221},[118,35748,174],{"class":124},[118,35750,523],{"class":177},[118,35752,135],{"class":128},[118,35754,35755,35757],{"class":120,"line":2595},[118,35756,4094],{"class":124},[118,35758,32148],{"class":128},[118,35760,35761],{"class":120,"line":2603},[118,35762,2404],{"emptyLinePlaceholder":45},[118,35764,35765],{"class":120,"line":2608},[118,35766,32157],{"class":187},[118,35768,35769],{"class":120,"line":2614},[118,35770,32162],{"class":187},[118,35772,35773],{"class":120,"line":2620},[118,35774,2404],{"emptyLinePlaceholder":45},[118,35776,35777],{"class":120,"line":2625},[118,35778,32171],{"class":187},[118,35780,35781,35783,35785],{"class":120,"line":7953},[118,35782,31940],{"class":124},[118,35784,32178],{"class":1967},[118,35786,32181],{"class":128},[118,35788,35789,35791,35793,35795,35797,35799,35801,35803,35805],{"class":120,"line":7977},[118,35790,31230],{"class":128},[118,35792,174],{"class":124},[118,35794,30444],{"class":128},[118,35796,31237],{"class":233},[118,35798,1708],{"class":124},[118,35800,31242],{"class":128},[118,35802,1705],{"class":124},[118,35804,32200],{"class":233},[118,35806,135],{"class":128},[118,35808,35809],{"class":120,"line":7982},[118,35810,2404],{"emptyLinePlaceholder":45},[118,35812,35813],{"class":120,"line":7988},[118,35814,2404],{"emptyLinePlaceholder":45},[118,35816,35817],{"class":120,"line":8015},[118,35818,32215],{"class":187},[118,35820,35821],{"class":120,"line":8020},[118,35822,32220],{"class":187},[118,35824,35825],{"class":120,"line":8026},[118,35826,32225],{"class":187},[118,35828,35829,35831,35833,35835,35837,35839,35841],{"class":120,"line":8038},[118,35830,32230],{"class":128},[118,35832,174],{"class":124},[118,35834,32235],{"class":128},[118,35836,32238],{"class":5221},[118,35838,174],{"class":124},[118,35840,32243],{"class":177},[118,35842,135],{"class":128},[118,35844,35845],{"class":120,"line":8050},[118,35846,2404],{"emptyLinePlaceholder":45},[118,35848,35849],{"class":120,"line":8062},[118,35850,32254],{"class":187},[118,35852,35853,35855,35857],{"class":120,"line":9721},[118,35854,32259],{"class":128},[118,35856,174],{"class":124},[118,35858,32264],{"class":128},[118,35860,35861],{"class":120,"line":9746},[118,35862,2404],{"emptyLinePlaceholder":45},[118,35864,35865],{"class":120,"line":9769},[118,35866,32273],{"class":187},[118,35868,35869,35871,35873],{"class":120,"line":9793},[118,35870,31282],{"class":128},[118,35872,174],{"class":124},[118,35874,32282],{"class":128},[118,35876,35877],{"class":120,"line":9798},[118,35878,32287],{"class":187},[118,35880,35881],{"class":120,"line":9803},[118,35882,32292],{"class":187},[118,35884,35885],{"class":120,"line":9808},[118,35886,32297],{"class":187},[118,35888,35889,35891,35893],{"class":120,"line":9817},[118,35890,32302],{"class":128},[118,35892,174],{"class":124},[118,35894,32307],{"class":128},[118,35896,35897],{"class":120,"line":9822},[118,35898,2404],{"emptyLinePlaceholder":45},[118,35900,35901],{"class":120,"line":9828},[118,35902,2404],{"emptyLinePlaceholder":45},[118,35904,35905],{"class":120,"line":9849},[118,35906,32320],{"class":187},[118,35908,35909],{"class":120,"line":9855},[118,35910,32325],{"class":187},[118,35912,35913,35915,35917],{"class":120,"line":9869},[118,35914,32330],{"class":128},[118,35916,174],{"class":124},[118,35918,32335],{"class":177},[118,35920,35921],{"class":120,"line":9875},[118,35922,32340],{"class":187},[118,35924,35925,35927,35929],{"class":120,"line":9902},[118,35926,32345],{"class":128},[118,35928,174],{"class":124},[118,35930,32350],{"class":128},[118,35932,35933],{"class":120,"line":9911},[118,35934,32355],{"class":187},[118,35936,35937,35939,35941],{"class":120,"line":9917},[118,35938,32360],{"class":128},[118,35940,174],{"class":124},[118,35942,32350],{"class":128},[118,35944,35945],{"class":120,"line":9925},[118,35946,32369],{"class":187},[118,35948,35949,35951,35953],{"class":120,"line":9930},[118,35950,32374],{"class":128},[118,35952,174],{"class":124},[118,35954,32350],{"class":128},[118,35956,35957],{"class":120,"line":16609},[118,35958,32383],{"class":187},[118,35960,35961,35963,35965],{"class":120,"line":16615},[118,35962,32388],{"class":128},[118,35964,174],{"class":124},[118,35966,32350],{"class":128},[118,35968,35969],{"class":120,"line":16638},[118,35970,2404],{"emptyLinePlaceholder":45},[118,35972,35973],{"class":120,"line":16644},[118,35974,32401],{"class":187},[118,35976,35977,35979,35981],{"class":120,"line":16667},[118,35978,32406],{"class":128},[118,35980,174],{"class":124},[118,35982,32411],{"class":128},[118,35984,35985],{"class":120,"line":16681},[118,35986,2404],{"emptyLinePlaceholder":45},[118,35988,35989],{"class":120,"line":16701},[118,35990,2404],{"emptyLinePlaceholder":45},[118,35992,35993],{"class":120,"line":16707},[118,35994,32424],{"class":187},[118,35996,35997,35999,36001,36003,36005],{"class":120,"line":16718},[118,35998,3205],{"class":124},[118,36000,32431],{"class":128},[118,36002,26036],{"class":124},[118,36004,32436],{"class":177},[118,36006,32439],{"class":128},[118,36008,36009,36011,36013,36015,36017,36019,36021,36023,36025,36027,36029],{"class":120,"line":16741},[118,36010,32444],{"class":177},[118,36012,129],{"class":128},[118,36014,32449],{"class":233},[118,36016,32452],{"class":177},[118,36018,712],{"class":233},[118,36020,32452],{"class":177},[118,36022,379],{"class":233},[118,36024,32461],{"class":128},[118,36026,660],{"class":124},[118,36028,346],{"class":177},[118,36030,30490],{"class":128},[118,36032,36033,36035,36037,36039,36041,36043],{"class":120,"line":16763},[118,36034,32444],{"class":177},[118,36036,129],{"class":128},[118,36038,32476],{"class":233},[118,36040,583],{"class":124},[118,36042,574],{"class":177},[118,36044,135],{"class":128},[118,36046,36047],{"class":120,"line":16768},[118,36048,2404],{"emptyLinePlaceholder":45},[118,36050,36051],{"class":120,"line":16774},[118,36052,32491],{"class":187},[118,36054,36055],{"class":120,"line":16788},[118,36056,32496],{"class":187},[118,36058,36059,36061,36063],{"class":120,"line":16801},[118,36060,32501],{"class":128},[118,36062,174],{"class":124},[118,36064,32335],{"class":177},[118,36066,36067],{"class":120,"line":16806},[118,36068,32510],{"class":187},[118,36070,36071,36073,36075],{"class":120,"line":16820},[118,36072,32515],{"class":128},[118,36074,174],{"class":124},[118,36076,3089],{"class":177},[118,36078,36079],{"class":120,"line":16825},[118,36080,32524],{"class":187},[118,36082,36083,36085,36087],{"class":120,"line":16831},[118,36084,32529],{"class":128},[118,36086,174],{"class":124},[118,36088,32335],{"class":177},[118,36090,36091],{"class":120,"line":16836},[118,36092,32538],{"class":187},[118,36094,36095,36097,36099],{"class":120,"line":16850},[118,36096,32543],{"class":128},[118,36098,174],{"class":124},[118,36100,3089],{"class":177},[118,36102,36103],{"class":120,"line":16855},[118,36104,32552],{"class":187},[118,36106,36107,36109,36111],{"class":120,"line":16860},[118,36108,32557],{"class":128},[118,36110,174],{"class":124},[118,36112,3089],{"class":177},[118,36114,36115],{"class":120,"line":16874},[118,36116,32566],{"class":187},[118,36118,36119,36121,36123],{"class":120,"line":16886},[118,36120,32571],{"class":128},[118,36122,174],{"class":124},[118,36124,3089],{"class":177},[118,36126,36127],{"class":120,"line":16891},[118,36128,32580],{"class":187},[118,36130,36131,36133,36135,36137,36139],{"class":120,"line":16904},[118,36132,3407],{"class":124},[118,36134,31594],{"class":128},[118,36136,26036],{"class":124},[118,36138,31599],{"class":177},[118,36140,32593],{"class":128},[118,36142,36143],{"class":120,"line":16909},[118,36144,32598],{"class":187},[118,36146,36147,36149,36151],{"class":120,"line":16914},[118,36148,32603],{"class":128},[118,36150,174],{"class":124},[118,36152,32608],{"class":128},[118,36154,36155],{"class":120,"line":16919},[118,36156,32613],{"class":187},[118,36158,36159,36161,36163],{"class":120,"line":16932},[118,36160,32618],{"class":128},[118,36162,174],{"class":124},[118,36164,32623],{"class":128},[118,36166,36167],{"class":120,"line":16937},[118,36168,32629],{"class":187},[118,36170,36171],{"class":120,"line":32626},[118,36172,32635],{"class":128},[118,36174,36175],{"class":120,"line":32632},[118,36176,32641],{"class":187},[118,36178,36179],{"class":120,"line":32638},[118,36180,32647],{"class":187},[118,36182,36183,36185,36187],{"class":120,"line":32644},[118,36184,32653],{"class":128},[118,36186,174],{"class":124},[118,36188,32658],{"class":128},[118,36190,36191],{"class":120,"line":32650},[118,36192,32664],{"class":187},[118,36194,36195,36197,36199,36201,36203,36205,36207],{"class":120,"line":32661},[118,36196,32670],{"class":128},[118,36198,174],{"class":124},[118,36200,32675],{"class":128},[118,36202,32678],{"class":5221},[118,36204,174],{"class":124},[118,36206,346],{"class":177},[118,36208,135],{"class":128},[118,36210,36211],{"class":120,"line":32667},[118,36212,32690],{"class":187},[118,36214,36215,36217,36219],{"class":120,"line":32687},[118,36216,32696],{"class":128},[118,36218,174],{"class":124},[118,36220,32701],{"class":128},[118,36222,36223],{"class":120,"line":32693},[118,36224,32707],{"class":187},[118,36226,36227],{"class":120,"line":32704},[118,36228,32713],{"class":128},[118,36230,36231],{"class":120,"line":32710},[118,36232,32719],{"class":187},[118,36234,36235],{"class":120,"line":32716},[118,36236,32725],{"class":128},[118,36238,36239],{"class":120,"line":32722},[118,36240,32731],{"class":187},[118,36242,36243],{"class":120,"line":32728},[118,36244,32737],{"class":128},[118,36246,36247],{"class":120,"line":32734},[118,36248,32743],{"class":187},[118,36250,36251,36253,36255,36257,36259,36261,36263],{"class":120,"line":32740},[118,36252,32749],{"class":128},[118,36254,9482],{"class":124},[118,36256,32754],{"class":128},[118,36258,583],{"class":124},[118,36260,32759],{"class":128},[118,36262,320],{"class":177},[118,36264,135],{"class":128},[118,36266,36267],{"class":120,"line":32746},[118,36268,32769],{"class":187},[118,36270,36271,36273,36275,36277,36279],{"class":120,"line":32766},[118,36272,32775],{"class":128},[118,36274,9482],{"class":124},[118,36276,32780],{"class":128},[118,36278,2953],{"class":124},[118,36280,32785],{"class":128},[118,36282,36283],{"class":120,"line":32772},[118,36284,32791],{"class":187},[118,36286,36287,36289,36291,36293,36295],{"class":120,"line":32788},[118,36288,32797],{"class":128},[118,36290,9482],{"class":124},[118,36292,32759],{"class":128},[118,36294,320],{"class":177},[118,36296,135],{"class":128},[118,36298,36299],{"class":120,"line":32794},[118,36300,32811],{"class":187},[118,36302,36303,36305,36307,36309,36311],{"class":120,"line":32808},[118,36304,3407],{"class":124},[118,36306,32819],{"class":128},[118,36308,26036],{"class":124},[118,36310,31599],{"class":177},[118,36312,32826],{"class":128},[118,36314,36315],{"class":120,"line":32814},[118,36316,32832],{"class":187},[118,36318,36319,36321,36323],{"class":120,"line":32829},[118,36320,32603],{"class":128},[118,36322,174],{"class":124},[118,36324,32608],{"class":128},[118,36326,36327],{"class":120,"line":32835},[118,36328,32847],{"class":187},[118,36330,36331,36333,36335],{"class":120,"line":32844},[118,36332,32618],{"class":128},[118,36334,174],{"class":124},[118,36336,32623],{"class":128},[118,36338,36339],{"class":120,"line":32850},[118,36340,32862],{"class":187},[118,36342,36343],{"class":120,"line":32859},[118,36344,32868],{"class":128},[118,36346,36347],{"class":120,"line":32865},[118,36348,36349],{"class":187},"            # 验证时不计算梯度以节省内存\u002F计算\n",[118,36351,36352,36354],{"class":120,"line":32871},[118,36353,32874],{"class":124},[118,36355,32877],{"class":128},[118,36357,36358],{"class":120,"line":32880},[118,36359,32883],{"class":187},[118,36361,36362,36365,36367],{"class":120,"line":32886},[118,36363,36364],{"class":128},"                output",[118,36366,174],{"class":124},[118,36368,32658],{"class":128},[118,36370,36371],{"class":120,"line":32897},[118,36372,32900],{"class":187},[118,36374,36375,36378,36380,36382,36384,36386,36388],{"class":120,"line":32903},[118,36376,36377],{"class":128},"                pre_lab",[118,36379,174],{"class":124},[118,36381,32675],{"class":128},[118,36383,32678],{"class":5221},[118,36385,174],{"class":124},[118,36387,346],{"class":177},[118,36389,135],{"class":128},[118,36391,36392],{"class":120,"line":32922},[118,36393,32925],{"class":187},[118,36395,36396,36399,36401],{"class":120,"line":32928},[118,36397,36398],{"class":128},"                val_batch_loss",[118,36400,174],{"class":124},[118,36402,32701],{"class":128},[118,36404,36405],{"class":120,"line":32939},[118,36406,32942],{"class":187},[118,36408,36409,36412,36414,36417,36419,36421,36423],{"class":120,"line":32945},[118,36410,36411],{"class":128},"                val_loss",[118,36413,9482],{"class":124},[118,36415,36416],{"class":128},"val_batch_loss.item()",[118,36418,583],{"class":124},[118,36420,32759],{"class":128},[118,36422,320],{"class":177},[118,36424,135],{"class":128},[118,36426,36427,36430,36432,36434,36436],{"class":120,"line":32965},[118,36428,36429],{"class":128},"                val_corrects",[118,36431,9482],{"class":124},[118,36433,32780],{"class":128},[118,36435,2953],{"class":124},[118,36437,32785],{"class":128},[118,36439,36440],{"class":120,"line":32981},[118,36441,36442],{"class":187},"            # 当前用于验证的样本数量\n",[118,36444,36445,36448,36450,36452,36454],{"class":120,"line":32987},[118,36446,36447],{"class":128},"            val_num",[118,36449,9482],{"class":124},[118,36451,32759],{"class":128},[118,36453,320],{"class":177},[118,36455,135],{"class":128},[118,36457,36458],{"class":120,"line":33001},[118,36459,33004],{"class":187},[118,36461,36462],{"class":120,"line":33007},[118,36463,33010],{"class":187},[118,36465,36466,36468,36470],{"class":120,"line":33013},[118,36467,33016],{"class":128},[118,36469,712],{"class":124},[118,36471,33021],{"class":128},[118,36473,36474],{"class":120,"line":33024},[118,36475,33027],{"class":187},[118,36477,36478],{"class":120,"line":33030},[118,36479,33033],{"class":187},[118,36481,36482,36484,36486],{"class":120,"line":33036},[118,36483,33039],{"class":128},[118,36485,712],{"class":124},[118,36487,33021],{"class":128},[118,36489,36490],{"class":120,"line":33046},[118,36491,33049],{"class":187},[118,36493,36494,36496,36498],{"class":120,"line":33052},[118,36495,33055],{"class":128},[118,36497,712],{"class":124},[118,36499,33060],{"class":128},[118,36501,36502],{"class":120,"line":33063},[118,36503,33066],{"class":187},[118,36505,36506,36508,36510],{"class":120,"line":33069},[118,36507,33072],{"class":128},[118,36509,712],{"class":124},[118,36511,33060],{"class":128},[118,36513,36514],{"class":120,"line":33079},[118,36515,2404],{"emptyLinePlaceholder":45},[118,36517,36518],{"class":120,"line":33084},[118,36519,33087],{"class":187},[118,36521,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550,36552,36554,36556,36558,36560],{"class":120,"line":33090},[118,36523,32444],{"class":177},[118,36525,129],{"class":128},[118,36527,3596],{"class":233},[118,36529,32452],{"class":177},[118,36531,33101],{"class":233},[118,36533,1024],{"class":177},[118,36535,33106],{"class":124},[118,36537,1074],{"class":177},[118,36539,33111],{"class":233},[118,36541,1024],{"class":177},[118,36543,33106],{"class":124},[118,36545,1074],{"class":177},[118,36547,3596],{"class":233},[118,36549,33122],{"class":128},[118,36551,660],{"class":124},[118,36553,346],{"class":177},[118,36555,33129],{"class":128},[118,36557,660],{"class":124},[118,36559,346],{"class":177},[118,36561,33136],{"class":128},[118,36563,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598,36600,36602],{"class":120,"line":33139},[118,36565,32444],{"class":177},[118,36567,129],{"class":128},[118,36569,3596],{"class":233},[118,36571,32452],{"class":177},[118,36573,33150],{"class":233},[118,36575,1024],{"class":177},[118,36577,33106],{"class":124},[118,36579,1074],{"class":177},[118,36581,33159],{"class":233},[118,36583,1024],{"class":177},[118,36585,33106],{"class":124},[118,36587,1074],{"class":177},[118,36589,3596],{"class":233},[118,36591,33170],{"class":128},[118,36593,660],{"class":124},[118,36595,346],{"class":177},[118,36597,33177],{"class":128},[118,36599,660],{"class":124},[118,36601,346],{"class":177},[118,36603,33136],{"class":128},[118,36605,36606],{"class":120,"line":33186},[118,36607,2404],{"emptyLinePlaceholder":45},[118,36609,36610],{"class":120,"line":33191},[118,36611,33194],{"class":187},[118,36613,36614,36616,36618,36620,36622,36624,36626],{"class":120,"line":33197},[118,36615,2501],{"class":124},[118,36617,33202],{"class":128},[118,36619,660],{"class":124},[118,36621,346],{"class":177},[118,36623,1068],{"class":128},[118,36625,1088],{"class":124},[118,36627,33213],{"class":128},[118,36629,36630],{"class":120,"line":33216},[118,36631,33219],{"class":187},[118,36633,36634,36636,36638,36640,36642,36644,36646],{"class":120,"line":33222},[118,36635,33225],{"class":128},[118,36637,168],{"class":177},[118,36639,174],{"class":124},[118,36641,33232],{"class":128},[118,36643,660],{"class":124},[118,36645,346],{"class":177},[118,36647,33239],{"class":128},[118,36649,36650],{"class":120,"line":33242},[118,36651,33245],{"class":187},[118,36653,36654],{"class":120,"line":33248},[118,36655,33251],{"class":187},[118,36657,36658,36660,36662],{"class":120,"line":33254},[118,36659,33257],{"class":128},[118,36661,174],{"class":124},[118,36663,32307],{"class":128},[118,36665,36666],{"class":120,"line":33264},[118,36667,2404],{"emptyLinePlaceholder":45},[118,36669,36670],{"class":120,"line":33269},[118,36671,33272],{"class":187},[118,36673,36674,36676,36678,36680,36682],{"class":120,"line":33275},[118,36675,33278],{"class":128},[118,36677,174],{"class":124},[118,36679,33283],{"class":128},[118,36681,660],{"class":124},[118,36683,33288],{"class":128},[118,36685,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712,36714,36716,36718,36720],{"class":120,"line":33291},[118,36687,32444],{"class":177},[118,36689,129],{"class":128},[118,36691,33298],{"class":233},[118,36693,1024],{"class":177},[118,36695,33303],{"class":124},[118,36697,1074],{"class":177},[118,36699,672],{"class":233},[118,36701,1024],{"class":177},[118,36703,33303],{"class":124},[118,36705,1074],{"class":177},[118,36707,33316],{"class":233},[118,36709,33319],{"class":128},[118,36711,33322],{"class":124},[118,36713,1035],{"class":177},[118,36715,33327],{"class":128},[118,36717,456],{"class":124},[118,36719,1035],{"class":177},[118,36721,30490],{"class":128},[118,36723,36724],{"class":120,"line":33336},[118,36725,36726],{"class":187},"    # 选择最优参数并保存\n",[118,36728,36729],{"class":120,"line":33342},[118,36730,36731],{"class":187},"    # 保存最佳模型权重字典\n",[118,36733,36734,36737,36739],{"class":120,"line":33348},[118,36735,36736],{"class":128},"    torch.save(best_model_wts,",[118,36738,33360],{"class":233},[118,36740,135],{"class":128},[118,36742,36743],{"class":120,"line":33354},[118,36744,33380],{"class":187},[118,36746,36747,36749,36751,36753,36755,36757],{"class":120,"line":33365},[118,36748,33386],{"class":128},[118,36750,174],{"class":124},[118,36752,33391],{"class":128},[118,36754,33394],{"class":5221},[118,36756,174],{"class":124},[118,36758,1550],{"class":128},[118,36760,36761,36763,36765,36767],{"class":120,"line":33371},[118,36762,33404],{"class":233},[118,36764,987],{"class":128},[118,36766,33409],{"class":177},[118,36768,33412],{"class":128},[118,36770,36771,36773],{"class":120,"line":33377},[118,36772,33418],{"class":233},[118,36774,33421],{"class":128},[118,36776,36777,36779],{"class":120,"line":33383},[118,36778,33427],{"class":233},[118,36780,33430],{"class":128},[118,36782,36783,36785],{"class":120,"line":33401},[118,36784,33436],{"class":233},[118,36786,33439],{"class":128},[118,36788,36789,36791],{"class":120,"line":33415},[118,36790,33445],{"class":233},[118,36792,33448],{"class":128},[118,36794,36795],{"class":120,"line":33424},[118,36796,33454],{"class":128},[118,36798,36799],{"class":120,"line":33433},[118,36800,33460],{"class":187},[118,36802,36803,36805],{"class":120,"line":33442},[118,36804,4094],{"class":124},[118,36806,33468],{"class":128},[118,36808,36809],{"class":120,"line":33451},[118,36810,2404],{"emptyLinePlaceholder":45},[118,36812,36813],{"class":120,"line":33457},[118,36814,33479],{"class":187},[118,36816,36817,36819,36821],{"class":120,"line":33463},[118,36818,31940],{"class":124},[118,36820,33487],{"class":1967},[118,36822,33490],{"class":128},[118,36824,36825],{"class":120,"line":33471},[118,36826,33496],{"class":187},[118,36828,36829,36831,36833,36835,36837,36839,36841,36843],{"class":120,"line":33476},[118,36830,33502],{"class":128},[118,36832,31686],{"class":5221},[118,36834,174],{"class":124},[118,36836,129],{"class":128},[118,36838,626],{"class":177},[118,36840,506],{"class":128},[118,36842,421],{"class":177},[118,36844,30490],{"class":128},[118,36846,36847],{"class":120,"line":33482},[118,36848,33522],{"class":187},[118,36850,36851],{"class":120,"line":33493},[118,36852,33528],{"class":187},[118,36854,36855],{"class":120,"line":33499},[118,36856,33534],{"class":187},[118,36858,36859,36861,36863,36865,36867,36869,36871],{"class":120,"line":33519},[118,36860,31720],{"class":128},[118,36862,346],{"class":177},[118,36864,506],{"class":128},[118,36866,206],{"class":177},[118,36868,506],{"class":128},[118,36870,346],{"class":177},[118,36872,135],{"class":128},[118,36874,36875],{"class":120,"line":33525},[118,36876,33557],{"class":187},[118,36878,36879],{"class":120,"line":33531},[118,36880,33563],{"class":187},[118,36882,36883],{"class":120,"line":33537},[118,36884,33569],{"class":187},[118,36886,36887],{"class":120,"line":33554},[118,36888,33575],{"class":187},[118,36890,36891],{"class":120,"line":33560},[118,36892,33581],{"class":187},[118,36894,36895,36897,36899,36901,36903,36905,36907,36909,36911],{"class":120,"line":33566},[118,36896,33587],{"class":128},[118,36898,33590],{"class":233},[118,36900,33593],{"class":128},[118,36902,33596],{"class":233},[118,36904,506],{"class":128},[118,36906,33601],{"class":5221},[118,36908,174],{"class":124},[118,36910,33606],{"class":233},[118,36912,135],{"class":128},[118,36914,36915,36917,36919,36921,36923,36925,36927,36929,36931],{"class":120,"line":33572},[118,36916,33587],{"class":128},[118,36918,33590],{"class":233},[118,36920,33618],{"class":128},[118,36922,33621],{"class":233},[118,36924,506],{"class":128},[118,36926,33601],{"class":5221},[118,36928,174],{"class":124},[118,36930,33630],{"class":233},[118,36932,135],{"class":128},[118,36934,36935],{"class":120,"line":33578},[118,36936,33638],{"class":187},[118,36938,36939],{"class":120,"line":33584},[118,36940,33644],{"class":128},[118,36942,36943],{"class":120,"line":33611},[118,36944,33650],{"class":187},[118,36946,36947,36949,36951],{"class":120,"line":33635},[118,36948,33656],{"class":128},[118,36950,33659],{"class":233},[118,36952,135],{"class":128},[118,36954,36955,36957,36959],{"class":120,"line":33641},[118,36956,33667],{"class":128},[118,36958,33670],{"class":233},[118,36960,135],{"class":128},[118,36962,36963],{"class":120,"line":33647},[118,36964,33678],{"class":187},[118,36966,36967,36969,36971,36973,36975,36977,36979],{"class":120,"line":33653},[118,36968,31720],{"class":128},[118,36970,346],{"class":177},[118,36972,506],{"class":128},[118,36974,206],{"class":177},[118,36976,506],{"class":128},[118,36978,206],{"class":177},[118,36980,135],{"class":128},[118,36982,36983,36985,36987,36989,36991,36993,36995,36997,36999],{"class":120,"line":33664},[118,36984,33587],{"class":128},[118,36986,33590],{"class":233},[118,36988,33705],{"class":128},[118,36990,33596],{"class":233},[118,36992,506],{"class":128},[118,36994,33601],{"class":5221},[118,36996,174],{"class":124},[118,36998,33716],{"class":233},[118,37000,135],{"class":128},[118,37002,37003,37005,37007,37009,37011,37013,37015,37017,37019],{"class":120,"line":33675},[118,37004,33587],{"class":128},[118,37006,33590],{"class":233},[118,37008,33728],{"class":128},[118,37010,33621],{"class":233},[118,37012,506],{"class":128},[118,37014,33601],{"class":5221},[118,37016,174],{"class":124},[118,37018,33739],{"class":233},[118,37020,135],{"class":128},[118,37022,37023],{"class":120,"line":33681},[118,37024,33747],{"class":187},[118,37026,37027],{"class":120,"line":33698},[118,37028,33644],{"class":128},[118,37030,37031,37033,37035],{"class":120,"line":33721},[118,37032,33656],{"class":128},[118,37034,33590],{"class":233},[118,37036,135],{"class":128},[118,37038,37039,37041,37043],{"class":120,"line":33744},[118,37040,33667],{"class":128},[118,37042,33769],{"class":233},[118,37044,135],{"class":128},[118,37046,37047],{"class":120,"line":33750},[118,37048,33777],{"class":128},[118,37050,37051],{"class":120,"line":33755},[118,37052,2404],{"emptyLinePlaceholder":45},[118,37054,37055],{"class":120,"line":33764},[118,37056,33788],{"class":187},[118,37058,37059,37061,37063,37065,37067],{"class":120,"line":33774},[118,37060,1535],{"class":124},[118,37062,31213],{"class":177},[118,37064,2953],{"class":124},[118,37066,31218],{"class":233},[118,37068,3743],{"class":128},[118,37070,37071],{"class":120,"line":33780},[118,37072,33807],{"class":187},[118,37074,37075,37078,37080],{"class":120,"line":33785},[118,37076,37077],{"class":128},"    AlexNet",[118,37079,174],{"class":124},[118,37081,37082],{"class":128},"AlexNet()\n",[118,37084,37085,37087,37089],{"class":120,"line":33791},[118,37086,33824],{"class":128},[118,37088,174],{"class":124},[118,37090,33829],{"class":128},[118,37092,37093,37095,37097,37100,37102,37104,37106],{"class":120,"line":33804},[118,37094,33386],{"class":128},[118,37096,174],{"class":124},[118,37098,37099],{"class":128},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[118,37101,33842],{"class":5221},[118,37103,174],{"class":124},[118,37105,828],{"class":177},[118,37107,135],{"class":128},[118,37109,37110],{"class":120,"line":33810},[118,37111,33854],{"class":128},[72,37113,37114],{"start":1183},[75,37115,33867],{},[109,37117,37119],{"className":30371,"code":37118,"language":30373,"meta":39,"style":39},"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",[115,37120,37121,37127,37137,37147,37157,37161,37171,37181,37192,37196,37200,37204,37212,37228,37238,37254,37264,37278,37282,37292,37302,37312,37318,37322,37326,37334,37338,37354,37362,37366,37370,37378,37386,37390,37394,37398,37402,37408,37412,37422,37430,37438,37442,37446,37450,37458,37462,37478,37482,37486,37490,37502,37506,37518,37522,37526,37538,37542,37552,37556,37560,37572,37576,37584,37588,37592,37600,37604,37612,37616,37620,37624,37628,37632,37648,37656,37660,37664,37712,37718,37722,37732,37740,37748,37752,37756,37760,37764,37772,37776,37792,37796,37804,37812],{"__ignoreMap":39},[118,37122,37123,37125],{"class":120,"line":121},[118,37124,30385],{"class":124},[118,37126,30388],{"class":128},[118,37128,37129,37131,37133,37135],{"class":120,"line":40},[118,37130,30385],{"class":124},[118,37132,31408],{"class":128},[118,37134,31376],{"class":124},[118,37136,31413],{"class":128},[118,37138,37139,37141,37143,37145],{"class":120,"line":1183},[118,37140,30730],{"class":124},[118,37142,33895],{"class":128},[118,37144,30385],{"class":124},[118,37146,33900],{"class":128},[118,37148,37149,37151,37153,37155],{"class":120,"line":1198},[118,37150,30730],{"class":124},[118,37152,31391],{"class":128},[118,37154,30385],{"class":124},[118,37156,31396],{"class":128},[118,37158,37159],{"class":120,"line":1204},[118,37160,33915],{"class":187},[118,37162,37163,37165,37167,37169],{"class":120,"line":1218},[118,37164,30730],{"class":124},[118,37166,31361],{"class":128},[118,37168,30385],{"class":124},[118,37170,31366],{"class":128},[118,37172,37173,37175,37177,37179],{"class":120,"line":1224},[118,37174,30730],{"class":124},[118,37176,31907],{"class":128},[118,37178,30385],{"class":124},[118,37180,35550],{"class":128},[118,37182,37183,37185,37188,37190],{"class":120,"line":1315},[118,37184,30730],{"class":124},[118,37186,37187],{"class":128}," 练习.AlexNet.model ",[118,37189,30385],{"class":124},[118,37191,35550],{"class":128},[118,37193,37194],{"class":120,"line":1321},[118,37195,2404],{"emptyLinePlaceholder":45},[118,37197,37198],{"class":120,"line":1333},[118,37199,2404],{"emptyLinePlaceholder":45},[118,37201,37202],{"class":120,"line":1616},[118,37203,33944],{"class":187},[118,37205,37206,37208,37210],{"class":120,"line":1621},[118,37207,31940],{"class":124},[118,37209,33951],{"class":1967},[118,37211,31946],{"class":128},[118,37213,37214,37216,37218,37220,37222,37224,37226],{"class":120,"line":1627},[118,37215,33958],{"class":128},[118,37217,174],{"class":124},[118,37219,31448],{"class":128},[118,37221,31451],{"class":5221},[118,37223,174],{"class":124},[118,37225,31456],{"class":233},[118,37227,31459],{"class":128},[118,37229,37230,37232,37234,37236],{"class":120,"line":1632},[118,37231,33975],{"class":5221},[118,37233,174],{"class":124},[118,37235,33980],{"class":177},[118,37237,31459],{"class":128},[118,37239,37240,37242,37244,37246,37248,37250,37252],{"class":120,"line":1646},[118,37241,33987],{"class":5221},[118,37243,174],{"class":124},[118,37245,31486],{"class":128},[118,37247,31489],{"class":5221},[118,37249,174],{"class":124},[118,37251,35442],{"class":177},[118,37253,31497],{"class":128},[118,37255,37256,37258,37260,37262],{"class":120,"line":1651},[118,37257,34004],{"class":5221},[118,37259,174],{"class":124},[118,37261,31469],{"class":177},[118,37263,135],{"class":128},[118,37265,37266,37268,37270,37272,37274,37276],{"class":120,"line":1657},[118,37267,34015],{"class":128},[118,37269,174],{"class":124},[118,37271,31527],{"class":128},[118,37273,31530],{"class":5221},[118,37275,174],{"class":124},[118,37277,34026],{"class":128},[118,37279,37280],{"class":120,"line":1678},[118,37281,34031],{"class":187},[118,37283,37284,37286,37288,37290],{"class":120,"line":1683},[118,37285,34036],{"class":5221},[118,37287,174],{"class":124},[118,37289,346],{"class":177},[118,37291,31459],{"class":128},[118,37293,37294,37296,37298,37300],{"class":120,"line":1697},[118,37295,34047],{"class":5221},[118,37297,174],{"class":124},[118,37299,31469],{"class":177},[118,37301,31459],{"class":128},[118,37303,37304,37306,37308,37310],{"class":120,"line":1702},[118,37305,34058],{"class":5221},[118,37307,174],{"class":124},[118,37309,320],{"class":177},[118,37311,135],{"class":128},[118,37313,37314,37316],{"class":120,"line":1731},[118,37315,4094],{"class":124},[118,37317,34071],{"class":128},[118,37319,37320],{"class":120,"line":1736},[118,37321,2404],{"emptyLinePlaceholder":45},[118,37323,37324],{"class":120,"line":1753},[118,37325,34080],{"class":187},[118,37327,37328,37330,37332],{"class":120,"line":1758},[118,37329,31940],{"class":124},[118,37331,34087],{"class":1967},[118,37333,34090],{"class":128},[118,37335,37336],{"class":120,"line":1763},[118,37337,34095],{"class":187},[118,37339,37340,37342,37344,37346,37348,37350,37352],{"class":120,"line":1768},[118,37341,31230],{"class":128},[118,37343,174],{"class":124},[118,37345,31237],{"class":233},[118,37347,1708],{"class":124},[118,37349,31242],{"class":128},[118,37351,1705],{"class":124},[118,37353,34112],{"class":233},[118,37355,37356,37358,37360],{"class":120,"line":1782},[118,37357,31282],{"class":128},[118,37359,174],{"class":124},[118,37361,32282],{"class":128},[118,37363,37364],{"class":120,"line":1787},[118,37365,2404],{"emptyLinePlaceholder":45},[118,37367,37368],{"class":120,"line":2581},[118,37369,34129],{"class":187},[118,37371,37372,37374,37376],{"class":120,"line":2595},[118,37373,34134],{"class":128},[118,37375,174],{"class":124},[118,37377,32335],{"class":177},[118,37379,37380,37382,37384],{"class":120,"line":2603},[118,37381,34143],{"class":128},[118,37383,174],{"class":124},[118,37385,3089],{"class":177},[118,37387,37388],{"class":120,"line":2608},[118,37389,2404],{"emptyLinePlaceholder":45},[118,37391,37392],{"class":120,"line":2614},[118,37393,34156],{"class":187},[118,37395,37396],{"class":120,"line":2620},[118,37397,34161],{"class":187},[118,37399,37400],{"class":120,"line":2625},[118,37401,34166],{"class":187},[118,37403,37404,37406],{"class":120,"line":7953},[118,37405,34171],{"class":124},[118,37407,32877],{"class":128},[118,37409,37410],{"class":120,"line":7977},[118,37411,34178],{"class":187},[118,37413,37414,37416,37418,37420],{"class":120,"line":7982},[118,37415,3407],{"class":124},[118,37417,34185],{"class":128},[118,37419,26036],{"class":124},[118,37421,34190],{"class":128},[118,37423,37424,37426,37428],{"class":120,"line":7988},[118,37425,34195],{"class":128},[118,37427,174],{"class":124},[118,37429,34200],{"class":128},[118,37431,37432,37434,37436],{"class":120,"line":8015},[118,37433,34205],{"class":128},[118,37435,174],{"class":124},[118,37437,34210],{"class":128},[118,37439,37440],{"class":120,"line":8020},[118,37441,34215],{"class":187},[118,37443,37444],{"class":120,"line":8026},[118,37445,32868],{"class":128},[118,37447,37448],{"class":120,"line":8038},[118,37449,34224],{"class":187},[118,37451,37452,37454,37456],{"class":120,"line":8050},[118,37453,32653],{"class":128},[118,37455,174],{"class":124},[118,37457,34233],{"class":128},[118,37459,37460],{"class":120,"line":8062},[118,37461,34238],{"class":187},[118,37463,37464,37466,37468,37470,37472,37474,37476],{"class":120,"line":9721},[118,37465,32670],{"class":128},[118,37467,174],{"class":124},[118,37469,32675],{"class":128},[118,37471,32678],{"class":5221},[118,37473,174],{"class":124},[118,37475,346],{"class":177},[118,37477,135],{"class":128},[118,37479,37480],{"class":120,"line":9746},[118,37481,34259],{"class":187},[118,37483,37484],{"class":120,"line":9769},[118,37485,34264],{"class":187},[118,37487,37488],{"class":120,"line":9793},[118,37489,34269],{"class":187},[118,37491,37492,37494,37496,37498,37500],{"class":120,"line":9798},[118,37493,34274],{"class":128},[118,37495,9482],{"class":124},[118,37497,32780],{"class":128},[118,37499,2953],{"class":124},[118,37501,34283],{"class":128},[118,37503,37504],{"class":120,"line":9803},[118,37505,34288],{"class":187},[118,37507,37508,37510,37512,37514,37516],{"class":120,"line":9808},[118,37509,34293],{"class":128},[118,37511,9482],{"class":124},[118,37513,34298],{"class":128},[118,37515,320],{"class":177},[118,37517,135],{"class":128},[118,37519,37520],{"class":120,"line":9817},[118,37521,2404],{"emptyLinePlaceholder":45},[118,37523,37524],{"class":120,"line":9822},[118,37525,34311],{"class":187},[118,37527,37528,37530,37532,37534,37536],{"class":120,"line":9828},[118,37529,34316],{"class":128},[118,37531,174],{"class":124},[118,37533,34321],{"class":128},[118,37535,712],{"class":124},[118,37537,34326],{"class":128},[118,37539,37540],{"class":120,"line":9849},[118,37541,34331],{"class":187},[118,37543,37544,37546,37548,37550],{"class":120,"line":9855},[118,37545,32444],{"class":177},[118,37547,129],{"class":128},[118,37549,34340],{"class":233},[118,37551,34343],{"class":128},[118,37553,37554],{"class":120,"line":9869},[118,37555,2404],{"emptyLinePlaceholder":45},[118,37557,37558],{"class":120,"line":9875},[118,37559,34352],{"class":187},[118,37561,37562,37564,37566,37568,37570],{"class":120,"line":9902},[118,37563,1535],{"class":124},[118,37565,31213],{"class":177},[118,37567,2953],{"class":124},[118,37569,31218],{"class":233},[118,37571,3743],{"class":128},[118,37573,37574],{"class":120,"line":9911},[118,37575,34369],{"class":187},[118,37577,37578,37580,37582],{"class":120,"line":9917},[118,37579,31282],{"class":128},[118,37581,174],{"class":124},[118,37583,37082],{"class":128},[118,37585,37586],{"class":120,"line":9925},[118,37587,34382],{"class":187},[118,37589,37590],{"class":120,"line":9930},[118,37591,34387],{"class":187},[118,37593,37594,37596,37598],{"class":120,"line":16609},[118,37595,34392],{"class":128},[118,37597,34395],{"class":233},[118,37599,30490],{"class":128},[118,37601,37602],{"class":120,"line":16615},[118,37603,34402],{"class":187},[118,37605,37606,37608,37610],{"class":120,"line":16638},[118,37607,34015],{"class":128},[118,37609,174],{"class":124},[118,37611,34411],{"class":128},[118,37613,37614],{"class":120,"line":16644},[118,37615,34416],{"class":187},[118,37617,37618],{"class":120,"line":16667},[118,37619,34421],{"class":128},[118,37621,37622],{"class":120,"line":16681},[118,37623,2404],{"emptyLinePlaceholder":45},[118,37625,37626],{"class":120,"line":16701},[118,37627,34430],{"class":187},[118,37629,37630],{"class":120,"line":16707},[118,37631,34435],{"class":187},[118,37633,37634,37636,37638,37640,37642,37644,37646],{"class":120,"line":16718},[118,37635,31230],{"class":128},[118,37637,174],{"class":124},[118,37639,31237],{"class":233},[118,37641,1708],{"class":124},[118,37643,31242],{"class":128},[118,37645,1705],{"class":124},[118,37647,34112],{"class":233},[118,37649,37650,37652,37654],{"class":120,"line":16741},[118,37651,31282],{"class":128},[118,37653,174],{"class":124},[118,37655,32282],{"class":128},[118,37657,37658],{"class":120,"line":16763},[118,37659,34464],{"class":187},[118,37661,37662],{"class":120,"line":16768},[118,37663,34469],{"class":187},[118,37665,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702,37704,37706,37708,37710],{"class":120,"line":16774},[118,37667,34474],{"class":128},[118,37669,174],{"class":124},[118,37671,1018],{"class":128},[118,37673,34481],{"class":233},[118,37675,506],{"class":128},[118,37677,34486],{"class":233},[118,37679,506],{"class":128},[118,37681,34491],{"class":233},[118,37683,506],{"class":128},[118,37685,34496],{"class":233},[118,37687,506],{"class":128},[118,37689,34501],{"class":233},[118,37691,506],{"class":128},[118,37693,34506],{"class":233},[118,37695,506],{"class":128},[118,37697,34511],{"class":233},[118,37699,506],{"class":128},[118,37701,34516],{"class":233},[118,37703,506],{"class":128},[118,37705,34521],{"class":233},[118,37707,506],{"class":128},[118,37709,34526],{"class":233},[118,37711,33239],{"class":128},[118,37713,37714,37716],{"class":120,"line":16788},[118,37715,34171],{"class":124},[118,37717,32877],{"class":128},[118,37719,37720],{"class":120,"line":16801},[118,37721,34539],{"class":187},[118,37723,37724,37726,37728,37730],{"class":120,"line":16806},[118,37725,3407],{"class":124},[118,37727,34546],{"class":128},[118,37729,26036],{"class":124},[118,37731,34190],{"class":128},[118,37733,37734,37736,37738],{"class":120,"line":16820},[118,37735,32603],{"class":128},[118,37737,174],{"class":124},[118,37739,32608],{"class":128},[118,37741,37742,37744,37746],{"class":120,"line":16825},[118,37743,32618],{"class":128},[118,37745,174],{"class":124},[118,37747,32623],{"class":128},[118,37749,37750],{"class":120,"line":16831},[118,37751,2404],{"emptyLinePlaceholder":45},[118,37753,37754],{"class":120,"line":16836},[118,37755,34575],{"class":187},[118,37757,37758],{"class":120,"line":16850},[118,37759,32868],{"class":128},[118,37761,37762],{"class":120,"line":16855},[118,37763,34584],{"class":187},[118,37765,37766,37768,37770],{"class":120,"line":16860},[118,37767,32653],{"class":128},[118,37769,174],{"class":124},[118,37771,32658],{"class":128},[118,37773,37774],{"class":120,"line":16874},[118,37775,34597],{"class":187},[118,37777,37778,37780,37782,37784,37786,37788,37790],{"class":120,"line":16886},[118,37779,32670],{"class":128},[118,37781,174],{"class":124},[118,37783,32675],{"class":128},[118,37785,32678],{"class":5221},[118,37787,174],{"class":124},[118,37789,346],{"class":177},[118,37791,135],{"class":128},[118,37793,37794],{"class":120,"line":16891},[118,37795,34618],{"class":187},[118,37797,37798,37800,37802],{"class":120,"line":16904},[118,37799,34623],{"class":128},[118,37801,174],{"class":124},[118,37803,34628],{"class":128},[118,37805,37806,37808,37810],{"class":120,"line":16909},[118,37807,34633],{"class":128},[118,37809,174],{"class":124},[118,37811,34638],{"class":128},[118,37813,37814,37816,37818,37820,37822,37824,37826,37828],{"class":120,"line":16914},[118,37815,34643],{"class":177},[118,37817,129],{"class":128},[118,37819,34648],{"class":233},[118,37821,34651],{"class":128},[118,37823,34654],{"class":233},[118,37825,506],{"class":128},[118,37827,34659],{"class":233},[118,37829,34662],{"class":128},[89,37831,37833],{"id":37832},"_22vgg","2.2.VGG",[22003,37835,37837],{"id":37836},"_221原理","2.2.1.原理",[15,37839,37840],{},[1466,37841],{"alt":39,"src":37842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[15,37844,37845],{},[1466,37846],{"alt":39,"src":37847},"\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",[15,37849,37850],{},[1466,37851],{"alt":39,"src":37852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[15,37854,37855],{},"参数详细描述：",[15,37857,37858],{},[1466,37859],{"alt":39,"src":37860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[15,37862,37863],{},[1466,37864],{"alt":39,"src":37865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[15,37867,37868],{},[1466,37869],{"alt":39,"src":37870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[15,37872,37873],{},[1466,37874],{"alt":39,"src":37875},"\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",[15,37877,37878],{},[1466,37879],{"alt":39,"src":37880},"\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",[22003,37882,37884],{"id":37883},"_222代码实现","2.2.2.代码实现",[72,37886,37887],{},[75,37888,37889],{},"网络搭建",[109,37891,37893],{"className":30371,"code":37892,"language":30373,"meta":39,"style":39},"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",[115,37894,37895,37901,37913,37923,37933,37937,37954,37962,37981,37986,37991,38003,38041,38046,38082,38086,38115,38120,38125,38136,38172,38176,38212,38216,38244,38248,38253,38264,38300,38304,38340,38344,38380,38384,38412,38416,38421,38432,38469,38473,38509,38513,38549,38553,38581,38585,38590,38601,38637,38641,38677,38681,38717,38721,38749,38753,38758,38769,38774,38779,38784,38805,38809,38821,38825,38837,38841,38845,38850,38855,38870,38875,38885,38890,38905,38910,38929,38934,38943,38948,38958,38963,38968,38982,38987,39001,39009,39013,39017,39025,39036,39047,39058,39069,39080,39091,39097,39101,39106,39119,39139,39145,39154],{"__ignoreMap":39},[118,37896,37897,37899],{"class":120,"line":121},[118,37898,30385],{"class":124},[118,37900,30388],{"class":128},[118,37902,37903,37905,37908,37910],{"class":120,"line":40},[118,37904,30730],{"class":124},[118,37906,37907],{"class":128}," sympy.core.sympify ",[118,37909,30385],{"class":124},[118,37911,37912],{"class":128}," kernS\n",[118,37914,37915,37917,37919,37921],{"class":120,"line":1183},[118,37916,30730],{"class":124},[118,37918,30733],{"class":128},[118,37920,30385],{"class":124},[118,37922,30738],{"class":128},[118,37924,37925,37927,37929,37931],{"class":120,"line":1198},[118,37926,30730],{"class":124},[118,37928,30750],{"class":128},[118,37930,30385],{"class":124},[118,37932,30755],{"class":128},[118,37934,37935],{"class":120,"line":1204},[118,37936,2404],{"emptyLinePlaceholder":45},[118,37938,37939,37941,37944,37946,37948,37950,37952],{"class":120,"line":1218},[118,37940,14699],{"class":124},[118,37942,37943],{"class":1967}," VGG16",[118,37945,129],{"class":128},[118,37947,30771],{"class":1967},[118,37949,686],{"class":128},[118,37951,30776],{"class":1967},[118,37953,30779],{"class":128},[118,37955,37956,37958,37960],{"class":120,"line":1224},[118,37957,30794],{"class":124},[118,37959,30797],{"class":177},[118,37961,30800],{"class":128},[118,37963,37964,37966,37968,37971,37973,37975,37977,37979],{"class":120,"line":1315},[118,37965,30810],{"class":177},[118,37967,129],{"class":128},[118,37969,37970],{"class":177},"VGG16",[118,37972,12440],{"class":128},[118,37974,30816],{"class":177},[118,37976,30819],{"class":128},[118,37978,30822],{"class":177},[118,37980,1980],{"class":128},[118,37982,37983],{"class":120,"line":1321},[118,37984,37985],{"class":187},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[118,37987,37988],{"class":120,"line":1333},[118,37989,37990],{"class":187},"        # 这里用的是灰度图\n",[118,37992,37993,37995,37998,38000],{"class":120,"line":1616},[118,37994,30838],{"class":177},[118,37996,37997],{"class":128},".block1",[118,37999,174],{"class":124},[118,38001,38002],{"class":128},"nn.Sequential(\n",[118,38004,38005,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026,38028,38030,38032,38034,38036,38038],{"class":120,"line":1621},[118,38006,38007],{"class":128},"            nn.Conv2d(",[118,38009,30849],{"class":5221},[118,38011,174],{"class":124},[118,38013,346],{"class":177},[118,38015,506],{"class":128},[118,38017,30858],{"class":5221},[118,38019,174],{"class":124},[118,38021,332],{"class":177},[118,38023,506],{"class":128},[118,38025,30867],{"class":5221},[118,38027,174],{"class":124},[118,38029,200],{"class":177},[118,38031,506],{"class":128},[118,38033,30876],{"class":5221},[118,38035,174],{"class":124},[118,38037,346],{"class":177},[118,38039,38040],{"class":128},"),\n",[118,38042,38043],{"class":120,"line":1627},[118,38044,38045],{"class":128},"            nn.ReLU(),\n",[118,38047,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074,38076,38078,38080],{"class":120,"line":1632},[118,38049,38007],{"class":128},[118,38051,30849],{"class":5221},[118,38053,174],{"class":124},[118,38055,332],{"class":177},[118,38057,506],{"class":128},[118,38059,30858],{"class":5221},[118,38061,174],{"class":124},[118,38063,332],{"class":177},[118,38065,506],{"class":128},[118,38067,30867],{"class":5221},[118,38069,174],{"class":124},[118,38071,200],{"class":177},[118,38073,506],{"class":128},[118,38075,30876],{"class":5221},[118,38077,174],{"class":124},[118,38079,346],{"class":177},[118,38081,38040],{"class":128},[118,38083,38084],{"class":120,"line":1646},[118,38085,38045],{"class":128},[118,38087,38088,38091,38093,38095,38097,38099,38101,38103,38105,38107,38109,38111,38113],{"class":120,"line":1651},[118,38089,38090],{"class":128},"            nn.MaxPool2d(",[118,38092,30867],{"class":5221},[118,38094,174],{"class":124},[118,38096,206],{"class":177},[118,38098,506],{"class":128},[118,38100,30922],{"class":5221},[118,38102,174],{"class":124},[118,38104,206],{"class":177},[118,38106,506],{"class":128},[118,38108,30876],{"class":5221},[118,38110,174],{"class":124},[118,38112,320],{"class":177},[118,38114,135],{"class":128},[118,38116,38117],{"class":120,"line":1657},[118,38118,38119],{"class":128},"        )\n",[118,38121,38122],{"class":120,"line":1678},[118,38123,38124],{"class":187},"        # 第二层\n",[118,38126,38127,38129,38132,38134],{"class":120,"line":1683},[118,38128,30838],{"class":177},[118,38130,38131],{"class":128},".block2",[118,38133,174],{"class":124},[118,38135,38002],{"class":128},[118,38137,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170],{"class":120,"line":1697},[118,38139,38007],{"class":128},[118,38141,30849],{"class":5221},[118,38143,174],{"class":124},[118,38145,332],{"class":177},[118,38147,506],{"class":128},[118,38149,30858],{"class":5221},[118,38151,174],{"class":124},[118,38153,32063],{"class":177},[118,38155,506],{"class":128},[118,38157,30867],{"class":5221},[118,38159,174],{"class":124},[118,38161,200],{"class":177},[118,38163,506],{"class":128},[118,38165,30876],{"class":5221},[118,38167,174],{"class":124},[118,38169,346],{"class":177},[118,38171,38040],{"class":128},[118,38173,38174],{"class":120,"line":1702},[118,38175,38045],{"class":128},[118,38177,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206,38208,38210],{"class":120,"line":1731},[118,38179,38007],{"class":128},[118,38181,30849],{"class":5221},[118,38183,174],{"class":124},[118,38185,32063],{"class":177},[118,38187,506],{"class":128},[118,38189,30858],{"class":5221},[118,38191,174],{"class":124},[118,38193,32063],{"class":177},[118,38195,506],{"class":128},[118,38197,30867],{"class":5221},[118,38199,174],{"class":124},[118,38201,200],{"class":177},[118,38203,506],{"class":128},[118,38205,30876],{"class":5221},[118,38207,174],{"class":124},[118,38209,346],{"class":177},[118,38211,38040],{"class":128},[118,38213,38214],{"class":120,"line":1736},[118,38215,38045],{"class":128},[118,38217,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242],{"class":120,"line":1753},[118,38219,38090],{"class":128},[118,38221,30867],{"class":5221},[118,38223,174],{"class":124},[118,38225,206],{"class":177},[118,38227,506],{"class":128},[118,38229,30922],{"class":5221},[118,38231,174],{"class":124},[118,38233,206],{"class":177},[118,38235,506],{"class":128},[118,38237,30876],{"class":5221},[118,38239,174],{"class":124},[118,38241,320],{"class":177},[118,38243,135],{"class":128},[118,38245,38246],{"class":120,"line":1758},[118,38247,38119],{"class":128},[118,38249,38250],{"class":120,"line":1763},[118,38251,38252],{"class":187},"        # 第三层\n",[118,38254,38255,38257,38260,38262],{"class":120,"line":1768},[118,38256,30838],{"class":177},[118,38258,38259],{"class":128},".block3",[118,38261,174],{"class":124},[118,38263,38002],{"class":128},[118,38265,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298],{"class":120,"line":1782},[118,38267,38007],{"class":128},[118,38269,30849],{"class":5221},[118,38271,174],{"class":124},[118,38273,32063],{"class":177},[118,38275,506],{"class":128},[118,38277,30858],{"class":5221},[118,38279,174],{"class":124},[118,38281,34863],{"class":177},[118,38283,506],{"class":128},[118,38285,30867],{"class":5221},[118,38287,174],{"class":124},[118,38289,200],{"class":177},[118,38291,506],{"class":128},[118,38293,30876],{"class":5221},[118,38295,174],{"class":124},[118,38297,346],{"class":177},[118,38299,38040],{"class":128},[118,38301,38302],{"class":120,"line":1787},[118,38303,38045],{"class":128},[118,38305,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334,38336,38338],{"class":120,"line":2581},[118,38307,38007],{"class":128},[118,38309,30849],{"class":5221},[118,38311,174],{"class":124},[118,38313,34863],{"class":177},[118,38315,506],{"class":128},[118,38317,30858],{"class":5221},[118,38319,174],{"class":124},[118,38321,34863],{"class":177},[118,38323,506],{"class":128},[118,38325,30867],{"class":5221},[118,38327,174],{"class":124},[118,38329,200],{"class":177},[118,38331,506],{"class":128},[118,38333,30876],{"class":5221},[118,38335,174],{"class":124},[118,38337,346],{"class":177},[118,38339,38040],{"class":128},[118,38341,38342],{"class":120,"line":2595},[118,38343,38045],{"class":128},[118,38345,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378],{"class":120,"line":2603},[118,38347,38007],{"class":128},[118,38349,30849],{"class":5221},[118,38351,174],{"class":124},[118,38353,34863],{"class":177},[118,38355,506],{"class":128},[118,38357,30858],{"class":5221},[118,38359,174],{"class":124},[118,38361,34863],{"class":177},[118,38363,506],{"class":128},[118,38365,30867],{"class":5221},[118,38367,174],{"class":124},[118,38369,200],{"class":177},[118,38371,506],{"class":128},[118,38373,30876],{"class":5221},[118,38375,174],{"class":124},[118,38377,346],{"class":177},[118,38379,38040],{"class":128},[118,38381,38382],{"class":120,"line":2608},[118,38383,38045],{"class":128},[118,38385,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410],{"class":120,"line":2614},[118,38387,38090],{"class":128},[118,38389,30867],{"class":5221},[118,38391,174],{"class":124},[118,38393,206],{"class":177},[118,38395,506],{"class":128},[118,38397,30922],{"class":5221},[118,38399,174],{"class":124},[118,38401,206],{"class":177},[118,38403,506],{"class":128},[118,38405,30876],{"class":5221},[118,38407,174],{"class":124},[118,38409,320],{"class":177},[118,38411,135],{"class":128},[118,38413,38414],{"class":120,"line":2620},[118,38415,38119],{"class":128},[118,38417,38418],{"class":120,"line":2625},[118,38419,38420],{"class":187},"        # 第四层\n",[118,38422,38423,38425,38428,38430],{"class":120,"line":7953},[118,38424,30838],{"class":177},[118,38426,38427],{"class":128},".block4",[118,38429,174],{"class":124},[118,38431,38002],{"class":128},[118,38433,38434,38436,38438,38440,38442,38444,38446,38448,38451,38453,38455,38457,38459,38461,38463,38465,38467],{"class":120,"line":7977},[118,38435,38007],{"class":128},[118,38437,30849],{"class":5221},[118,38439,174],{"class":124},[118,38441,34863],{"class":177},[118,38443,506],{"class":128},[118,38445,30858],{"class":5221},[118,38447,174],{"class":124},[118,38449,38450],{"class":177},"512",[118,38452,506],{"class":128},[118,38454,30867],{"class":5221},[118,38456,174],{"class":124},[118,38458,200],{"class":177},[118,38460,506],{"class":128},[118,38462,30876],{"class":5221},[118,38464,174],{"class":124},[118,38466,346],{"class":177},[118,38468,38040],{"class":128},[118,38470,38471],{"class":120,"line":7982},[118,38472,38045],{"class":128},[118,38474,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505,38507],{"class":120,"line":7988},[118,38476,38007],{"class":128},[118,38478,30849],{"class":5221},[118,38480,174],{"class":124},[118,38482,38450],{"class":177},[118,38484,506],{"class":128},[118,38486,30858],{"class":5221},[118,38488,174],{"class":124},[118,38490,38450],{"class":177},[118,38492,506],{"class":128},[118,38494,30867],{"class":5221},[118,38496,174],{"class":124},[118,38498,200],{"class":177},[118,38500,506],{"class":128},[118,38502,30876],{"class":5221},[118,38504,174],{"class":124},[118,38506,346],{"class":177},[118,38508,38040],{"class":128},[118,38510,38511],{"class":120,"line":8015},[118,38512,38045],{"class":128},[118,38514,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543,38545,38547],{"class":120,"line":8020},[118,38516,38007],{"class":128},[118,38518,30849],{"class":5221},[118,38520,174],{"class":124},[118,38522,38450],{"class":177},[118,38524,506],{"class":128},[118,38526,30858],{"class":5221},[118,38528,174],{"class":124},[118,38530,38450],{"class":177},[118,38532,506],{"class":128},[118,38534,30867],{"class":5221},[118,38536,174],{"class":124},[118,38538,200],{"class":177},[118,38540,506],{"class":128},[118,38542,30876],{"class":5221},[118,38544,174],{"class":124},[118,38546,346],{"class":177},[118,38548,38040],{"class":128},[118,38550,38551],{"class":120,"line":8026},[118,38552,38045],{"class":128},[118,38554,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577,38579],{"class":120,"line":8038},[118,38556,38090],{"class":128},[118,38558,30867],{"class":5221},[118,38560,174],{"class":124},[118,38562,206],{"class":177},[118,38564,506],{"class":128},[118,38566,30922],{"class":5221},[118,38568,174],{"class":124},[118,38570,206],{"class":177},[118,38572,506],{"class":128},[118,38574,30876],{"class":5221},[118,38576,174],{"class":124},[118,38578,320],{"class":177},[118,38580,135],{"class":128},[118,38582,38583],{"class":120,"line":8050},[118,38584,38119],{"class":128},[118,38586,38587],{"class":120,"line":8062},[118,38588,38589],{"class":187},"        # 第五层\n",[118,38591,38592,38594,38597,38599],{"class":120,"line":9721},[118,38593,30838],{"class":177},[118,38595,38596],{"class":128},".block5",[118,38598,174],{"class":124},[118,38600,38002],{"class":128},[118,38602,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635],{"class":120,"line":9746},[118,38604,38007],{"class":128},[118,38606,30849],{"class":5221},[118,38608,174],{"class":124},[118,38610,38450],{"class":177},[118,38612,506],{"class":128},[118,38614,30858],{"class":5221},[118,38616,174],{"class":124},[118,38618,38450],{"class":177},[118,38620,506],{"class":128},[118,38622,30867],{"class":5221},[118,38624,174],{"class":124},[118,38626,200],{"class":177},[118,38628,506],{"class":128},[118,38630,30876],{"class":5221},[118,38632,174],{"class":124},[118,38634,346],{"class":177},[118,38636,38040],{"class":128},[118,38638,38639],{"class":120,"line":9769},[118,38640,38045],{"class":128},[118,38642,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675],{"class":120,"line":9793},[118,38644,38007],{"class":128},[118,38646,30849],{"class":5221},[118,38648,174],{"class":124},[118,38650,38450],{"class":177},[118,38652,506],{"class":128},[118,38654,30858],{"class":5221},[118,38656,174],{"class":124},[118,38658,38450],{"class":177},[118,38660,506],{"class":128},[118,38662,30867],{"class":5221},[118,38664,174],{"class":124},[118,38666,200],{"class":177},[118,38668,506],{"class":128},[118,38670,30876],{"class":5221},[118,38672,174],{"class":124},[118,38674,346],{"class":177},[118,38676,38040],{"class":128},[118,38678,38679],{"class":120,"line":9798},[118,38680,38045],{"class":128},[118,38682,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715],{"class":120,"line":9803},[118,38684,38007],{"class":128},[118,38686,30849],{"class":5221},[118,38688,174],{"class":124},[118,38690,38450],{"class":177},[118,38692,506],{"class":128},[118,38694,30858],{"class":5221},[118,38696,174],{"class":124},[118,38698,38450],{"class":177},[118,38700,506],{"class":128},[118,38702,30867],{"class":5221},[118,38704,174],{"class":124},[118,38706,200],{"class":177},[118,38708,506],{"class":128},[118,38710,30876],{"class":5221},[118,38712,174],{"class":124},[118,38714,346],{"class":177},[118,38716,38040],{"class":128},[118,38718,38719],{"class":120,"line":9808},[118,38720,38045],{"class":128},[118,38722,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747],{"class":120,"line":9817},[118,38724,38090],{"class":128},[118,38726,30867],{"class":5221},[118,38728,174],{"class":124},[118,38730,206],{"class":177},[118,38732,506],{"class":128},[118,38734,30922],{"class":5221},[118,38736,174],{"class":124},[118,38738,206],{"class":177},[118,38740,506],{"class":128},[118,38742,30876],{"class":5221},[118,38744,174],{"class":124},[118,38746,320],{"class":177},[118,38748,135],{"class":128},[118,38750,38751],{"class":120,"line":9822},[118,38752,38119],{"class":128},[118,38754,38755],{"class":120,"line":9828},[118,38756,38757],{"class":187},"        # 全连接层\n",[118,38759,38760,38762,38765,38767],{"class":120,"line":9849},[118,38761,30838],{"class":177},[118,38763,38764],{"class":128},".block6",[118,38766,174],{"class":124},[118,38768,38002],{"class":128},[118,38770,38771],{"class":120,"line":9855},[118,38772,38773],{"class":187},"            # 平展操作\n",[118,38775,38776],{"class":120,"line":9869},[118,38777,38778],{"class":187},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[118,38780,38781],{"class":120,"line":9875},[118,38782,38783],{"class":128},"            nn.Flatten(),\n",[118,38785,38786,38789,38791,38793,38795,38797,38799,38801,38803],{"class":120,"line":9902},[118,38787,38788],{"class":128},"            nn.Linear(",[118,38790,497],{"class":177},[118,38792,583],{"class":124},[118,38794,497],{"class":177},[118,38796,583],{"class":124},[118,38798,38450],{"class":177},[118,38800,506],{"class":128},[118,38802,34863],{"class":177},[118,38804,38040],{"class":128},[118,38806,38807],{"class":120,"line":9911},[118,38808,38045],{"class":128},[118,38810,38811,38813,38815,38817,38819],{"class":120,"line":9917},[118,38812,38788],{"class":128},[118,38814,34863],{"class":177},[118,38816,506],{"class":128},[118,38818,32063],{"class":177},[118,38820,38040],{"class":128},[118,38822,38823],{"class":120,"line":9925},[118,38824,38045],{"class":128},[118,38826,38827,38829,38831,38833,38835],{"class":120,"line":9930},[118,38828,38788],{"class":128},[118,38830,32063],{"class":177},[118,38832,506],{"class":128},[118,38834,574],{"class":177},[118,38836,135],{"class":128},[118,38838,38839],{"class":120,"line":16609},[118,38840,38119],{"class":128},[118,38842,38843],{"class":120,"line":16615},[118,38844,2404],{"emptyLinePlaceholder":45},[118,38846,38847],{"class":120,"line":16638},[118,38848,38849],{"class":187},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[118,38851,38852],{"class":120,"line":16644},[118,38853,38854],{"class":187},"        # 循环遍历模型\n",[118,38856,38857,38859,38862,38864,38867],{"class":120,"line":16667},[118,38858,3407],{"class":124},[118,38860,38861],{"class":128}," m ",[118,38863,26036],{"class":124},[118,38865,38866],{"class":177}," self",[118,38868,38869],{"class":128},".modules():\n",[118,38871,38872],{"class":120,"line":16681},[118,38873,38874],{"class":187},"            # print(m)\n",[118,38876,38877,38879,38882],{"class":120,"line":16701},[118,38878,4646],{"class":124},[118,38880,38881],{"class":177}," isinstance",[118,38883,38884],{"class":128},"(m,nn.Conv2d):\n",[118,38886,38887],{"class":120,"line":16707},[118,38888,38889],{"class":187},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[118,38891,38892,38895,38898,38900,38903],{"class":120,"line":16718},[118,38893,38894],{"class":128},"                nn.init.kaiming_normal_(m.weight,",[118,38896,38897],{"class":5221},"nonlinearity",[118,38899,174],{"class":124},[118,38901,38902],{"class":233},"'relu'",[118,38904,135],{"class":128},[118,38906,38907],{"class":120,"line":16741},[118,38908,38909],{"class":187},"                # 判断b参数是否存在\n",[118,38911,38912,38915,38918,38921,38924,38927],{"class":120,"line":16763},[118,38913,38914],{"class":124},"                if",[118,38916,38917],{"class":128}," m.bias ",[118,38919,38920],{"class":124},"is",[118,38922,38923],{"class":124}," not",[118,38925,38926],{"class":177}," None",[118,38928,3743],{"class":128},[118,38930,38931],{"class":120,"line":16768},[118,38932,38933],{"class":187},"                    # 如果参数不存在的化初始化b=0\n",[118,38935,38936,38939,38941],{"class":120,"line":16774},[118,38937,38938],{"class":128},"                    nn.init.constant_(m.bias,",[118,38940,320],{"class":177},[118,38942,135],{"class":128},[118,38944,38945],{"class":120,"line":16788},[118,38946,38947],{"class":187},"            # 全连接层初始化\n",[118,38949,38950,38953,38955],{"class":120,"line":16801},[118,38951,38952],{"class":124},"            elif",[118,38954,38881],{"class":177},[118,38956,38957],{"class":128},"(m,nn.Linear):\n",[118,38959,38960],{"class":120,"line":16806},[118,38961,38962],{"class":187},"                # 这个初始化方法是利用的是正太分布的方式\n",[118,38964,38965],{"class":120,"line":16820},[118,38966,38967],{"class":187},"                # 均值为0，方差为0.01\n",[118,38969,38970,38973,38975,38977,38980],{"class":120,"line":16825},[118,38971,38972],{"class":128},"                nn.init.normal_(m.weight,",[118,38974,320],{"class":177},[118,38976,506],{"class":128},[118,38978,38979],{"class":177},"0.01",[118,38981,135],{"class":128},[118,38983,38984],{"class":120,"line":16831},[118,38985,38986],{"class":187},"                # 初始化b参数\n",[118,38988,38989,38991,38993,38995,38997,38999],{"class":120,"line":16836},[118,38990,38914],{"class":124},[118,38992,38917],{"class":128},[118,38994,38920],{"class":124},[118,38996,38923],{"class":124},[118,38998,38926],{"class":177},[118,39000,3743],{"class":128},[118,39002,39003,39005,39007],{"class":120,"line":16850},[118,39004,38938],{"class":128},[118,39006,320],{"class":177},[118,39008,135],{"class":128},[118,39010,39011],{"class":120,"line":16855},[118,39012,2404],{"emptyLinePlaceholder":45},[118,39014,39015],{"class":120,"line":16860},[118,39016,35158],{"class":187},[118,39018,39019,39021,39023],{"class":120,"line":16874},[118,39020,30794],{"class":124},[118,39022,31086],{"class":1967},[118,39024,31089],{"class":128},[118,39026,39027,39029,39031,39033],{"class":120,"line":16886},[118,39028,31094],{"class":128},[118,39030,174],{"class":124},[118,39032,30816],{"class":177},[118,39034,39035],{"class":128},".block1(x)\n",[118,39037,39038,39040,39042,39044],{"class":120,"line":16891},[118,39039,31094],{"class":128},[118,39041,174],{"class":124},[118,39043,30816],{"class":177},[118,39045,39046],{"class":128},".block2(x)\n",[118,39048,39049,39051,39053,39055],{"class":120,"line":16904},[118,39050,31094],{"class":128},[118,39052,174],{"class":124},[118,39054,30816],{"class":177},[118,39056,39057],{"class":128},".block3(x)\n",[118,39059,39060,39062,39064,39066],{"class":120,"line":16909},[118,39061,31094],{"class":128},[118,39063,174],{"class":124},[118,39065,30816],{"class":177},[118,39067,39068],{"class":128},".block4(x)\n",[118,39070,39071,39073,39075,39077],{"class":120,"line":16914},[118,39072,31094],{"class":128},[118,39074,174],{"class":124},[118,39076,30816],{"class":177},[118,39078,39079],{"class":128},".block5(x)\n",[118,39081,39082,39084,39086,39088],{"class":120,"line":16919},[118,39083,31094],{"class":128},[118,39085,174],{"class":124},[118,39087,30816],{"class":177},[118,39089,39090],{"class":128},".block6(x)\n",[118,39092,39093,39095],{"class":120,"line":16932},[118,39094,14757],{"class":124},[118,39096,31202],{"class":128},[118,39098,39099],{"class":120,"line":16937},[118,39100,2404],{"emptyLinePlaceholder":45},[118,39102,39103],{"class":120,"line":32626},[118,39104,39105],{"class":187},"# 验证模型\n",[118,39107,39108,39110,39112,39114,39117],{"class":120,"line":32632},[118,39109,1535],{"class":124},[118,39111,31213],{"class":177},[118,39113,2953],{"class":124},[118,39115,39116],{"class":233},"'__main__'",[118,39118,3743],{"class":128},[118,39120,39121,39123,39125,39127,39129,39131,39133,39135,39137],{"class":120,"line":32638},[118,39122,31230],{"class":128},[118,39124,174],{"class":124},[118,39126,30444],{"class":128},[118,39128,31237],{"class":233},[118,39130,1708],{"class":124},[118,39132,31242],{"class":128},[118,39134,1705],{"class":124},[118,39136,30469],{"class":233},[118,39138,135],{"class":128},[118,39140,39141,39143],{"class":120,"line":32644},[118,39142,31292],{"class":177},[118,39144,30478],{"class":128},[118,39146,39147,39149,39151],{"class":120,"line":32650},[118,39148,31282],{"class":128},[118,39150,174],{"class":124},[118,39152,39153],{"class":128},"VGG16().to(device)\n",[118,39155,39156,39158,39160,39162,39164,39166,39168,39170],{"class":120,"line":32661},[118,39157,31292],{"class":177},[118,39159,31295],{"class":128},[118,39161,346],{"class":177},[118,39163,506],{"class":128},[118,39165,31494],{"class":177},[118,39167,506],{"class":128},[118,39169,31494],{"class":177},[118,39171,31308],{"class":128},[72,39173,39174],{"start":40},[75,39175,39176],{},"训练代码",[15,39178,39179],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[15,39181,39182],{},"解决方式:",[15,39184,39185],{},"①权重初始化",[109,39187,39189],{"className":30371,"code":39188,"language":30373,"meta":39,"style":39},"# 权重初始化,保证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",[115,39190,39191,39196,39201,39213,39218,39226,39231,39244,39249,39263,39268,39277,39282,39291,39296,39301,39314,39319,39333],{"__ignoreMap":39},[118,39192,39193],{"class":120,"line":121},[118,39194,39195],{"class":187},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[118,39197,39198],{"class":120,"line":40},[118,39199,39200],{"class":187},"# 循环遍历模型\n",[118,39202,39203,39205,39207,39209,39211],{"class":120,"line":1183},[118,39204,3029],{"class":124},[118,39206,38861],{"class":128},[118,39208,26036],{"class":124},[118,39210,38866],{"class":177},[118,39212,38869],{"class":128},[118,39214,39215],{"class":120,"line":1198},[118,39216,39217],{"class":187},"    # print(m)\n",[118,39219,39220,39222,39224],{"class":120,"line":1204},[118,39221,3105],{"class":124},[118,39223,38881],{"class":177},[118,39225,38884],{"class":128},[118,39227,39228],{"class":120,"line":1218},[118,39229,39230],{"class":187},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[118,39232,39233,39236,39238,39240,39242],{"class":120,"line":1224},[118,39234,39235],{"class":128},"        nn.init.kaiming_normal_(m.weight,",[118,39237,38897],{"class":5221},[118,39239,174],{"class":124},[118,39241,38902],{"class":233},[118,39243,135],{"class":128},[118,39245,39246],{"class":120,"line":1315},[118,39247,39248],{"class":187},"        # 判断b参数是否存在\n",[118,39250,39251,39253,39255,39257,39259,39261],{"class":120,"line":1321},[118,39252,2501],{"class":124},[118,39254,38917],{"class":128},[118,39256,38920],{"class":124},[118,39258,38923],{"class":124},[118,39260,38926],{"class":177},[118,39262,3743],{"class":128},[118,39264,39265],{"class":120,"line":1333},[118,39266,39267],{"class":187},"            # 如果参数不存在的化初始化b=0\n",[118,39269,39270,39273,39275],{"class":120,"line":1616},[118,39271,39272],{"class":128},"            nn.init.constant_(m.bias,",[118,39274,320],{"class":177},[118,39276,135],{"class":128},[118,39278,39279],{"class":120,"line":1621},[118,39280,39281],{"class":187},"    # 全连接层初始化\n",[118,39283,39284,39287,39289],{"class":120,"line":1627},[118,39285,39286],{"class":124},"    elif",[118,39288,38881],{"class":177},[118,39290,38957],{"class":128},[118,39292,39293],{"class":120,"line":1632},[118,39294,39295],{"class":187},"        # 这个初始化方法是利用的是正太分布的方式\n",[118,39297,39298],{"class":120,"line":1646},[118,39299,39300],{"class":187},"        # 均值为0，方差为0.01\n",[118,39302,39303,39306,39308,39310,39312],{"class":120,"line":1651},[118,39304,39305],{"class":128},"        nn.init.normal_(m.weight,",[118,39307,320],{"class":177},[118,39309,506],{"class":128},[118,39311,38979],{"class":177},[118,39313,135],{"class":128},[118,39315,39316],{"class":120,"line":1657},[118,39317,39318],{"class":187},"        # 初始化b参数\n",[118,39320,39321,39323,39325,39327,39329,39331],{"class":120,"line":1678},[118,39322,2501],{"class":124},[118,39324,38917],{"class":128},[118,39326,38920],{"class":124},[118,39328,38923],{"class":124},[118,39330,38926],{"class":177},[118,39332,3743],{"class":128},[118,39334,39335,39337,39339],{"class":120,"line":1683},[118,39336,39272],{"class":128},[118,39338,320],{"class":177},[118,39340,135],{"class":128},[15,39342,39343],{},"②尽可能地增加批次",[15,39345,39346],{},"训练完整代码：",[109,39348,39349],{"className":30371,"code":37892,"language":30373,"meta":39,"style":39},[115,39350,39351,39357,39367,39377,39387,39391,39407,39415,39433,39437,39441,39451,39487,39491,39527,39531,39559,39563,39567,39577,39613,39617,39653,39657,39685,39689,39693,39703,39739,39743,39779,39783,39819,39823,39851,39855,39859,39869,39905,39909,39945,39949,39985,39989,40017,40021,40025,40035,40071,40075,40111,40115,40151,40155,40183,40187,40191,40201,40205,40209,40213,40233,40237,40249,40253,40265,40269,40273,40277,40281,40293,40297,40305,40309,40321,40325,40339,40343,40351,40355,40363,40367,40371,40383,40387,40401,40409,40413,40417,40425,40435,40445,40455,40465,40475,40485,40491,40495,40499,40511,40531,40537,40545],{"__ignoreMap":39},[118,39352,39353,39355],{"class":120,"line":121},[118,39354,30385],{"class":124},[118,39356,30388],{"class":128},[118,39358,39359,39361,39363,39365],{"class":120,"line":40},[118,39360,30730],{"class":124},[118,39362,37907],{"class":128},[118,39364,30385],{"class":124},[118,39366,37912],{"class":128},[118,39368,39369,39371,39373,39375],{"class":120,"line":1183},[118,39370,30730],{"class":124},[118,39372,30733],{"class":128},[118,39374,30385],{"class":124},[118,39376,30738],{"class":128},[118,39378,39379,39381,39383,39385],{"class":120,"line":1198},[118,39380,30730],{"class":124},[118,39382,30750],{"class":128},[118,39384,30385],{"class":124},[118,39386,30755],{"class":128},[118,39388,39389],{"class":120,"line":1204},[118,39390,2404],{"emptyLinePlaceholder":45},[118,39392,39393,39395,39397,39399,39401,39403,39405],{"class":120,"line":1218},[118,39394,14699],{"class":124},[118,39396,37943],{"class":1967},[118,39398,129],{"class":128},[118,39400,30771],{"class":1967},[118,39402,686],{"class":128},[118,39404,30776],{"class":1967},[118,39406,30779],{"class":128},[118,39408,39409,39411,39413],{"class":120,"line":1224},[118,39410,30794],{"class":124},[118,39412,30797],{"class":177},[118,39414,30800],{"class":128},[118,39416,39417,39419,39421,39423,39425,39427,39429,39431],{"class":120,"line":1315},[118,39418,30810],{"class":177},[118,39420,129],{"class":128},[118,39422,37970],{"class":177},[118,39424,12440],{"class":128},[118,39426,30816],{"class":177},[118,39428,30819],{"class":128},[118,39430,30822],{"class":177},[118,39432,1980],{"class":128},[118,39434,39435],{"class":120,"line":1321},[118,39436,37985],{"class":187},[118,39438,39439],{"class":120,"line":1333},[118,39440,37990],{"class":187},[118,39442,39443,39445,39447,39449],{"class":120,"line":1616},[118,39444,30838],{"class":177},[118,39446,37997],{"class":128},[118,39448,174],{"class":124},[118,39450,38002],{"class":128},[118,39452,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485],{"class":120,"line":1621},[118,39454,38007],{"class":128},[118,39456,30849],{"class":5221},[118,39458,174],{"class":124},[118,39460,346],{"class":177},[118,39462,506],{"class":128},[118,39464,30858],{"class":5221},[118,39466,174],{"class":124},[118,39468,332],{"class":177},[118,39470,506],{"class":128},[118,39472,30867],{"class":5221},[118,39474,174],{"class":124},[118,39476,200],{"class":177},[118,39478,506],{"class":128},[118,39480,30876],{"class":5221},[118,39482,174],{"class":124},[118,39484,346],{"class":177},[118,39486,38040],{"class":128},[118,39488,39489],{"class":120,"line":1627},[118,39490,38045],{"class":128},[118,39492,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521,39523,39525],{"class":120,"line":1632},[118,39494,38007],{"class":128},[118,39496,30849],{"class":5221},[118,39498,174],{"class":124},[118,39500,332],{"class":177},[118,39502,506],{"class":128},[118,39504,30858],{"class":5221},[118,39506,174],{"class":124},[118,39508,332],{"class":177},[118,39510,506],{"class":128},[118,39512,30867],{"class":5221},[118,39514,174],{"class":124},[118,39516,200],{"class":177},[118,39518,506],{"class":128},[118,39520,30876],{"class":5221},[118,39522,174],{"class":124},[118,39524,346],{"class":177},[118,39526,38040],{"class":128},[118,39528,39529],{"class":120,"line":1646},[118,39530,38045],{"class":128},[118,39532,39533,39535,39537,39539,39541,39543,39545,39547,39549,39551,39553,39555,39557],{"class":120,"line":1651},[118,39534,38090],{"class":128},[118,39536,30867],{"class":5221},[118,39538,174],{"class":124},[118,39540,206],{"class":177},[118,39542,506],{"class":128},[118,39544,30922],{"class":5221},[118,39546,174],{"class":124},[118,39548,206],{"class":177},[118,39550,506],{"class":128},[118,39552,30876],{"class":5221},[118,39554,174],{"class":124},[118,39556,320],{"class":177},[118,39558,135],{"class":128},[118,39560,39561],{"class":120,"line":1657},[118,39562,38119],{"class":128},[118,39564,39565],{"class":120,"line":1678},[118,39566,38124],{"class":187},[118,39568,39569,39571,39573,39575],{"class":120,"line":1683},[118,39570,30838],{"class":177},[118,39572,38131],{"class":128},[118,39574,174],{"class":124},[118,39576,38002],{"class":128},[118,39578,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611],{"class":120,"line":1697},[118,39580,38007],{"class":128},[118,39582,30849],{"class":5221},[118,39584,174],{"class":124},[118,39586,332],{"class":177},[118,39588,506],{"class":128},[118,39590,30858],{"class":5221},[118,39592,174],{"class":124},[118,39594,32063],{"class":177},[118,39596,506],{"class":128},[118,39598,30867],{"class":5221},[118,39600,174],{"class":124},[118,39602,200],{"class":177},[118,39604,506],{"class":128},[118,39606,30876],{"class":5221},[118,39608,174],{"class":124},[118,39610,346],{"class":177},[118,39612,38040],{"class":128},[118,39614,39615],{"class":120,"line":1702},[118,39616,38045],{"class":128},[118,39618,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651],{"class":120,"line":1731},[118,39620,38007],{"class":128},[118,39622,30849],{"class":5221},[118,39624,174],{"class":124},[118,39626,32063],{"class":177},[118,39628,506],{"class":128},[118,39630,30858],{"class":5221},[118,39632,174],{"class":124},[118,39634,32063],{"class":177},[118,39636,506],{"class":128},[118,39638,30867],{"class":5221},[118,39640,174],{"class":124},[118,39642,200],{"class":177},[118,39644,506],{"class":128},[118,39646,30876],{"class":5221},[118,39648,174],{"class":124},[118,39650,346],{"class":177},[118,39652,38040],{"class":128},[118,39654,39655],{"class":120,"line":1736},[118,39656,38045],{"class":128},[118,39658,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683],{"class":120,"line":1753},[118,39660,38090],{"class":128},[118,39662,30867],{"class":5221},[118,39664,174],{"class":124},[118,39666,206],{"class":177},[118,39668,506],{"class":128},[118,39670,30922],{"class":5221},[118,39672,174],{"class":124},[118,39674,206],{"class":177},[118,39676,506],{"class":128},[118,39678,30876],{"class":5221},[118,39680,174],{"class":124},[118,39682,320],{"class":177},[118,39684,135],{"class":128},[118,39686,39687],{"class":120,"line":1758},[118,39688,38119],{"class":128},[118,39690,39691],{"class":120,"line":1763},[118,39692,38252],{"class":187},[118,39694,39695,39697,39699,39701],{"class":120,"line":1768},[118,39696,30838],{"class":177},[118,39698,38259],{"class":128},[118,39700,174],{"class":124},[118,39702,38002],{"class":128},[118,39704,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737],{"class":120,"line":1782},[118,39706,38007],{"class":128},[118,39708,30849],{"class":5221},[118,39710,174],{"class":124},[118,39712,32063],{"class":177},[118,39714,506],{"class":128},[118,39716,30858],{"class":5221},[118,39718,174],{"class":124},[118,39720,34863],{"class":177},[118,39722,506],{"class":128},[118,39724,30867],{"class":5221},[118,39726,174],{"class":124},[118,39728,200],{"class":177},[118,39730,506],{"class":128},[118,39732,30876],{"class":5221},[118,39734,174],{"class":124},[118,39736,346],{"class":177},[118,39738,38040],{"class":128},[118,39740,39741],{"class":120,"line":1787},[118,39742,38045],{"class":128},[118,39744,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777],{"class":120,"line":2581},[118,39746,38007],{"class":128},[118,39748,30849],{"class":5221},[118,39750,174],{"class":124},[118,39752,34863],{"class":177},[118,39754,506],{"class":128},[118,39756,30858],{"class":5221},[118,39758,174],{"class":124},[118,39760,34863],{"class":177},[118,39762,506],{"class":128},[118,39764,30867],{"class":5221},[118,39766,174],{"class":124},[118,39768,200],{"class":177},[118,39770,506],{"class":128},[118,39772,30876],{"class":5221},[118,39774,174],{"class":124},[118,39776,346],{"class":177},[118,39778,38040],{"class":128},[118,39780,39781],{"class":120,"line":2595},[118,39782,38045],{"class":128},[118,39784,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817],{"class":120,"line":2603},[118,39786,38007],{"class":128},[118,39788,30849],{"class":5221},[118,39790,174],{"class":124},[118,39792,34863],{"class":177},[118,39794,506],{"class":128},[118,39796,30858],{"class":5221},[118,39798,174],{"class":124},[118,39800,34863],{"class":177},[118,39802,506],{"class":128},[118,39804,30867],{"class":5221},[118,39806,174],{"class":124},[118,39808,200],{"class":177},[118,39810,506],{"class":128},[118,39812,30876],{"class":5221},[118,39814,174],{"class":124},[118,39816,346],{"class":177},[118,39818,38040],{"class":128},[118,39820,39821],{"class":120,"line":2608},[118,39822,38045],{"class":128},[118,39824,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849],{"class":120,"line":2614},[118,39826,38090],{"class":128},[118,39828,30867],{"class":5221},[118,39830,174],{"class":124},[118,39832,206],{"class":177},[118,39834,506],{"class":128},[118,39836,30922],{"class":5221},[118,39838,174],{"class":124},[118,39840,206],{"class":177},[118,39842,506],{"class":128},[118,39844,30876],{"class":5221},[118,39846,174],{"class":124},[118,39848,320],{"class":177},[118,39850,135],{"class":128},[118,39852,39853],{"class":120,"line":2620},[118,39854,38119],{"class":128},[118,39856,39857],{"class":120,"line":2625},[118,39858,38420],{"class":187},[118,39860,39861,39863,39865,39867],{"class":120,"line":7953},[118,39862,30838],{"class":177},[118,39864,38427],{"class":128},[118,39866,174],{"class":124},[118,39868,38002],{"class":128},[118,39870,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903],{"class":120,"line":7977},[118,39872,38007],{"class":128},[118,39874,30849],{"class":5221},[118,39876,174],{"class":124},[118,39878,34863],{"class":177},[118,39880,506],{"class":128},[118,39882,30858],{"class":5221},[118,39884,174],{"class":124},[118,39886,38450],{"class":177},[118,39888,506],{"class":128},[118,39890,30867],{"class":5221},[118,39892,174],{"class":124},[118,39894,200],{"class":177},[118,39896,506],{"class":128},[118,39898,30876],{"class":5221},[118,39900,174],{"class":124},[118,39902,346],{"class":177},[118,39904,38040],{"class":128},[118,39906,39907],{"class":120,"line":7982},[118,39908,38045],{"class":128},[118,39910,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943],{"class":120,"line":7988},[118,39912,38007],{"class":128},[118,39914,30849],{"class":5221},[118,39916,174],{"class":124},[118,39918,38450],{"class":177},[118,39920,506],{"class":128},[118,39922,30858],{"class":5221},[118,39924,174],{"class":124},[118,39926,38450],{"class":177},[118,39928,506],{"class":128},[118,39930,30867],{"class":5221},[118,39932,174],{"class":124},[118,39934,200],{"class":177},[118,39936,506],{"class":128},[118,39938,30876],{"class":5221},[118,39940,174],{"class":124},[118,39942,346],{"class":177},[118,39944,38040],{"class":128},[118,39946,39947],{"class":120,"line":8015},[118,39948,38045],{"class":128},[118,39950,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983],{"class":120,"line":8020},[118,39952,38007],{"class":128},[118,39954,30849],{"class":5221},[118,39956,174],{"class":124},[118,39958,38450],{"class":177},[118,39960,506],{"class":128},[118,39962,30858],{"class":5221},[118,39964,174],{"class":124},[118,39966,38450],{"class":177},[118,39968,506],{"class":128},[118,39970,30867],{"class":5221},[118,39972,174],{"class":124},[118,39974,200],{"class":177},[118,39976,506],{"class":128},[118,39978,30876],{"class":5221},[118,39980,174],{"class":124},[118,39982,346],{"class":177},[118,39984,38040],{"class":128},[118,39986,39987],{"class":120,"line":8026},[118,39988,38045],{"class":128},[118,39990,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015],{"class":120,"line":8038},[118,39992,38090],{"class":128},[118,39994,30867],{"class":5221},[118,39996,174],{"class":124},[118,39998,206],{"class":177},[118,40000,506],{"class":128},[118,40002,30922],{"class":5221},[118,40004,174],{"class":124},[118,40006,206],{"class":177},[118,40008,506],{"class":128},[118,40010,30876],{"class":5221},[118,40012,174],{"class":124},[118,40014,320],{"class":177},[118,40016,135],{"class":128},[118,40018,40019],{"class":120,"line":8050},[118,40020,38119],{"class":128},[118,40022,40023],{"class":120,"line":8062},[118,40024,38589],{"class":187},[118,40026,40027,40029,40031,40033],{"class":120,"line":9721},[118,40028,30838],{"class":177},[118,40030,38596],{"class":128},[118,40032,174],{"class":124},[118,40034,38002],{"class":128},[118,40036,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069],{"class":120,"line":9746},[118,40038,38007],{"class":128},[118,40040,30849],{"class":5221},[118,40042,174],{"class":124},[118,40044,38450],{"class":177},[118,40046,506],{"class":128},[118,40048,30858],{"class":5221},[118,40050,174],{"class":124},[118,40052,38450],{"class":177},[118,40054,506],{"class":128},[118,40056,30867],{"class":5221},[118,40058,174],{"class":124},[118,40060,200],{"class":177},[118,40062,506],{"class":128},[118,40064,30876],{"class":5221},[118,40066,174],{"class":124},[118,40068,346],{"class":177},[118,40070,38040],{"class":128},[118,40072,40073],{"class":120,"line":9769},[118,40074,38045],{"class":128},[118,40076,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109],{"class":120,"line":9793},[118,40078,38007],{"class":128},[118,40080,30849],{"class":5221},[118,40082,174],{"class":124},[118,40084,38450],{"class":177},[118,40086,506],{"class":128},[118,40088,30858],{"class":5221},[118,40090,174],{"class":124},[118,40092,38450],{"class":177},[118,40094,506],{"class":128},[118,40096,30867],{"class":5221},[118,40098,174],{"class":124},[118,40100,200],{"class":177},[118,40102,506],{"class":128},[118,40104,30876],{"class":5221},[118,40106,174],{"class":124},[118,40108,346],{"class":177},[118,40110,38040],{"class":128},[118,40112,40113],{"class":120,"line":9798},[118,40114,38045],{"class":128},[118,40116,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149],{"class":120,"line":9803},[118,40118,38007],{"class":128},[118,40120,30849],{"class":5221},[118,40122,174],{"class":124},[118,40124,38450],{"class":177},[118,40126,506],{"class":128},[118,40128,30858],{"class":5221},[118,40130,174],{"class":124},[118,40132,38450],{"class":177},[118,40134,506],{"class":128},[118,40136,30867],{"class":5221},[118,40138,174],{"class":124},[118,40140,200],{"class":177},[118,40142,506],{"class":128},[118,40144,30876],{"class":5221},[118,40146,174],{"class":124},[118,40148,346],{"class":177},[118,40150,38040],{"class":128},[118,40152,40153],{"class":120,"line":9808},[118,40154,38045],{"class":128},[118,40156,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181],{"class":120,"line":9817},[118,40158,38090],{"class":128},[118,40160,30867],{"class":5221},[118,40162,174],{"class":124},[118,40164,206],{"class":177},[118,40166,506],{"class":128},[118,40168,30922],{"class":5221},[118,40170,174],{"class":124},[118,40172,206],{"class":177},[118,40174,506],{"class":128},[118,40176,30876],{"class":5221},[118,40178,174],{"class":124},[118,40180,320],{"class":177},[118,40182,135],{"class":128},[118,40184,40185],{"class":120,"line":9822},[118,40186,38119],{"class":128},[118,40188,40189],{"class":120,"line":9828},[118,40190,38757],{"class":187},[118,40192,40193,40195,40197,40199],{"class":120,"line":9849},[118,40194,30838],{"class":177},[118,40196,38764],{"class":128},[118,40198,174],{"class":124},[118,40200,38002],{"class":128},[118,40202,40203],{"class":120,"line":9855},[118,40204,38773],{"class":187},[118,40206,40207],{"class":120,"line":9869},[118,40208,38778],{"class":187},[118,40210,40211],{"class":120,"line":9875},[118,40212,38783],{"class":128},[118,40214,40215,40217,40219,40221,40223,40225,40227,40229,40231],{"class":120,"line":9902},[118,40216,38788],{"class":128},[118,40218,497],{"class":177},[118,40220,583],{"class":124},[118,40222,497],{"class":177},[118,40224,583],{"class":124},[118,40226,38450],{"class":177},[118,40228,506],{"class":128},[118,40230,34863],{"class":177},[118,40232,38040],{"class":128},[118,40234,40235],{"class":120,"line":9911},[118,40236,38045],{"class":128},[118,40238,40239,40241,40243,40245,40247],{"class":120,"line":9917},[118,40240,38788],{"class":128},[118,40242,34863],{"class":177},[118,40244,506],{"class":128},[118,40246,32063],{"class":177},[118,40248,38040],{"class":128},[118,40250,40251],{"class":120,"line":9925},[118,40252,38045],{"class":128},[118,40254,40255,40257,40259,40261,40263],{"class":120,"line":9930},[118,40256,38788],{"class":128},[118,40258,32063],{"class":177},[118,40260,506],{"class":128},[118,40262,574],{"class":177},[118,40264,135],{"class":128},[118,40266,40267],{"class":120,"line":16609},[118,40268,38119],{"class":128},[118,40270,40271],{"class":120,"line":16615},[118,40272,2404],{"emptyLinePlaceholder":45},[118,40274,40275],{"class":120,"line":16638},[118,40276,38849],{"class":187},[118,40278,40279],{"class":120,"line":16644},[118,40280,38854],{"class":187},[118,40282,40283,40285,40287,40289,40291],{"class":120,"line":16667},[118,40284,3407],{"class":124},[118,40286,38861],{"class":128},[118,40288,26036],{"class":124},[118,40290,38866],{"class":177},[118,40292,38869],{"class":128},[118,40294,40295],{"class":120,"line":16681},[118,40296,38874],{"class":187},[118,40298,40299,40301,40303],{"class":120,"line":16701},[118,40300,4646],{"class":124},[118,40302,38881],{"class":177},[118,40304,38884],{"class":128},[118,40306,40307],{"class":120,"line":16707},[118,40308,38889],{"class":187},[118,40310,40311,40313,40315,40317,40319],{"class":120,"line":16718},[118,40312,38894],{"class":128},[118,40314,38897],{"class":5221},[118,40316,174],{"class":124},[118,40318,38902],{"class":233},[118,40320,135],{"class":128},[118,40322,40323],{"class":120,"line":16741},[118,40324,38909],{"class":187},[118,40326,40327,40329,40331,40333,40335,40337],{"class":120,"line":16763},[118,40328,38914],{"class":124},[118,40330,38917],{"class":128},[118,40332,38920],{"class":124},[118,40334,38923],{"class":124},[118,40336,38926],{"class":177},[118,40338,3743],{"class":128},[118,40340,40341],{"class":120,"line":16768},[118,40342,38933],{"class":187},[118,40344,40345,40347,40349],{"class":120,"line":16774},[118,40346,38938],{"class":128},[118,40348,320],{"class":177},[118,40350,135],{"class":128},[118,40352,40353],{"class":120,"line":16788},[118,40354,38947],{"class":187},[118,40356,40357,40359,40361],{"class":120,"line":16801},[118,40358,38952],{"class":124},[118,40360,38881],{"class":177},[118,40362,38957],{"class":128},[118,40364,40365],{"class":120,"line":16806},[118,40366,38962],{"class":187},[118,40368,40369],{"class":120,"line":16820},[118,40370,38967],{"class":187},[118,40372,40373,40375,40377,40379,40381],{"class":120,"line":16825},[118,40374,38972],{"class":128},[118,40376,320],{"class":177},[118,40378,506],{"class":128},[118,40380,38979],{"class":177},[118,40382,135],{"class":128},[118,40384,40385],{"class":120,"line":16831},[118,40386,38986],{"class":187},[118,40388,40389,40391,40393,40395,40397,40399],{"class":120,"line":16836},[118,40390,38914],{"class":124},[118,40392,38917],{"class":128},[118,40394,38920],{"class":124},[118,40396,38923],{"class":124},[118,40398,38926],{"class":177},[118,40400,3743],{"class":128},[118,40402,40403,40405,40407],{"class":120,"line":16850},[118,40404,38938],{"class":128},[118,40406,320],{"class":177},[118,40408,135],{"class":128},[118,40410,40411],{"class":120,"line":16855},[118,40412,2404],{"emptyLinePlaceholder":45},[118,40414,40415],{"class":120,"line":16860},[118,40416,35158],{"class":187},[118,40418,40419,40421,40423],{"class":120,"line":16874},[118,40420,30794],{"class":124},[118,40422,31086],{"class":1967},[118,40424,31089],{"class":128},[118,40426,40427,40429,40431,40433],{"class":120,"line":16886},[118,40428,31094],{"class":128},[118,40430,174],{"class":124},[118,40432,30816],{"class":177},[118,40434,39035],{"class":128},[118,40436,40437,40439,40441,40443],{"class":120,"line":16891},[118,40438,31094],{"class":128},[118,40440,174],{"class":124},[118,40442,30816],{"class":177},[118,40444,39046],{"class":128},[118,40446,40447,40449,40451,40453],{"class":120,"line":16904},[118,40448,31094],{"class":128},[118,40450,174],{"class":124},[118,40452,30816],{"class":177},[118,40454,39057],{"class":128},[118,40456,40457,40459,40461,40463],{"class":120,"line":16909},[118,40458,31094],{"class":128},[118,40460,174],{"class":124},[118,40462,30816],{"class":177},[118,40464,39068],{"class":128},[118,40466,40467,40469,40471,40473],{"class":120,"line":16914},[118,40468,31094],{"class":128},[118,40470,174],{"class":124},[118,40472,30816],{"class":177},[118,40474,39079],{"class":128},[118,40476,40477,40479,40481,40483],{"class":120,"line":16919},[118,40478,31094],{"class":128},[118,40480,174],{"class":124},[118,40482,30816],{"class":177},[118,40484,39090],{"class":128},[118,40486,40487,40489],{"class":120,"line":16932},[118,40488,14757],{"class":124},[118,40490,31202],{"class":128},[118,40492,40493],{"class":120,"line":16937},[118,40494,2404],{"emptyLinePlaceholder":45},[118,40496,40497],{"class":120,"line":32626},[118,40498,39105],{"class":187},[118,40500,40501,40503,40505,40507,40509],{"class":120,"line":32632},[118,40502,1535],{"class":124},[118,40504,31213],{"class":177},[118,40506,2953],{"class":124},[118,40508,39116],{"class":233},[118,40510,3743],{"class":128},[118,40512,40513,40515,40517,40519,40521,40523,40525,40527,40529],{"class":120,"line":32638},[118,40514,31230],{"class":128},[118,40516,174],{"class":124},[118,40518,30444],{"class":128},[118,40520,31237],{"class":233},[118,40522,1708],{"class":124},[118,40524,31242],{"class":128},[118,40526,1705],{"class":124},[118,40528,30469],{"class":233},[118,40530,135],{"class":128},[118,40532,40533,40535],{"class":120,"line":32644},[118,40534,31292],{"class":177},[118,40536,30478],{"class":128},[118,40538,40539,40541,40543],{"class":120,"line":32650},[118,40540,31282],{"class":128},[118,40542,174],{"class":124},[118,40544,39153],{"class":128},[118,40546,40547,40549,40551,40553,40555,40557,40559,40561],{"class":120,"line":32661},[118,40548,31292],{"class":177},[118,40550,31295],{"class":128},[118,40552,346],{"class":177},[118,40554,506],{"class":128},[118,40556,31494],{"class":177},[118,40558,506],{"class":128},[118,40560,31494],{"class":177},[118,40562,31308],{"class":128},[72,40564,40565],{"start":1183},[75,40566,40567],{},"测试代码",[109,40569,40571],{"className":30371,"code":40570,"language":30373,"meta":39,"style":39},"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",[115,40572,40573,40579,40589,40599,40603,40613,40624,40628,40632,40636,40644,40660,40670,40686,40696,40710,40714,40724,40734,40744,40750,40754,40758,40766,40770,40786,40794,40798,40802,40810,40818,40822,40826,40830,40834,40840,40844,40854,40862,40870,40874,40878,40882,40890,40894,40910,40914,40918,40922,40934,40938,40950,40954,40958,40970,40974,40984,40988,40992,41004,41008,41017,41021,41025,41033,41037,41045,41049,41053,41057,41061,41065,41081,41089,41093,41097,41145,41151,41155,41165,41173,41181,41185,41189,41193,41197,41205,41209,41225,41229,41237,41245],{"__ignoreMap":39},[118,40574,40575,40577],{"class":120,"line":121},[118,40576,30385],{"class":124},[118,40578,30388],{"class":128},[118,40580,40581,40583,40585,40587],{"class":120,"line":40},[118,40582,30385],{"class":124},[118,40584,31408],{"class":128},[118,40586,31376],{"class":124},[118,40588,31413],{"class":128},[118,40590,40591,40593,40595,40597],{"class":120,"line":1183},[118,40592,30730],{"class":124},[118,40594,31391],{"class":128},[118,40596,30385],{"class":124},[118,40598,31396],{"class":128},[118,40600,40601],{"class":120,"line":1198},[118,40602,33915],{"class":187},[118,40604,40605,40607,40609,40611],{"class":120,"line":1204},[118,40606,30730],{"class":124},[118,40608,31361],{"class":128},[118,40610,30385],{"class":124},[118,40612,31366],{"class":128},[118,40614,40615,40617,40619,40621],{"class":120,"line":1218},[118,40616,30730],{"class":124},[118,40618,31907],{"class":128},[118,40620,30385],{"class":124},[118,40622,40623],{"class":177}," VGG16\n",[118,40625,40626],{"class":120,"line":1224},[118,40627,2404],{"emptyLinePlaceholder":45},[118,40629,40630],{"class":120,"line":1315},[118,40631,2404],{"emptyLinePlaceholder":45},[118,40633,40634],{"class":120,"line":1321},[118,40635,33944],{"class":187},[118,40637,40638,40640,40642],{"class":120,"line":1333},[118,40639,31940],{"class":124},[118,40641,33951],{"class":1967},[118,40643,31946],{"class":128},[118,40645,40646,40648,40650,40652,40654,40656,40658],{"class":120,"line":1616},[118,40647,33958],{"class":128},[118,40649,174],{"class":124},[118,40651,31448],{"class":128},[118,40653,31451],{"class":5221},[118,40655,174],{"class":124},[118,40657,31456],{"class":233},[118,40659,31459],{"class":128},[118,40661,40662,40664,40666,40668],{"class":120,"line":1621},[118,40663,33975],{"class":5221},[118,40665,174],{"class":124},[118,40667,33980],{"class":177},[118,40669,31459],{"class":128},[118,40671,40672,40674,40676,40678,40680,40682,40684],{"class":120,"line":1627},[118,40673,33987],{"class":5221},[118,40675,174],{"class":124},[118,40677,31486],{"class":128},[118,40679,31489],{"class":5221},[118,40681,174],{"class":124},[118,40683,31494],{"class":177},[118,40685,31497],{"class":128},[118,40687,40688,40690,40692,40694],{"class":120,"line":1632},[118,40689,34004],{"class":5221},[118,40691,174],{"class":124},[118,40693,31469],{"class":177},[118,40695,135],{"class":128},[118,40697,40698,40700,40702,40704,40706,40708],{"class":120,"line":1646},[118,40699,34015],{"class":128},[118,40701,174],{"class":124},[118,40703,31527],{"class":128},[118,40705,31530],{"class":5221},[118,40707,174],{"class":124},[118,40709,34026],{"class":128},[118,40711,40712],{"class":120,"line":1651},[118,40713,34031],{"class":187},[118,40715,40716,40718,40720,40722],{"class":120,"line":1657},[118,40717,34036],{"class":5221},[118,40719,174],{"class":124},[118,40721,346],{"class":177},[118,40723,31459],{"class":128},[118,40725,40726,40728,40730,40732],{"class":120,"line":1678},[118,40727,34047],{"class":5221},[118,40729,174],{"class":124},[118,40731,31469],{"class":177},[118,40733,31459],{"class":128},[118,40735,40736,40738,40740,40742],{"class":120,"line":1683},[118,40737,34058],{"class":5221},[118,40739,174],{"class":124},[118,40741,320],{"class":177},[118,40743,135],{"class":128},[118,40745,40746,40748],{"class":120,"line":1697},[118,40747,4094],{"class":124},[118,40749,34071],{"class":128},[118,40751,40752],{"class":120,"line":1702},[118,40753,2404],{"emptyLinePlaceholder":45},[118,40755,40756],{"class":120,"line":1731},[118,40757,34080],{"class":187},[118,40759,40760,40762,40764],{"class":120,"line":1736},[118,40761,31940],{"class":124},[118,40763,34087],{"class":1967},[118,40765,34090],{"class":128},[118,40767,40768],{"class":120,"line":1753},[118,40769,34095],{"class":187},[118,40771,40772,40774,40776,40778,40780,40782,40784],{"class":120,"line":1758},[118,40773,31230],{"class":128},[118,40775,174],{"class":124},[118,40777,31237],{"class":233},[118,40779,1708],{"class":124},[118,40781,31242],{"class":128},[118,40783,1705],{"class":124},[118,40785,34112],{"class":233},[118,40787,40788,40790,40792],{"class":120,"line":1763},[118,40789,31282],{"class":128},[118,40791,174],{"class":124},[118,40793,32282],{"class":128},[118,40795,40796],{"class":120,"line":1768},[118,40797,2404],{"emptyLinePlaceholder":45},[118,40799,40800],{"class":120,"line":1782},[118,40801,34129],{"class":187},[118,40803,40804,40806,40808],{"class":120,"line":1787},[118,40805,34134],{"class":128},[118,40807,174],{"class":124},[118,40809,32335],{"class":177},[118,40811,40812,40814,40816],{"class":120,"line":2581},[118,40813,34143],{"class":128},[118,40815,174],{"class":124},[118,40817,3089],{"class":177},[118,40819,40820],{"class":120,"line":2595},[118,40821,2404],{"emptyLinePlaceholder":45},[118,40823,40824],{"class":120,"line":2603},[118,40825,34156],{"class":187},[118,40827,40828],{"class":120,"line":2608},[118,40829,34161],{"class":187},[118,40831,40832],{"class":120,"line":2614},[118,40833,34166],{"class":187},[118,40835,40836,40838],{"class":120,"line":2620},[118,40837,34171],{"class":124},[118,40839,32877],{"class":128},[118,40841,40842],{"class":120,"line":2625},[118,40843,34178],{"class":187},[118,40845,40846,40848,40850,40852],{"class":120,"line":7953},[118,40847,3407],{"class":124},[118,40849,34185],{"class":128},[118,40851,26036],{"class":124},[118,40853,34190],{"class":128},[118,40855,40856,40858,40860],{"class":120,"line":7977},[118,40857,34195],{"class":128},[118,40859,174],{"class":124},[118,40861,34200],{"class":128},[118,40863,40864,40866,40868],{"class":120,"line":7982},[118,40865,34205],{"class":128},[118,40867,174],{"class":124},[118,40869,34210],{"class":128},[118,40871,40872],{"class":120,"line":7988},[118,40873,34215],{"class":187},[118,40875,40876],{"class":120,"line":8015},[118,40877,32868],{"class":128},[118,40879,40880],{"class":120,"line":8020},[118,40881,34224],{"class":187},[118,40883,40884,40886,40888],{"class":120,"line":8026},[118,40885,32653],{"class":128},[118,40887,174],{"class":124},[118,40889,34233],{"class":128},[118,40891,40892],{"class":120,"line":8038},[118,40893,34238],{"class":187},[118,40895,40896,40898,40900,40902,40904,40906,40908],{"class":120,"line":8050},[118,40897,32670],{"class":128},[118,40899,174],{"class":124},[118,40901,32675],{"class":128},[118,40903,32678],{"class":5221},[118,40905,174],{"class":124},[118,40907,346],{"class":177},[118,40909,135],{"class":128},[118,40911,40912],{"class":120,"line":8062},[118,40913,34259],{"class":187},[118,40915,40916],{"class":120,"line":9721},[118,40917,34264],{"class":187},[118,40919,40920],{"class":120,"line":9746},[118,40921,34269],{"class":187},[118,40923,40924,40926,40928,40930,40932],{"class":120,"line":9769},[118,40925,34274],{"class":128},[118,40927,9482],{"class":124},[118,40929,32780],{"class":128},[118,40931,2953],{"class":124},[118,40933,34283],{"class":128},[118,40935,40936],{"class":120,"line":9793},[118,40937,34288],{"class":187},[118,40939,40940,40942,40944,40946,40948],{"class":120,"line":9798},[118,40941,34293],{"class":128},[118,40943,9482],{"class":124},[118,40945,34298],{"class":128},[118,40947,320],{"class":177},[118,40949,135],{"class":128},[118,40951,40952],{"class":120,"line":9803},[118,40953,2404],{"emptyLinePlaceholder":45},[118,40955,40956],{"class":120,"line":9808},[118,40957,34311],{"class":187},[118,40959,40960,40962,40964,40966,40968],{"class":120,"line":9817},[118,40961,34316],{"class":128},[118,40963,174],{"class":124},[118,40965,34321],{"class":128},[118,40967,712],{"class":124},[118,40969,34326],{"class":128},[118,40971,40972],{"class":120,"line":9822},[118,40973,34331],{"class":187},[118,40975,40976,40978,40980,40982],{"class":120,"line":9828},[118,40977,32444],{"class":177},[118,40979,129],{"class":128},[118,40981,34340],{"class":233},[118,40983,34343],{"class":128},[118,40985,40986],{"class":120,"line":9849},[118,40987,2404],{"emptyLinePlaceholder":45},[118,40989,40990],{"class":120,"line":9855},[118,40991,34352],{"class":187},[118,40993,40994,40996,40998,41000,41002],{"class":120,"line":9869},[118,40995,1535],{"class":124},[118,40997,31213],{"class":177},[118,40999,2953],{"class":124},[118,41001,31218],{"class":233},[118,41003,3743],{"class":128},[118,41005,41006],{"class":120,"line":9875},[118,41007,34369],{"class":187},[118,41009,41010,41012,41014],{"class":120,"line":9902},[118,41011,31282],{"class":128},[118,41013,174],{"class":124},[118,41015,41016],{"class":128},"VGG16()\n",[118,41018,41019],{"class":120,"line":9911},[118,41020,34382],{"class":187},[118,41022,41023],{"class":120,"line":9917},[118,41024,34387],{"class":187},[118,41026,41027,41029,41031],{"class":120,"line":9925},[118,41028,34392],{"class":128},[118,41030,34395],{"class":233},[118,41032,30490],{"class":128},[118,41034,41035],{"class":120,"line":9930},[118,41036,34402],{"class":187},[118,41038,41039,41041,41043],{"class":120,"line":16609},[118,41040,34015],{"class":128},[118,41042,174],{"class":124},[118,41044,34411],{"class":128},[118,41046,41047],{"class":120,"line":16615},[118,41048,34416],{"class":187},[118,41050,41051],{"class":120,"line":16638},[118,41052,34421],{"class":128},[118,41054,41055],{"class":120,"line":16644},[118,41056,2404],{"emptyLinePlaceholder":45},[118,41058,41059],{"class":120,"line":16667},[118,41060,34430],{"class":187},[118,41062,41063],{"class":120,"line":16681},[118,41064,34435],{"class":187},[118,41066,41067,41069,41071,41073,41075,41077,41079],{"class":120,"line":16701},[118,41068,31230],{"class":128},[118,41070,174],{"class":124},[118,41072,31237],{"class":233},[118,41074,1708],{"class":124},[118,41076,31242],{"class":128},[118,41078,1705],{"class":124},[118,41080,34112],{"class":233},[118,41082,41083,41085,41087],{"class":120,"line":16707},[118,41084,31282],{"class":128},[118,41086,174],{"class":124},[118,41088,32282],{"class":128},[118,41090,41091],{"class":120,"line":16718},[118,41092,34464],{"class":187},[118,41094,41095],{"class":120,"line":16741},[118,41096,34469],{"class":187},[118,41098,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135,41137,41139,41141,41143],{"class":120,"line":16763},[118,41100,34474],{"class":128},[118,41102,174],{"class":124},[118,41104,1018],{"class":128},[118,41106,34481],{"class":233},[118,41108,506],{"class":128},[118,41110,34486],{"class":233},[118,41112,506],{"class":128},[118,41114,34491],{"class":233},[118,41116,506],{"class":128},[118,41118,34496],{"class":233},[118,41120,506],{"class":128},[118,41122,34501],{"class":233},[118,41124,506],{"class":128},[118,41126,34506],{"class":233},[118,41128,506],{"class":128},[118,41130,34511],{"class":233},[118,41132,506],{"class":128},[118,41134,34516],{"class":233},[118,41136,506],{"class":128},[118,41138,34521],{"class":233},[118,41140,506],{"class":128},[118,41142,34526],{"class":233},[118,41144,33239],{"class":128},[118,41146,41147,41149],{"class":120,"line":16768},[118,41148,34171],{"class":124},[118,41150,32877],{"class":128},[118,41152,41153],{"class":120,"line":16774},[118,41154,34539],{"class":187},[118,41156,41157,41159,41161,41163],{"class":120,"line":16788},[118,41158,3407],{"class":124},[118,41160,34546],{"class":128},[118,41162,26036],{"class":124},[118,41164,34190],{"class":128},[118,41166,41167,41169,41171],{"class":120,"line":16801},[118,41168,32603],{"class":128},[118,41170,174],{"class":124},[118,41172,32608],{"class":128},[118,41174,41175,41177,41179],{"class":120,"line":16806},[118,41176,32618],{"class":128},[118,41178,174],{"class":124},[118,41180,32623],{"class":128},[118,41182,41183],{"class":120,"line":16820},[118,41184,2404],{"emptyLinePlaceholder":45},[118,41186,41187],{"class":120,"line":16825},[118,41188,34575],{"class":187},[118,41190,41191],{"class":120,"line":16831},[118,41192,32868],{"class":128},[118,41194,41195],{"class":120,"line":16836},[118,41196,34584],{"class":187},[118,41198,41199,41201,41203],{"class":120,"line":16850},[118,41200,32653],{"class":128},[118,41202,174],{"class":124},[118,41204,32658],{"class":128},[118,41206,41207],{"class":120,"line":16855},[118,41208,34597],{"class":187},[118,41210,41211,41213,41215,41217,41219,41221,41223],{"class":120,"line":16860},[118,41212,32670],{"class":128},[118,41214,174],{"class":124},[118,41216,32675],{"class":128},[118,41218,32678],{"class":5221},[118,41220,174],{"class":124},[118,41222,346],{"class":177},[118,41224,135],{"class":128},[118,41226,41227],{"class":120,"line":16874},[118,41228,34618],{"class":187},[118,41230,41231,41233,41235],{"class":120,"line":16886},[118,41232,34623],{"class":128},[118,41234,174],{"class":124},[118,41236,34628],{"class":128},[118,41238,41239,41241,41243],{"class":120,"line":16891},[118,41240,34633],{"class":128},[118,41242,174],{"class":124},[118,41244,34638],{"class":128},[118,41246,41247,41249,41251,41253,41255,41257,41259,41261],{"class":120,"line":16904},[118,41248,34643],{"class":177},[118,41250,129],{"class":128},[118,41252,34648],{"class":233},[118,41254,34651],{"class":128},[118,41256,34654],{"class":233},[118,41258,506],{"class":128},[118,41260,34659],{"class":233},[118,41262,34662],{"class":128},[89,41264,41266],{"id":41265},"_23googlenet","2.3.GoogLeNet",[22003,41268,41270],{"id":41269},"_231原理","2.3.1.原理",[72,41272,41273],{},[75,41274,41275],{},"网络结构",[15,41277,41278],{},[1466,41279],{"alt":39,"src":41280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[15,41282,41283],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[15,41285,41286],{},[1466,41287],{"alt":39,"src":41288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[15,41290,41291],{},[1466,41292],{"alt":39,"src":41293},"\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",[15,41295,41296],{},[1466,41297],{"alt":39,"src":41298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[72,41300,41301],{"start":40},[75,41302,41303],{},"1x1卷积的优点",[15,41305,41306],{},[1466,41307],{"alt":39,"src":41308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[72,41310,41311],{"start":1183},[75,41312,41313],{},"全局平均池化层优点",[15,41315,41316],{},[1466,41317],{"alt":39,"src":41318},"\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",[15,41320,41321],{},[1466,41322],{"alt":39,"src":41323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[72,41325,41326],{"start":1198},[75,41327,41328],{},"参数详细描述",[15,41330,41331],{},[1466,41332],{"alt":39,"src":41333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[15,41335,41336],{},[1466,41337],{"alt":39,"src":41338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[15,41340,41341],{},[1466,41342],{"alt":39,"src":41343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[15,41345,41346],{},[1466,41347],{"alt":39,"src":41348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[15,41350,41351],{},[1466,41352],{"alt":39,"src":41353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[15,41355,41356],{},[1466,41357],{"alt":39,"src":41358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[15,41360,41361],{},[1466,41362],{"alt":39,"src":41363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[15,41365,41366],{},[1466,41367],{"alt":39,"src":41368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[15,41370,41371],{},[1466,41372],{"alt":39,"src":41373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[15,41375,41376],{},[1466,41377],{"alt":39,"src":41378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[15,41380,41381],{},[1466,41382],{"alt":39,"src":41383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[15,41385,41386],{},[1466,41387],{"alt":39,"src":41388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[15,41390,41391],{},[1466,41392],{"alt":39,"src":41393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[15,41395,41396],{},[1466,41397],{"alt":39,"src":41398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[15,41400,41401],{},[1466,41402],{"alt":39,"src":41403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[15,41405,41406],{},[1466,41407],{"alt":39,"src":41408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[15,41410,41411],{},[1466,41412],{"alt":39,"src":41413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[15,41415,41416],{},[1466,41417],{"alt":39,"src":41418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[15,41420,41421],{},[1466,41422],{"alt":39,"src":41423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[15,41425,41426],{},[1466,41427],{"alt":39,"src":41428},"\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",[15,41430,41431],{},[1466,41432],{"alt":39,"src":41433},"\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",[22003,41435,41437],{"id":41436},"_232代码实现","2.3.2.代码实现",[72,41439,41440],{},[75,41441,30704],{},[15,41443,41444],{},"根据原理一步一步搭建即可",[109,41446,41448],{"className":30371,"code":41447,"language":30373,"meta":39,"style":39},"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",[115,41449,41450,41456,41466,41476,41480,41497,41506,41521,41531,41536,41569,41574,41611,41658,41663,41699,41746,41751,41756,41791,41823,41827,41835,41851,41875,41900,41921,41926,41941,41945,41949,41954,41971,41976,41985,42000,42011,42055,42059,42087,42091,42102,42130,42134,42171,42175,42203,42207,42218,42254,42286,42314,42318,42329,42363,42395,42427,42460,42494,42522,42526,42537,42570,42602,42616,42620,42633,42637,42642,42654,42662,42684,42689,42694,42699,42704,42709,42714,42728,42736,42745,42758,42773,42782,42786,42794,42805,42816,42827,42838,42849,42855,42859,42864,42876,42896,42905],{"__ignoreMap":39},[118,41451,41452,41454],{"class":120,"line":121},[118,41453,30385],{"class":124},[118,41455,30388],{"class":128},[118,41457,41458,41460,41462,41464],{"class":120,"line":40},[118,41459,30730],{"class":124},[118,41461,30733],{"class":128},[118,41463,30385],{"class":124},[118,41465,30738],{"class":128},[118,41467,41468,41470,41472,41474],{"class":120,"line":1183},[118,41469,30730],{"class":124},[118,41471,30750],{"class":128},[118,41473,30385],{"class":124},[118,41475,30755],{"class":128},[118,41477,41478],{"class":120,"line":1198},[118,41479,2404],{"emptyLinePlaceholder":45},[118,41481,41482,41484,41487,41489,41491,41493,41495],{"class":120,"line":1204},[118,41483,14699],{"class":124},[118,41485,41486],{"class":1967}," Inception",[118,41488,129],{"class":128},[118,41490,30771],{"class":1967},[118,41492,686],{"class":128},[118,41494,30776],{"class":1967},[118,41496,30779],{"class":128},[118,41498,41499,41501,41503],{"class":120,"line":1218},[118,41500,30794],{"class":124},[118,41502,30797],{"class":177},[118,41504,41505],{"class":128},"(self,in_channels,c1,c2,c3,c4):\n",[118,41507,41508,41510,41513,41515,41517,41519],{"class":120,"line":1224},[118,41509,30810],{"class":177},[118,41511,41512],{"class":128},"(Inception,",[118,41514,30816],{"class":177},[118,41516,30819],{"class":128},[118,41518,30822],{"class":177},[118,41520,1980],{"class":128},[118,41522,41523,41525,41527,41529],{"class":120,"line":1315},[118,41524,30838],{"class":177},[118,41526,34764],{"class":128},[118,41528,174],{"class":124},[118,41530,34769],{"class":128},[118,41532,41533],{"class":120,"line":1321},[118,41534,41535],{"class":187},"        # 路线1：定义1*1卷积\n",[118,41537,41538,41540,41543,41545,41547,41549,41551,41554,41556,41558,41561,41563,41565,41567],{"class":120,"line":1333},[118,41539,30838],{"class":177},[118,41541,41542],{"class":128},".p1_1",[118,41544,174],{"class":124},[118,41546,30846],{"class":128},[118,41548,30849],{"class":5221},[118,41550,174],{"class":124},[118,41552,41553],{"class":128},"in_channels,",[118,41555,30858],{"class":5221},[118,41557,174],{"class":124},[118,41559,41560],{"class":128},"c1,",[118,41562,30867],{"class":5221},[118,41564,174],{"class":124},[118,41566,346],{"class":177},[118,41568,135],{"class":128},[118,41570,41571],{"class":120,"line":1616},[118,41572,41573],{"class":187},"        # 路线2：定义1*1卷积和3*3\n",[118,41575,41576,41578,41581,41583,41585,41587,41589,41591,41593,41595,41598,41600,41603,41605,41607,41609],{"class":120,"line":1621},[118,41577,30838],{"class":177},[118,41579,41580],{"class":128},".p2_1",[118,41582,174],{"class":124},[118,41584,30846],{"class":128},[118,41586,30849],{"class":5221},[118,41588,174],{"class":124},[118,41590,41553],{"class":128},[118,41592,30858],{"class":5221},[118,41594,174],{"class":124},[118,41596,41597],{"class":128},"c2[",[118,41599,320],{"class":177},[118,41601,41602],{"class":128},"],",[118,41604,30867],{"class":5221},[118,41606,174],{"class":124},[118,41608,346],{"class":177},[118,41610,135],{"class":128},[118,41612,41613,41615,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656],{"class":120,"line":1627},[118,41614,30838],{"class":177},[118,41616,41617],{"class":128},".p2_2",[118,41619,174],{"class":124},[118,41621,30846],{"class":128},[118,41623,30849],{"class":5221},[118,41625,174],{"class":124},[118,41627,41597],{"class":128},[118,41629,320],{"class":177},[118,41631,41602],{"class":128},[118,41633,30858],{"class":5221},[118,41635,174],{"class":124},[118,41637,41597],{"class":128},[118,41639,346],{"class":177},[118,41641,41602],{"class":128},[118,41643,30867],{"class":5221},[118,41645,174],{"class":124},[118,41647,200],{"class":177},[118,41649,506],{"class":128},[118,41651,30876],{"class":5221},[118,41653,174],{"class":124},[118,41655,346],{"class":177},[118,41657,135],{"class":128},[118,41659,41660],{"class":120,"line":1632},[118,41661,41662],{"class":187},"        # 路线3：定义1*1卷积和5*5\n",[118,41664,41665,41667,41670,41672,41674,41676,41678,41680,41682,41684,41687,41689,41691,41693,41695,41697],{"class":120,"line":1646},[118,41666,30838],{"class":177},[118,41668,41669],{"class":128},".p3_1",[118,41671,174],{"class":124},[118,41673,30846],{"class":128},[118,41675,30849],{"class":5221},[118,41677,174],{"class":124},[118,41679,41553],{"class":128},[118,41681,30858],{"class":5221},[118,41683,174],{"class":124},[118,41685,41686],{"class":128},"c3[",[118,41688,320],{"class":177},[118,41690,41602],{"class":128},[118,41692,30867],{"class":5221},[118,41694,174],{"class":124},[118,41696,346],{"class":177},[118,41698,135],{"class":128},[118,41700,41701,41703,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744],{"class":120,"line":1651},[118,41702,30838],{"class":177},[118,41704,41705],{"class":128},".p3_2",[118,41707,174],{"class":124},[118,41709,30846],{"class":128},[118,41711,30849],{"class":5221},[118,41713,174],{"class":124},[118,41715,41686],{"class":128},[118,41717,320],{"class":177},[118,41719,41602],{"class":128},[118,41721,30858],{"class":5221},[118,41723,174],{"class":124},[118,41725,41686],{"class":128},[118,41727,346],{"class":177},[118,41729,41602],{"class":128},[118,41731,30867],{"class":5221},[118,41733,174],{"class":124},[118,41735,447],{"class":177},[118,41737,506],{"class":128},[118,41739,30876],{"class":5221},[118,41741,174],{"class":124},[118,41743,206],{"class":177},[118,41745,135],{"class":128},[118,41747,41748],{"class":120,"line":1657},[118,41749,41750],{"class":187},"        # 路线4：定义3*3最大池化和1*1卷积\n",[118,41752,41753],{"class":120,"line":1678},[118,41754,41755],{"class":187},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[118,41757,41758,41760,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789],{"class":120,"line":1683},[118,41759,30838],{"class":177},[118,41761,41762],{"class":128},".p4_1",[118,41764,174],{"class":124},[118,41766,34822],{"class":128},[118,41768,30867],{"class":5221},[118,41770,174],{"class":124},[118,41772,200],{"class":177},[118,41774,506],{"class":128},[118,41776,30922],{"class":5221},[118,41778,174],{"class":124},[118,41780,346],{"class":177},[118,41782,506],{"class":128},[118,41784,30876],{"class":5221},[118,41786,174],{"class":124},[118,41788,346],{"class":177},[118,41790,135],{"class":128},[118,41792,41793,41795,41798,41800,41802,41804,41806,41808,41810,41812,41815,41817,41819,41821],{"class":120,"line":1697},[118,41794,30838],{"class":177},[118,41796,41797],{"class":128},".p4_2",[118,41799,174],{"class":124},[118,41801,30846],{"class":128},[118,41803,30849],{"class":5221},[118,41805,174],{"class":124},[118,41807,41553],{"class":128},[118,41809,30858],{"class":5221},[118,41811,174],{"class":124},[118,41813,41814],{"class":128},"c4,",[118,41816,30867],{"class":5221},[118,41818,174],{"class":124},[118,41820,346],{"class":177},[118,41822,135],{"class":128},[118,41824,41825],{"class":120,"line":1702},[118,41826,2404],{"emptyLinePlaceholder":45},[118,41828,41829,41831,41833],{"class":120,"line":1731},[118,41830,30794],{"class":124},[118,41832,31086],{"class":1967},[118,41834,31089],{"class":128},[118,41836,41837,41840,41842,41844,41846,41848],{"class":120,"line":1736},[118,41838,41839],{"class":128},"        p1",[118,41841,174],{"class":124},[118,41843,30816],{"class":177},[118,41845,35177],{"class":128},[118,41847,30816],{"class":177},[118,41849,41850],{"class":128},".p1_1(x))\n",[118,41852,41853,41855,41857,41859,41861,41863,41866,41868,41870,41872],{"class":120,"line":1753},[118,41854,7090],{"class":128},[118,41856,174],{"class":124},[118,41858,30816],{"class":177},[118,41860,35177],{"class":128},[118,41862,30816],{"class":177},[118,41864,41865],{"class":128},".p2_2(",[118,41867,30816],{"class":177},[118,41869,35177],{"class":128},[118,41871,30816],{"class":177},[118,41873,41874],{"class":128},".p2_1(x))))\n",[118,41876,41877,41880,41882,41884,41886,41888,41891,41893,41895,41897],{"class":120,"line":1758},[118,41878,41879],{"class":128},"        p3",[118,41881,174],{"class":124},[118,41883,30816],{"class":177},[118,41885,35177],{"class":128},[118,41887,30816],{"class":177},[118,41889,41890],{"class":128},".p3_2(",[118,41892,30816],{"class":177},[118,41894,35177],{"class":128},[118,41896,30816],{"class":177},[118,41898,41899],{"class":128},".p3_1(x))))\n",[118,41901,41902,41905,41907,41909,41911,41913,41916,41918],{"class":120,"line":1763},[118,41903,41904],{"class":128},"        p4",[118,41906,174],{"class":124},[118,41908,30816],{"class":177},[118,41910,35177],{"class":128},[118,41912,30816],{"class":177},[118,41914,41915],{"class":128},".p4_2(",[118,41917,30816],{"class":177},[118,41919,41920],{"class":128},".p4_1(x)))\n",[118,41922,41923],{"class":120,"line":1768},[118,41924,41925],{"class":187},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[118,41927,41928,41930,41933,41935,41937,41939],{"class":120,"line":1782},[118,41929,14757],{"class":124},[118,41931,41932],{"class":128}," torch.cat((p1,p2,p3,p4),",[118,41934,32678],{"class":5221},[118,41936,174],{"class":124},[118,41938,346],{"class":177},[118,41940,135],{"class":128},[118,41942,41943],{"class":120,"line":1787},[118,41944,2404],{"emptyLinePlaceholder":45},[118,41946,41947],{"class":120,"line":2581},[118,41948,2404],{"emptyLinePlaceholder":45},[118,41950,41951],{"class":120,"line":2595},[118,41952,41953],{"class":187},"# 搭建GoogLeNet网络\n",[118,41955,41956,41958,41961,41963,41965,41967,41969],{"class":120,"line":2603},[118,41957,14699],{"class":124},[118,41959,41960],{"class":1967}," GoogLeNet",[118,41962,129],{"class":128},[118,41964,30771],{"class":1967},[118,41966,686],{"class":128},[118,41968,30776],{"class":1967},[118,41970,30779],{"class":128},[118,41972,41973],{"class":120,"line":2608},[118,41974,41975],{"class":187},"    # 必须把Inception导入到里边\n",[118,41977,41978,41980,41982],{"class":120,"line":2614},[118,41979,30794],{"class":124},[118,41981,30797],{"class":177},[118,41983,41984],{"class":128},"(self,Inception):\n",[118,41986,41987,41989,41992,41994,41996,41998],{"class":120,"line":2620},[118,41988,30810],{"class":177},[118,41990,41991],{"class":128},"(GoogLeNet,",[118,41993,30816],{"class":177},[118,41995,30819],{"class":128},[118,41997,30822],{"class":177},[118,41999,1980],{"class":128},[118,42001,42002,42004,42007,42009],{"class":120,"line":2625},[118,42003,30838],{"class":177},[118,42005,42006],{"class":128},".b1",[118,42008,174],{"class":124},[118,42010,38002],{"class":128},[118,42012,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045,42047,42049,42051,42053],{"class":120,"line":7953},[118,42014,38007],{"class":128},[118,42016,30849],{"class":5221},[118,42018,174],{"class":124},[118,42020,346],{"class":177},[118,42022,506],{"class":128},[118,42024,30858],{"class":5221},[118,42026,174],{"class":124},[118,42028,332],{"class":177},[118,42030,506],{"class":128},[118,42032,30867],{"class":5221},[118,42034,174],{"class":124},[118,42036,497],{"class":177},[118,42038,506],{"class":128},[118,42040,30922],{"class":5221},[118,42042,174],{"class":124},[118,42044,206],{"class":177},[118,42046,506],{"class":128},[118,42048,30876],{"class":5221},[118,42050,174],{"class":124},[118,42052,200],{"class":177},[118,42054,38040],{"class":128},[118,42056,42057],{"class":120,"line":7977},[118,42058,38045],{"class":128},[118,42060,42061,42063,42065,42067,42069,42071,42073,42075,42077,42079,42081,42083,42085],{"class":120,"line":7982},[118,42062,38090],{"class":128},[118,42064,30867],{"class":5221},[118,42066,174],{"class":124},[118,42068,200],{"class":177},[118,42070,506],{"class":128},[118,42072,30922],{"class":5221},[118,42074,174],{"class":124},[118,42076,206],{"class":177},[118,42078,506],{"class":128},[118,42080,30876],{"class":5221},[118,42082,174],{"class":124},[118,42084,346],{"class":177},[118,42086,135],{"class":128},[118,42088,42089],{"class":120,"line":7988},[118,42090,38119],{"class":128},[118,42092,42093,42095,42098,42100],{"class":120,"line":8015},[118,42094,30838],{"class":177},[118,42096,42097],{"class":128},".b2",[118,42099,174],{"class":124},[118,42101,38002],{"class":128},[118,42103,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128],{"class":120,"line":8020},[118,42105,38007],{"class":128},[118,42107,30849],{"class":5221},[118,42109,174],{"class":124},[118,42111,332],{"class":177},[118,42113,506],{"class":128},[118,42115,30858],{"class":5221},[118,42117,174],{"class":124},[118,42119,332],{"class":177},[118,42121,506],{"class":128},[118,42123,30867],{"class":5221},[118,42125,174],{"class":124},[118,42127,346],{"class":177},[118,42129,38040],{"class":128},[118,42131,42132],{"class":120,"line":8026},[118,42133,38045],{"class":128},[118,42135,42136,42138,42140,42142,42144,42146,42148,42150,42153,42155,42157,42159,42161,42163,42165,42167,42169],{"class":120,"line":8038},[118,42137,38007],{"class":128},[118,42139,30849],{"class":5221},[118,42141,174],{"class":124},[118,42143,332],{"class":177},[118,42145,506],{"class":128},[118,42147,30858],{"class":5221},[118,42149,174],{"class":124},[118,42151,42152],{"class":177},"192",[118,42154,506],{"class":128},[118,42156,30867],{"class":5221},[118,42158,174],{"class":124},[118,42160,200],{"class":177},[118,42162,506],{"class":128},[118,42164,30876],{"class":5221},[118,42166,174],{"class":124},[118,42168,346],{"class":177},[118,42170,38040],{"class":128},[118,42172,42173],{"class":120,"line":8050},[118,42174,38045],{"class":128},[118,42176,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201],{"class":120,"line":8062},[118,42178,38090],{"class":128},[118,42180,30867],{"class":5221},[118,42182,174],{"class":124},[118,42184,200],{"class":177},[118,42186,506],{"class":128},[118,42188,30922],{"class":5221},[118,42190,174],{"class":124},[118,42192,206],{"class":177},[118,42194,506],{"class":128},[118,42196,30876],{"class":5221},[118,42198,174],{"class":124},[118,42200,346],{"class":177},[118,42202,135],{"class":128},[118,42204,42205],{"class":120,"line":9721},[118,42206,38119],{"class":128},[118,42208,42209,42211,42214,42216],{"class":120,"line":9746},[118,42210,30838],{"class":177},[118,42212,42213],{"class":128},".b3",[118,42215,174],{"class":124},[118,42217,38002],{"class":128},[118,42219,42220,42223,42225,42227,42229,42232,42234,42236,42238,42241,42243,42245,42247,42250,42252],{"class":120,"line":9769},[118,42221,42222],{"class":128},"            Inception(",[118,42224,42152],{"class":177},[118,42226,506],{"class":128},[118,42228,332],{"class":177},[118,42230,42231],{"class":128},",(",[118,42233,338],{"class":177},[118,42235,506],{"class":128},[118,42237,32063],{"class":177},[118,42239,42240],{"class":128},"),(",[118,42242,729],{"class":177},[118,42244,506],{"class":128},[118,42246,326],{"class":177},[118,42248,42249],{"class":128},"),",[118,42251,326],{"class":177},[118,42253,38040],{"class":128},[118,42255,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284],{"class":120,"line":9793},[118,42257,42222],{"class":128},[118,42259,34863],{"class":177},[118,42261,506],{"class":128},[118,42263,32063],{"class":177},[118,42265,42231],{"class":128},[118,42267,32063],{"class":177},[118,42269,506],{"class":128},[118,42271,42152],{"class":177},[118,42273,42240],{"class":128},[118,42275,326],{"class":177},[118,42277,506],{"class":128},[118,42279,338],{"class":177},[118,42281,42249],{"class":128},[118,42283,332],{"class":177},[118,42285,38040],{"class":128},[118,42287,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312],{"class":120,"line":9798},[118,42289,38090],{"class":128},[118,42291,30867],{"class":5221},[118,42293,174],{"class":124},[118,42295,200],{"class":177},[118,42297,506],{"class":128},[118,42299,30922],{"class":5221},[118,42301,174],{"class":124},[118,42303,206],{"class":177},[118,42305,506],{"class":128},[118,42307,30876],{"class":5221},[118,42309,174],{"class":124},[118,42311,346],{"class":177},[118,42313,135],{"class":128},[118,42315,42316],{"class":120,"line":9803},[118,42317,38119],{"class":128},[118,42319,42320,42322,42325,42327],{"class":120,"line":9808},[118,42321,30838],{"class":177},[118,42323,42324],{"class":128},".b4",[118,42326,174],{"class":124},[118,42328,38002],{"class":128},[118,42330,42331,42333,42336,42338,42340,42342,42344,42346,42349,42351,42353,42355,42357,42359,42361],{"class":120,"line":9817},[118,42332,42222],{"class":128},[118,42334,42335],{"class":177},"480",[118,42337,506],{"class":128},[118,42339,42152],{"class":177},[118,42341,42231],{"class":128},[118,42343,338],{"class":177},[118,42345,506],{"class":128},[118,42347,42348],{"class":177},"208",[118,42350,42240],{"class":128},[118,42352,729],{"class":177},[118,42354,506],{"class":128},[118,42356,735],{"class":177},[118,42358,42249],{"class":128},[118,42360,332],{"class":177},[118,42362,38040],{"class":128},[118,42364,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393],{"class":120,"line":9822},[118,42366,42222],{"class":128},[118,42368,38450],{"class":177},[118,42370,506],{"class":128},[118,42372,21053],{"class":177},[118,42374,42231],{"class":128},[118,42376,746],{"class":177},[118,42378,506],{"class":128},[118,42380,31494],{"class":177},[118,42382,42240],{"class":128},[118,42384,928],{"class":177},[118,42386,506],{"class":128},[118,42388,332],{"class":177},[118,42390,42249],{"class":128},[118,42392,332],{"class":177},[118,42394,38040],{"class":128},[118,42396,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425],{"class":120,"line":9828},[118,42398,42222],{"class":128},[118,42400,38450],{"class":177},[118,42402,506],{"class":128},[118,42404,32063],{"class":177},[118,42406,42231],{"class":128},[118,42408,32063],{"class":177},[118,42410,506],{"class":128},[118,42412,34863],{"class":177},[118,42414,42240],{"class":128},[118,42416,928],{"class":177},[118,42418,506],{"class":128},[118,42420,332],{"class":177},[118,42422,42249],{"class":128},[118,42424,332],{"class":177},[118,42426,38040],{"class":128},[118,42428,42429,42431,42433,42435,42437,42439,42441,42443,42446,42448,42450,42452,42454,42456,42458],{"class":120,"line":9849},[118,42430,42222],{"class":128},[118,42432,38450],{"class":177},[118,42434,506],{"class":128},[118,42436,746],{"class":177},[118,42438,42231],{"class":128},[118,42440,32063],{"class":177},[118,42442,506],{"class":128},[118,42444,42445],{"class":177},"288",[118,42447,42240],{"class":128},[118,42449,326],{"class":177},[118,42451,506],{"class":128},[118,42453,332],{"class":177},[118,42455,42249],{"class":128},[118,42457,332],{"class":177},[118,42459,38040],{"class":128},[118,42461,42462,42464,42467,42469,42471,42473,42475,42477,42480,42482,42484,42486,42488,42490,42492],{"class":120,"line":9855},[118,42463,42222],{"class":128},[118,42465,42466],{"class":177},"528",[118,42468,506],{"class":128},[118,42470,34863],{"class":177},[118,42472,42231],{"class":128},[118,42474,21053],{"class":177},[118,42476,506],{"class":128},[118,42478,42479],{"class":177},"320",[118,42481,42240],{"class":128},[118,42483,326],{"class":177},[118,42485,506],{"class":128},[118,42487,32063],{"class":177},[118,42489,42249],{"class":128},[118,42491,32063],{"class":177},[118,42493,38040],{"class":128},[118,42495,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516,42518,42520],{"class":120,"line":9869},[118,42497,38090],{"class":128},[118,42499,30867],{"class":5221},[118,42501,174],{"class":124},[118,42503,200],{"class":177},[118,42505,506],{"class":128},[118,42507,30922],{"class":5221},[118,42509,174],{"class":124},[118,42511,206],{"class":177},[118,42513,506],{"class":128},[118,42515,30876],{"class":5221},[118,42517,174],{"class":124},[118,42519,346],{"class":177},[118,42521,135],{"class":128},[118,42523,42524],{"class":120,"line":9875},[118,42525,38119],{"class":128},[118,42527,42528,42530,42533,42535],{"class":120,"line":9902},[118,42529,30838],{"class":177},[118,42531,42532],{"class":128},".b5",[118,42534,174],{"class":124},[118,42536,38002],{"class":128},[118,42538,42539,42541,42544,42546,42548,42550,42552,42554,42556,42558,42560,42562,42564,42566,42568],{"class":120,"line":9911},[118,42540,42222],{"class":128},[118,42542,42543],{"class":177},"832",[118,42545,506],{"class":128},[118,42547,34863],{"class":177},[118,42549,42231],{"class":128},[118,42551,21053],{"class":177},[118,42553,506],{"class":128},[118,42555,42479],{"class":177},[118,42557,42240],{"class":128},[118,42559,326],{"class":177},[118,42561,506],{"class":128},[118,42563,32063],{"class":177},[118,42565,42249],{"class":128},[118,42567,32063],{"class":177},[118,42569,38040],{"class":128},[118,42571,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598,42600],{"class":120,"line":9917},[118,42573,42222],{"class":128},[118,42575,42543],{"class":177},[118,42577,506],{"class":128},[118,42579,34933],{"class":177},[118,42581,42231],{"class":128},[118,42583,42152],{"class":177},[118,42585,506],{"class":128},[118,42587,34933],{"class":177},[118,42589,42240],{"class":128},[118,42591,735],{"class":177},[118,42593,506],{"class":128},[118,42595,32063],{"class":177},[118,42597,42249],{"class":128},[118,42599,32063],{"class":177},[118,42601,38040],{"class":128},[118,42603,42604,42607,42609,42611,42613],{"class":120,"line":9925},[118,42605,42606],{"class":128},"            nn.AdaptiveAvgPool2d((",[118,42608,346],{"class":177},[118,42610,506],{"class":128},[118,42612,346],{"class":177},[118,42614,42615],{"class":128},")),\n",[118,42617,42618],{"class":120,"line":9930},[118,42619,38783],{"class":128},[118,42621,42622,42624,42627,42629,42631],{"class":120,"line":16609},[118,42623,38788],{"class":128},[118,42625,42626],{"class":177},"1024",[118,42628,506],{"class":128},[118,42630,574],{"class":177},[118,42632,135],{"class":128},[118,42634,42635],{"class":120,"line":16615},[118,42636,38119],{"class":128},[118,42638,42639],{"class":120,"line":16638},[118,42640,42641],{"class":187},"        # 对模型参数初始化\n",[118,42643,42644,42646,42648,42650,42652],{"class":120,"line":16644},[118,42645,3407],{"class":124},[118,42647,38861],{"class":128},[118,42649,26036],{"class":124},[118,42651,38866],{"class":177},[118,42653,38869],{"class":128},[118,42655,42656,42658,42660],{"class":120,"line":16667},[118,42657,4646],{"class":124},[118,42659,38881],{"class":177},[118,42661,38884],{"class":128},[118,42663,42664,42666,42669,42671,42674,42676,42678,42680,42682],{"class":120,"line":16681},[118,42665,38894],{"class":128},[118,42667,42668],{"class":5221},"mode",[118,42670,174],{"class":124},[118,42672,42673],{"class":233},"'fan_out'",[118,42675,506],{"class":128},[118,42677,38897],{"class":5221},[118,42679,174],{"class":124},[118,42681,38902],{"class":233},[118,42683,135],{"class":128},[118,42685,42686],{"class":120,"line":16701},[118,42687,42688],{"class":187},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[118,42690,42691],{"class":120,"line":16707},[118,42692,42693],{"class":187},"                # ② mode = 'fan_out'决定使用的fan值：\n",[118,42695,42696],{"class":120,"line":16718},[118,42697,42698],{"class":187},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[118,42700,42701],{"class":120,"line":16741},[118,42702,42703],{"class":187},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[118,42705,42706],{"class":120,"line":16763},[118,42707,42708],{"class":187},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[118,42710,42711],{"class":120,"line":16768},[118,42712,42713],{"class":187},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[118,42715,42716,42718,42720,42722,42724,42726],{"class":120,"line":16774},[118,42717,38914],{"class":124},[118,42719,38917],{"class":128},[118,42721,38920],{"class":124},[118,42723,38923],{"class":124},[118,42725,38926],{"class":177},[118,42727,3743],{"class":128},[118,42729,42730,42732,42734],{"class":120,"line":16788},[118,42731,38938],{"class":128},[118,42733,320],{"class":177},[118,42735,135],{"class":128},[118,42737,42738,42741,42743],{"class":120,"line":16801},[118,42739,42740],{"class":124},"                elif",[118,42742,38881],{"class":177},[118,42744,38957],{"class":128},[118,42746,42747,42750,42752,42754,42756],{"class":120,"line":16806},[118,42748,42749],{"class":128},"                    nn.init.normal_(m.weight,",[118,42751,320],{"class":177},[118,42753,506],{"class":128},[118,42755,38979],{"class":177},[118,42757,135],{"class":128},[118,42759,42760,42763,42765,42767,42769,42771],{"class":120,"line":16820},[118,42761,42762],{"class":124},"                    if",[118,42764,38917],{"class":128},[118,42766,38920],{"class":124},[118,42768,38923],{"class":124},[118,42770,38926],{"class":177},[118,42772,3743],{"class":128},[118,42774,42775,42778,42780],{"class":120,"line":16825},[118,42776,42777],{"class":128},"                        nn.init.constant_(m.bias,",[118,42779,320],{"class":177},[118,42781,135],{"class":128},[118,42783,42784],{"class":120,"line":16831},[118,42785,35158],{"class":187},[118,42787,42788,42790,42792],{"class":120,"line":16836},[118,42789,30794],{"class":124},[118,42791,31086],{"class":1967},[118,42793,31089],{"class":128},[118,42795,42796,42798,42800,42802],{"class":120,"line":16850},[118,42797,31094],{"class":128},[118,42799,174],{"class":124},[118,42801,30816],{"class":177},[118,42803,42804],{"class":128},".b1(x)\n",[118,42806,42807,42809,42811,42813],{"class":120,"line":16855},[118,42808,31094],{"class":128},[118,42810,174],{"class":124},[118,42812,30816],{"class":177},[118,42814,42815],{"class":128},".b2(x)\n",[118,42817,42818,42820,42822,42824],{"class":120,"line":16860},[118,42819,31094],{"class":128},[118,42821,174],{"class":124},[118,42823,30816],{"class":177},[118,42825,42826],{"class":128},".b3(x)\n",[118,42828,42829,42831,42833,42835],{"class":120,"line":16874},[118,42830,31094],{"class":128},[118,42832,174],{"class":124},[118,42834,30816],{"class":177},[118,42836,42837],{"class":128},".b4(x)\n",[118,42839,42840,42842,42844,42846],{"class":120,"line":16886},[118,42841,31094],{"class":128},[118,42843,174],{"class":124},[118,42845,30816],{"class":177},[118,42847,42848],{"class":128},".b5(x)\n",[118,42850,42851,42853],{"class":120,"line":16891},[118,42852,14757],{"class":124},[118,42854,31202],{"class":128},[118,42856,42857],{"class":120,"line":16904},[118,42858,2404],{"emptyLinePlaceholder":45},[118,42860,42861],{"class":120,"line":16909},[118,42862,42863],{"class":187},"# 模型展示\n",[118,42865,42866,42868,42870,42872,42874],{"class":120,"line":16914},[118,42867,1535],{"class":124},[118,42869,31213],{"class":177},[118,42871,2953],{"class":124},[118,42873,31218],{"class":233},[118,42875,3743],{"class":128},[118,42877,42878,42880,42882,42884,42886,42888,42890,42892,42894],{"class":120,"line":16919},[118,42879,31230],{"class":128},[118,42881,174],{"class":124},[118,42883,30444],{"class":128},[118,42885,31237],{"class":233},[118,42887,1708],{"class":124},[118,42889,31242],{"class":128},[118,42891,1705],{"class":124},[118,42893,30469],{"class":233},[118,42895,135],{"class":128},[118,42897,42898,42900,42902],{"class":120,"line":16932},[118,42899,31282],{"class":128},[118,42901,174],{"class":124},[118,42903,42904],{"class":128},"GoogLeNet(Inception).to(device)\n",[118,42906,42907,42909,42911,42913,42915,42917,42919,42921],{"class":120,"line":16937},[118,42908,31292],{"class":177},[118,42910,31295],{"class":128},[118,42912,346],{"class":177},[118,42914,506],{"class":128},[118,42916,31494],{"class":177},[118,42918,506],{"class":128},[118,42920,31494],{"class":177},[118,42922,31308],{"class":128},[72,42924,42925],{"start":40},[75,42926,39176],{},[109,42928,42930],{"className":30371,"code":42929,"language":30373,"meta":39,"style":39},"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",[115,42931,42932,42938,42944,42954,42960,42970,42980,42990,43000,43010,43014,43025,43035,43039,43043,43047,43055,43067,43077,43093,43103,43135,43149,43159,43169,43173,43183,43197,43207,43217,43227,43233,43237,43241,43245,43249,43253,43261,43281,43285,43289,43293,43297,43301,43317,43321,43325,43333,43337,43341,43349,43353,43357,43361,43369,43373,43377,43381,43385,43393,43397,43405,43409,43417,43421,43429,43433,43441,43445,43449,43457,43461,43465,43469,43481,43505,43519,43523,43527,43531,43539,43543,43551,43555,43563,43567,43575,43579,43587,43591,43599,43603,43615,43619,43627,43631,43639,43643,43647,43651,43655,43663,43667,43683,43687,43695,43699,43703,43707,43711,43715,43719,43723,43739,43743,43755,43759,43771,43775,43787,43791,43799,43803,43811,43815,43819,43823,43829,43833,43841,43845,43861,43865,43873,43877,43893,43905,43909,43921,43925,43929,43937,43941,43945,43953,43957,43965,43969,43977,43981,43985,44027,44069,44073,44077,44093,44097,44113,44117,44121,44129,44133,44137,44149,44187,44191,44195,44203,44207,44221,44231,44237,44243,44249,44255,44259,44263,44269,44273,44277,44285,44289,44307,44311,44315,44319,44335,44339,44343,44347,44351,44355,44375,44395,44399,44403,44407,44415,44423,44427,44443,44463,44483,44487,44491,44499,44507,44511,44515,44519,44531,44535,44545,44553,44570],{"__ignoreMap":39},[118,42933,42934,42936],{"class":120,"line":121},[118,42935,30385],{"class":124},[118,42937,31815],{"class":128},[118,42939,42940,42942],{"class":120,"line":40},[118,42941,30385],{"class":124},[118,42943,31822],{"class":128},[118,42945,42946,42948,42950,42952],{"class":120,"line":1183},[118,42947,30385],{"class":124},[118,42949,31833],{"class":128},[118,42951,31376],{"class":124},[118,42953,31838],{"class":128},[118,42955,42956,42958],{"class":120,"line":1198},[118,42957,30385],{"class":124},[118,42959,30388],{"class":128},[118,42961,42962,42964,42966,42968],{"class":120,"line":1204},[118,42963,30730],{"class":124},[118,42965,31408],{"class":128},[118,42967,30385],{"class":124},[118,42969,31855],{"class":128},[118,42971,42972,42974,42976,42978],{"class":120,"line":1218},[118,42973,30730],{"class":124},[118,42975,31361],{"class":128},[118,42977,30385],{"class":124},[118,42979,31366],{"class":128},[118,42981,42982,42984,42986,42988],{"class":120,"line":1224},[118,42983,30730],{"class":124},[118,42985,31391],{"class":128},[118,42987,30385],{"class":124},[118,42989,31396],{"class":128},[118,42991,42992,42994,42996,42998],{"class":120,"line":1315},[118,42993,30385],{"class":124},[118,42995,31408],{"class":128},[118,42997,31376],{"class":124},[118,42999,31413],{"class":128},[118,43001,43002,43004,43006,43008],{"class":120,"line":1321},[118,43003,30385],{"class":124},[118,43005,31425],{"class":128},[118,43007,31376],{"class":124},[118,43009,31430],{"class":128},[118,43011,43012],{"class":120,"line":1333},[118,43013,31900],{"class":187},[118,43015,43016,43018,43020,43022],{"class":120,"line":1616},[118,43017,30730],{"class":124},[118,43019,31907],{"class":128},[118,43021,30385],{"class":124},[118,43023,43024],{"class":128}," GoogLeNet, Inception\n",[118,43026,43027,43029,43031,43033],{"class":120,"line":1621},[118,43028,30730],{"class":124},[118,43030,30733],{"class":128},[118,43032,30385],{"class":124},[118,43034,30738],{"class":128},[118,43036,43037],{"class":120,"line":1627},[118,43038,2404],{"emptyLinePlaceholder":45},[118,43040,43041],{"class":120,"line":1632},[118,43042,2404],{"emptyLinePlaceholder":45},[118,43044,43045],{"class":120,"line":1646},[118,43046,31935],{"class":187},[118,43048,43049,43051,43053],{"class":120,"line":1651},[118,43050,31940],{"class":124},[118,43052,31943],{"class":1967},[118,43054,31946],{"class":128},[118,43056,43057,43059,43061,43063,43065],{"class":120,"line":1657},[118,43058,31951],{"class":128},[118,43060,174],{"class":124},[118,43062,31448],{"class":128},[118,43064,31456],{"class":233},[118,43066,31459],{"class":128},[118,43068,43069,43071,43073,43075],{"class":120,"line":1678},[118,43070,31964],{"class":5221},[118,43072,174],{"class":124},[118,43074,31469],{"class":177},[118,43076,31459],{"class":128},[118,43078,43079,43081,43083,43085,43087,43089,43091],{"class":120,"line":1683},[118,43080,31975],{"class":5221},[118,43082,174],{"class":124},[118,43084,31486],{"class":128},[118,43086,31489],{"class":5221},[118,43088,174],{"class":124},[118,43090,35442],{"class":177},[118,43092,31497],{"class":128},[118,43094,43095,43097,43099,43101],{"class":120,"line":1697},[118,43096,31992],{"class":5221},[118,43098,174],{"class":124},[118,43100,31469],{"class":177},[118,43102,135],{"class":128},[118,43104,43105,43107,43109,43111,43113,43115,43117,43119,43121,43123,43125,43127,43129,43131,43133],{"class":120,"line":1702},[118,43106,32003],{"class":128},[118,43108,174],{"class":124},[118,43110,32008],{"class":128},[118,43112,32011],{"class":177},[118,43114,129],{"class":128},[118,43116,32016],{"class":177},[118,43118,583],{"class":124},[118,43120,7363],{"class":177},[118,43122,32023],{"class":128},[118,43124,32011],{"class":177},[118,43126,129],{"class":128},[118,43128,32030],{"class":177},[118,43130,583],{"class":124},[118,43132,7363],{"class":177},[118,43134,32037],{"class":128},[118,43136,43137,43139,43141,43143,43145,43147],{"class":120,"line":1731},[118,43138,32042],{"class":128},[118,43140,174],{"class":124},[118,43142,32047],{"class":128},[118,43144,31530],{"class":5221},[118,43146,174],{"class":124},[118,43148,31535],{"class":128},[118,43150,43151,43153,43155,43157],{"class":120,"line":1736},[118,43152,32058],{"class":5221},[118,43154,174],{"class":124},[118,43156,326],{"class":177},[118,43158,31459],{"class":128},[118,43160,43161,43163,43165,43167],{"class":120,"line":1753},[118,43162,32070],{"class":5221},[118,43164,174],{"class":124},[118,43166,31469],{"class":177},[118,43168,31459],{"class":128},[118,43170,43171],{"class":120,"line":1758},[118,43172,32081],{"class":187},[118,43174,43175,43177,43179,43181],{"class":120,"line":1763},[118,43176,32086],{"class":5221},[118,43178,174],{"class":124},[118,43180,523],{"class":177},[118,43182,135],{"class":128},[118,43184,43185,43187,43189,43191,43193,43195],{"class":120,"line":1768},[118,43186,32097],{"class":128},[118,43188,174],{"class":124},[118,43190,31527],{"class":128},[118,43192,31530],{"class":5221},[118,43194,174],{"class":124},[118,43196,32108],{"class":128},[118,43198,43199,43201,43203,43205],{"class":120,"line":1782},[118,43200,32113],{"class":5221},[118,43202,174],{"class":124},[118,43204,326],{"class":177},[118,43206,31459],{"class":128},[118,43208,43209,43211,43213,43215],{"class":120,"line":1787},[118,43210,32124],{"class":5221},[118,43212,174],{"class":124},[118,43214,31469],{"class":177},[118,43216,31459],{"class":128},[118,43218,43219,43221,43223,43225],{"class":120,"line":2581},[118,43220,32135],{"class":5221},[118,43222,174],{"class":124},[118,43224,523],{"class":177},[118,43226,135],{"class":128},[118,43228,43229,43231],{"class":120,"line":2595},[118,43230,4094],{"class":124},[118,43232,32148],{"class":128},[118,43234,43235],{"class":120,"line":2603},[118,43236,2404],{"emptyLinePlaceholder":45},[118,43238,43239],{"class":120,"line":2608},[118,43240,32157],{"class":187},[118,43242,43243],{"class":120,"line":2614},[118,43244,32162],{"class":187},[118,43246,43247],{"class":120,"line":2620},[118,43248,2404],{"emptyLinePlaceholder":45},[118,43250,43251],{"class":120,"line":2625},[118,43252,32171],{"class":187},[118,43254,43255,43257,43259],{"class":120,"line":7953},[118,43256,31940],{"class":124},[118,43258,32178],{"class":1967},[118,43260,32181],{"class":128},[118,43262,43263,43265,43267,43269,43271,43273,43275,43277,43279],{"class":120,"line":7977},[118,43264,31230],{"class":128},[118,43266,174],{"class":124},[118,43268,30444],{"class":128},[118,43270,31237],{"class":233},[118,43272,1708],{"class":124},[118,43274,31242],{"class":128},[118,43276,1705],{"class":124},[118,43278,32200],{"class":233},[118,43280,135],{"class":128},[118,43282,43283],{"class":120,"line":7982},[118,43284,2404],{"emptyLinePlaceholder":45},[118,43286,43287],{"class":120,"line":7988},[118,43288,2404],{"emptyLinePlaceholder":45},[118,43290,43291],{"class":120,"line":8015},[118,43292,32215],{"class":187},[118,43294,43295],{"class":120,"line":8020},[118,43296,32220],{"class":187},[118,43298,43299],{"class":120,"line":8026},[118,43300,32225],{"class":187},[118,43302,43303,43305,43307,43309,43311,43313,43315],{"class":120,"line":8038},[118,43304,32230],{"class":128},[118,43306,174],{"class":124},[118,43308,32235],{"class":128},[118,43310,32238],{"class":5221},[118,43312,174],{"class":124},[118,43314,32243],{"class":177},[118,43316,135],{"class":128},[118,43318,43319],{"class":120,"line":8050},[118,43320,2404],{"emptyLinePlaceholder":45},[118,43322,43323],{"class":120,"line":8062},[118,43324,32254],{"class":187},[118,43326,43327,43329,43331],{"class":120,"line":9721},[118,43328,32259],{"class":128},[118,43330,174],{"class":124},[118,43332,32264],{"class":128},[118,43334,43335],{"class":120,"line":9746},[118,43336,2404],{"emptyLinePlaceholder":45},[118,43338,43339],{"class":120,"line":9769},[118,43340,32273],{"class":187},[118,43342,43343,43345,43347],{"class":120,"line":9793},[118,43344,31282],{"class":128},[118,43346,174],{"class":124},[118,43348,32282],{"class":128},[118,43350,43351],{"class":120,"line":9798},[118,43352,32287],{"class":187},[118,43354,43355],{"class":120,"line":9803},[118,43356,32292],{"class":187},[118,43358,43359],{"class":120,"line":9808},[118,43360,32297],{"class":187},[118,43362,43363,43365,43367],{"class":120,"line":9817},[118,43364,32302],{"class":128},[118,43366,174],{"class":124},[118,43368,32307],{"class":128},[118,43370,43371],{"class":120,"line":9822},[118,43372,2404],{"emptyLinePlaceholder":45},[118,43374,43375],{"class":120,"line":9828},[118,43376,2404],{"emptyLinePlaceholder":45},[118,43378,43379],{"class":120,"line":9849},[118,43380,32320],{"class":187},[118,43382,43383],{"class":120,"line":9855},[118,43384,32325],{"class":187},[118,43386,43387,43389,43391],{"class":120,"line":9869},[118,43388,32330],{"class":128},[118,43390,174],{"class":124},[118,43392,32335],{"class":177},[118,43394,43395],{"class":120,"line":9875},[118,43396,32340],{"class":187},[118,43398,43399,43401,43403],{"class":120,"line":9902},[118,43400,32345],{"class":128},[118,43402,174],{"class":124},[118,43404,32350],{"class":128},[118,43406,43407],{"class":120,"line":9911},[118,43408,32355],{"class":187},[118,43410,43411,43413,43415],{"class":120,"line":9917},[118,43412,32360],{"class":128},[118,43414,174],{"class":124},[118,43416,32350],{"class":128},[118,43418,43419],{"class":120,"line":9925},[118,43420,32369],{"class":187},[118,43422,43423,43425,43427],{"class":120,"line":9930},[118,43424,32374],{"class":128},[118,43426,174],{"class":124},[118,43428,32350],{"class":128},[118,43430,43431],{"class":120,"line":16609},[118,43432,32383],{"class":187},[118,43434,43435,43437,43439],{"class":120,"line":16615},[118,43436,32388],{"class":128},[118,43438,174],{"class":124},[118,43440,32350],{"class":128},[118,43442,43443],{"class":120,"line":16638},[118,43444,2404],{"emptyLinePlaceholder":45},[118,43446,43447],{"class":120,"line":16644},[118,43448,32401],{"class":187},[118,43450,43451,43453,43455],{"class":120,"line":16667},[118,43452,32406],{"class":128},[118,43454,174],{"class":124},[118,43456,32411],{"class":128},[118,43458,43459],{"class":120,"line":16681},[118,43460,2404],{"emptyLinePlaceholder":45},[118,43462,43463],{"class":120,"line":16701},[118,43464,2404],{"emptyLinePlaceholder":45},[118,43466,43467],{"class":120,"line":16707},[118,43468,32424],{"class":187},[118,43470,43471,43473,43475,43477,43479],{"class":120,"line":16718},[118,43472,3205],{"class":124},[118,43474,32431],{"class":128},[118,43476,26036],{"class":124},[118,43478,32436],{"class":177},[118,43480,32439],{"class":128},[118,43482,43483,43485,43487,43489,43491,43493,43495,43497,43499,43501,43503],{"class":120,"line":16741},[118,43484,32444],{"class":177},[118,43486,129],{"class":128},[118,43488,32449],{"class":233},[118,43490,32452],{"class":177},[118,43492,712],{"class":233},[118,43494,32452],{"class":177},[118,43496,379],{"class":233},[118,43498,32461],{"class":128},[118,43500,660],{"class":124},[118,43502,346],{"class":177},[118,43504,30490],{"class":128},[118,43506,43507,43509,43511,43513,43515,43517],{"class":120,"line":16763},[118,43508,32444],{"class":177},[118,43510,129],{"class":128},[118,43512,32476],{"class":233},[118,43514,583],{"class":124},[118,43516,574],{"class":177},[118,43518,135],{"class":128},[118,43520,43521],{"class":120,"line":16768},[118,43522,2404],{"emptyLinePlaceholder":45},[118,43524,43525],{"class":120,"line":16774},[118,43526,32491],{"class":187},[118,43528,43529],{"class":120,"line":16788},[118,43530,32496],{"class":187},[118,43532,43533,43535,43537],{"class":120,"line":16801},[118,43534,32501],{"class":128},[118,43536,174],{"class":124},[118,43538,32335],{"class":177},[118,43540,43541],{"class":120,"line":16806},[118,43542,32510],{"class":187},[118,43544,43545,43547,43549],{"class":120,"line":16820},[118,43546,32515],{"class":128},[118,43548,174],{"class":124},[118,43550,3089],{"class":177},[118,43552,43553],{"class":120,"line":16825},[118,43554,32524],{"class":187},[118,43556,43557,43559,43561],{"class":120,"line":16831},[118,43558,32529],{"class":128},[118,43560,174],{"class":124},[118,43562,32335],{"class":177},[118,43564,43565],{"class":120,"line":16836},[118,43566,32538],{"class":187},[118,43568,43569,43571,43573],{"class":120,"line":16850},[118,43570,32543],{"class":128},[118,43572,174],{"class":124},[118,43574,3089],{"class":177},[118,43576,43577],{"class":120,"line":16855},[118,43578,32552],{"class":187},[118,43580,43581,43583,43585],{"class":120,"line":16860},[118,43582,32557],{"class":128},[118,43584,174],{"class":124},[118,43586,3089],{"class":177},[118,43588,43589],{"class":120,"line":16874},[118,43590,32566],{"class":187},[118,43592,43593,43595,43597],{"class":120,"line":16886},[118,43594,32571],{"class":128},[118,43596,174],{"class":124},[118,43598,3089],{"class":177},[118,43600,43601],{"class":120,"line":16891},[118,43602,32580],{"class":187},[118,43604,43605,43607,43609,43611,43613],{"class":120,"line":16904},[118,43606,3407],{"class":124},[118,43608,31594],{"class":128},[118,43610,26036],{"class":124},[118,43612,31599],{"class":177},[118,43614,32593],{"class":128},[118,43616,43617],{"class":120,"line":16909},[118,43618,32598],{"class":187},[118,43620,43621,43623,43625],{"class":120,"line":16914},[118,43622,32603],{"class":128},[118,43624,174],{"class":124},[118,43626,32608],{"class":128},[118,43628,43629],{"class":120,"line":16919},[118,43630,32613],{"class":187},[118,43632,43633,43635,43637],{"class":120,"line":16932},[118,43634,32618],{"class":128},[118,43636,174],{"class":124},[118,43638,32623],{"class":128},[118,43640,43641],{"class":120,"line":16937},[118,43642,32629],{"class":187},[118,43644,43645],{"class":120,"line":32626},[118,43646,32635],{"class":128},[118,43648,43649],{"class":120,"line":32632},[118,43650,32641],{"class":187},[118,43652,43653],{"class":120,"line":32638},[118,43654,32647],{"class":187},[118,43656,43657,43659,43661],{"class":120,"line":32644},[118,43658,32653],{"class":128},[118,43660,174],{"class":124},[118,43662,32658],{"class":128},[118,43664,43665],{"class":120,"line":32650},[118,43666,32664],{"class":187},[118,43668,43669,43671,43673,43675,43677,43679,43681],{"class":120,"line":32661},[118,43670,32670],{"class":128},[118,43672,174],{"class":124},[118,43674,32675],{"class":128},[118,43676,32678],{"class":5221},[118,43678,174],{"class":124},[118,43680,346],{"class":177},[118,43682,135],{"class":128},[118,43684,43685],{"class":120,"line":32667},[118,43686,32690],{"class":187},[118,43688,43689,43691,43693],{"class":120,"line":32687},[118,43690,32696],{"class":128},[118,43692,174],{"class":124},[118,43694,32701],{"class":128},[118,43696,43697],{"class":120,"line":32693},[118,43698,32707],{"class":187},[118,43700,43701],{"class":120,"line":32704},[118,43702,32713],{"class":128},[118,43704,43705],{"class":120,"line":32710},[118,43706,32719],{"class":187},[118,43708,43709],{"class":120,"line":32716},[118,43710,32725],{"class":128},[118,43712,43713],{"class":120,"line":32722},[118,43714,32731],{"class":187},[118,43716,43717],{"class":120,"line":32728},[118,43718,32737],{"class":128},[118,43720,43721],{"class":120,"line":32734},[118,43722,32743],{"class":187},[118,43724,43725,43727,43729,43731,43733,43735,43737],{"class":120,"line":32740},[118,43726,32749],{"class":128},[118,43728,9482],{"class":124},[118,43730,32754],{"class":128},[118,43732,583],{"class":124},[118,43734,32759],{"class":128},[118,43736,320],{"class":177},[118,43738,135],{"class":128},[118,43740,43741],{"class":120,"line":32746},[118,43742,32769],{"class":187},[118,43744,43745,43747,43749,43751,43753],{"class":120,"line":32766},[118,43746,32775],{"class":128},[118,43748,9482],{"class":124},[118,43750,32780],{"class":128},[118,43752,2953],{"class":124},[118,43754,32785],{"class":128},[118,43756,43757],{"class":120,"line":32772},[118,43758,32791],{"class":187},[118,43760,43761,43763,43765,43767,43769],{"class":120,"line":32788},[118,43762,32797],{"class":128},[118,43764,9482],{"class":124},[118,43766,32759],{"class":128},[118,43768,320],{"class":177},[118,43770,135],{"class":128},[118,43772,43773],{"class":120,"line":32794},[118,43774,32811],{"class":187},[118,43776,43777,43779,43781,43783,43785],{"class":120,"line":32808},[118,43778,3407],{"class":124},[118,43780,32819],{"class":128},[118,43782,26036],{"class":124},[118,43784,31599],{"class":177},[118,43786,32826],{"class":128},[118,43788,43789],{"class":120,"line":32814},[118,43790,32832],{"class":187},[118,43792,43793,43795,43797],{"class":120,"line":32829},[118,43794,32603],{"class":128},[118,43796,174],{"class":124},[118,43798,32608],{"class":128},[118,43800,43801],{"class":120,"line":32835},[118,43802,32847],{"class":187},[118,43804,43805,43807,43809],{"class":120,"line":32844},[118,43806,32618],{"class":128},[118,43808,174],{"class":124},[118,43810,32623],{"class":128},[118,43812,43813],{"class":120,"line":32850},[118,43814,32862],{"class":187},[118,43816,43817],{"class":120,"line":32859},[118,43818,32868],{"class":128},[118,43820,43821],{"class":120,"line":32865},[118,43822,36349],{"class":187},[118,43824,43825,43827],{"class":120,"line":32871},[118,43826,32874],{"class":124},[118,43828,32877],{"class":128},[118,43830,43831],{"class":120,"line":32880},[118,43832,32883],{"class":187},[118,43834,43835,43837,43839],{"class":120,"line":32886},[118,43836,36364],{"class":128},[118,43838,174],{"class":124},[118,43840,32658],{"class":128},[118,43842,43843],{"class":120,"line":32897},[118,43844,32900],{"class":187},[118,43846,43847,43849,43851,43853,43855,43857,43859],{"class":120,"line":32903},[118,43848,36377],{"class":128},[118,43850,174],{"class":124},[118,43852,32675],{"class":128},[118,43854,32678],{"class":5221},[118,43856,174],{"class":124},[118,43858,346],{"class":177},[118,43860,135],{"class":128},[118,43862,43863],{"class":120,"line":32922},[118,43864,32925],{"class":187},[118,43866,43867,43869,43871],{"class":120,"line":32928},[118,43868,36398],{"class":128},[118,43870,174],{"class":124},[118,43872,32701],{"class":128},[118,43874,43875],{"class":120,"line":32939},[118,43876,32942],{"class":187},[118,43878,43879,43881,43883,43885,43887,43889,43891],{"class":120,"line":32945},[118,43880,36411],{"class":128},[118,43882,9482],{"class":124},[118,43884,36416],{"class":128},[118,43886,583],{"class":124},[118,43888,32759],{"class":128},[118,43890,320],{"class":177},[118,43892,135],{"class":128},[118,43894,43895,43897,43899,43901,43903],{"class":120,"line":32965},[118,43896,36429],{"class":128},[118,43898,9482],{"class":124},[118,43900,32780],{"class":128},[118,43902,2953],{"class":124},[118,43904,32785],{"class":128},[118,43906,43907],{"class":120,"line":32981},[118,43908,36442],{"class":187},[118,43910,43911,43913,43915,43917,43919],{"class":120,"line":32987},[118,43912,36447],{"class":128},[118,43914,9482],{"class":124},[118,43916,32759],{"class":128},[118,43918,320],{"class":177},[118,43920,135],{"class":128},[118,43922,43923],{"class":120,"line":33001},[118,43924,33004],{"class":187},[118,43926,43927],{"class":120,"line":33007},[118,43928,33010],{"class":187},[118,43930,43931,43933,43935],{"class":120,"line":33013},[118,43932,33016],{"class":128},[118,43934,712],{"class":124},[118,43936,33021],{"class":128},[118,43938,43939],{"class":120,"line":33024},[118,43940,33027],{"class":187},[118,43942,43943],{"class":120,"line":33030},[118,43944,33033],{"class":187},[118,43946,43947,43949,43951],{"class":120,"line":33036},[118,43948,33039],{"class":128},[118,43950,712],{"class":124},[118,43952,33021],{"class":128},[118,43954,43955],{"class":120,"line":33046},[118,43956,33049],{"class":187},[118,43958,43959,43961,43963],{"class":120,"line":33052},[118,43960,33055],{"class":128},[118,43962,712],{"class":124},[118,43964,33060],{"class":128},[118,43966,43967],{"class":120,"line":33063},[118,43968,33066],{"class":187},[118,43970,43971,43973,43975],{"class":120,"line":33069},[118,43972,33072],{"class":128},[118,43974,712],{"class":124},[118,43976,33060],{"class":128},[118,43978,43979],{"class":120,"line":33079},[118,43980,2404],{"emptyLinePlaceholder":45},[118,43982,43983],{"class":120,"line":33084},[118,43984,33087],{"class":187},[118,43986,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025],{"class":120,"line":33090},[118,43988,32444],{"class":177},[118,43990,129],{"class":128},[118,43992,3596],{"class":233},[118,43994,32452],{"class":177},[118,43996,33101],{"class":233},[118,43998,1024],{"class":177},[118,44000,33106],{"class":124},[118,44002,1074],{"class":177},[118,44004,33111],{"class":233},[118,44006,1024],{"class":177},[118,44008,33106],{"class":124},[118,44010,1074],{"class":177},[118,44012,3596],{"class":233},[118,44014,33122],{"class":128},[118,44016,660],{"class":124},[118,44018,346],{"class":177},[118,44020,33129],{"class":128},[118,44022,660],{"class":124},[118,44024,346],{"class":177},[118,44026,33136],{"class":128},[118,44028,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065,44067],{"class":120,"line":33139},[118,44030,32444],{"class":177},[118,44032,129],{"class":128},[118,44034,3596],{"class":233},[118,44036,32452],{"class":177},[118,44038,33150],{"class":233},[118,44040,1024],{"class":177},[118,44042,33106],{"class":124},[118,44044,1074],{"class":177},[118,44046,33159],{"class":233},[118,44048,1024],{"class":177},[118,44050,33106],{"class":124},[118,44052,1074],{"class":177},[118,44054,3596],{"class":233},[118,44056,33170],{"class":128},[118,44058,660],{"class":124},[118,44060,346],{"class":177},[118,44062,33177],{"class":128},[118,44064,660],{"class":124},[118,44066,346],{"class":177},[118,44068,33136],{"class":128},[118,44070,44071],{"class":120,"line":33186},[118,44072,2404],{"emptyLinePlaceholder":45},[118,44074,44075],{"class":120,"line":33191},[118,44076,33194],{"class":187},[118,44078,44079,44081,44083,44085,44087,44089,44091],{"class":120,"line":33197},[118,44080,2501],{"class":124},[118,44082,33202],{"class":128},[118,44084,660],{"class":124},[118,44086,346],{"class":177},[118,44088,1068],{"class":128},[118,44090,1088],{"class":124},[118,44092,33213],{"class":128},[118,44094,44095],{"class":120,"line":33216},[118,44096,33219],{"class":187},[118,44098,44099,44101,44103,44105,44107,44109,44111],{"class":120,"line":33222},[118,44100,33225],{"class":128},[118,44102,168],{"class":177},[118,44104,174],{"class":124},[118,44106,33232],{"class":128},[118,44108,660],{"class":124},[118,44110,346],{"class":177},[118,44112,33239],{"class":128},[118,44114,44115],{"class":120,"line":33242},[118,44116,33245],{"class":187},[118,44118,44119],{"class":120,"line":33248},[118,44120,33251],{"class":187},[118,44122,44123,44125,44127],{"class":120,"line":33254},[118,44124,33257],{"class":128},[118,44126,174],{"class":124},[118,44128,32307],{"class":128},[118,44130,44131],{"class":120,"line":33264},[118,44132,2404],{"emptyLinePlaceholder":45},[118,44134,44135],{"class":120,"line":33269},[118,44136,33272],{"class":187},[118,44138,44139,44141,44143,44145,44147],{"class":120,"line":33275},[118,44140,33278],{"class":128},[118,44142,174],{"class":124},[118,44144,33283],{"class":128},[118,44146,660],{"class":124},[118,44148,33288],{"class":128},[118,44150,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185],{"class":120,"line":33291},[118,44152,32444],{"class":177},[118,44154,129],{"class":128},[118,44156,33298],{"class":233},[118,44158,1024],{"class":177},[118,44160,33303],{"class":124},[118,44162,1074],{"class":177},[118,44164,672],{"class":233},[118,44166,1024],{"class":177},[118,44168,33303],{"class":124},[118,44170,1074],{"class":177},[118,44172,33316],{"class":233},[118,44174,33319],{"class":128},[118,44176,33322],{"class":124},[118,44178,1035],{"class":177},[118,44180,33327],{"class":128},[118,44182,456],{"class":124},[118,44184,1035],{"class":177},[118,44186,30490],{"class":128},[118,44188,44189],{"class":120,"line":33336},[118,44190,36726],{"class":187},[118,44192,44193],{"class":120,"line":33342},[118,44194,36731],{"class":187},[118,44196,44197,44199,44201],{"class":120,"line":33348},[118,44198,36736],{"class":128},[118,44200,33360],{"class":233},[118,44202,135],{"class":128},[118,44204,44205],{"class":120,"line":33354},[118,44206,33380],{"class":187},[118,44208,44209,44211,44213,44215,44217,44219],{"class":120,"line":33365},[118,44210,33386],{"class":128},[118,44212,174],{"class":124},[118,44214,33391],{"class":128},[118,44216,33394],{"class":5221},[118,44218,174],{"class":124},[118,44220,1550],{"class":128},[118,44222,44223,44225,44227,44229],{"class":120,"line":33371},[118,44224,33404],{"class":233},[118,44226,987],{"class":128},[118,44228,33409],{"class":177},[118,44230,33412],{"class":128},[118,44232,44233,44235],{"class":120,"line":33377},[118,44234,33418],{"class":233},[118,44236,33421],{"class":128},[118,44238,44239,44241],{"class":120,"line":33383},[118,44240,33427],{"class":233},[118,44242,33430],{"class":128},[118,44244,44245,44247],{"class":120,"line":33401},[118,44246,33436],{"class":233},[118,44248,33439],{"class":128},[118,44250,44251,44253],{"class":120,"line":33415},[118,44252,33445],{"class":233},[118,44254,33448],{"class":128},[118,44256,44257],{"class":120,"line":33424},[118,44258,33454],{"class":128},[118,44260,44261],{"class":120,"line":33433},[118,44262,33460],{"class":187},[118,44264,44265,44267],{"class":120,"line":33442},[118,44266,4094],{"class":124},[118,44268,33468],{"class":128},[118,44270,44271],{"class":120,"line":33451},[118,44272,2404],{"emptyLinePlaceholder":45},[118,44274,44275],{"class":120,"line":33457},[118,44276,33479],{"class":187},[118,44278,44279,44281,44283],{"class":120,"line":33463},[118,44280,31940],{"class":124},[118,44282,33487],{"class":1967},[118,44284,33490],{"class":128},[118,44286,44287],{"class":120,"line":33471},[118,44288,33496],{"class":187},[118,44290,44291,44293,44295,44297,44299,44301,44303,44305],{"class":120,"line":33476},[118,44292,33502],{"class":128},[118,44294,31686],{"class":5221},[118,44296,174],{"class":124},[118,44298,129],{"class":128},[118,44300,626],{"class":177},[118,44302,506],{"class":128},[118,44304,421],{"class":177},[118,44306,30490],{"class":128},[118,44308,44309],{"class":120,"line":33482},[118,44310,33522],{"class":187},[118,44312,44313],{"class":120,"line":33493},[118,44314,33528],{"class":187},[118,44316,44317],{"class":120,"line":33499},[118,44318,33534],{"class":187},[118,44320,44321,44323,44325,44327,44329,44331,44333],{"class":120,"line":33519},[118,44322,31720],{"class":128},[118,44324,346],{"class":177},[118,44326,506],{"class":128},[118,44328,206],{"class":177},[118,44330,506],{"class":128},[118,44332,346],{"class":177},[118,44334,135],{"class":128},[118,44336,44337],{"class":120,"line":33525},[118,44338,33557],{"class":187},[118,44340,44341],{"class":120,"line":33531},[118,44342,33563],{"class":187},[118,44344,44345],{"class":120,"line":33537},[118,44346,33569],{"class":187},[118,44348,44349],{"class":120,"line":33554},[118,44350,33575],{"class":187},[118,44352,44353],{"class":120,"line":33560},[118,44354,33581],{"class":187},[118,44356,44357,44359,44361,44363,44365,44367,44369,44371,44373],{"class":120,"line":33566},[118,44358,33587],{"class":128},[118,44360,33590],{"class":233},[118,44362,33593],{"class":128},[118,44364,33596],{"class":233},[118,44366,506],{"class":128},[118,44368,33601],{"class":5221},[118,44370,174],{"class":124},[118,44372,33606],{"class":233},[118,44374,135],{"class":128},[118,44376,44377,44379,44381,44383,44385,44387,44389,44391,44393],{"class":120,"line":33572},[118,44378,33587],{"class":128},[118,44380,33590],{"class":233},[118,44382,33618],{"class":128},[118,44384,33621],{"class":233},[118,44386,506],{"class":128},[118,44388,33601],{"class":5221},[118,44390,174],{"class":124},[118,44392,33630],{"class":233},[118,44394,135],{"class":128},[118,44396,44397],{"class":120,"line":33578},[118,44398,33638],{"class":187},[118,44400,44401],{"class":120,"line":33584},[118,44402,33644],{"class":128},[118,44404,44405],{"class":120,"line":33611},[118,44406,33650],{"class":187},[118,44408,44409,44411,44413],{"class":120,"line":33635},[118,44410,33656],{"class":128},[118,44412,33659],{"class":233},[118,44414,135],{"class":128},[118,44416,44417,44419,44421],{"class":120,"line":33641},[118,44418,33667],{"class":128},[118,44420,33670],{"class":233},[118,44422,135],{"class":128},[118,44424,44425],{"class":120,"line":33647},[118,44426,33678],{"class":187},[118,44428,44429,44431,44433,44435,44437,44439,44441],{"class":120,"line":33653},[118,44430,31720],{"class":128},[118,44432,346],{"class":177},[118,44434,506],{"class":128},[118,44436,206],{"class":177},[118,44438,506],{"class":128},[118,44440,206],{"class":177},[118,44442,135],{"class":128},[118,44444,44445,44447,44449,44451,44453,44455,44457,44459,44461],{"class":120,"line":33664},[118,44446,33587],{"class":128},[118,44448,33590],{"class":233},[118,44450,33705],{"class":128},[118,44452,33596],{"class":233},[118,44454,506],{"class":128},[118,44456,33601],{"class":5221},[118,44458,174],{"class":124},[118,44460,33716],{"class":233},[118,44462,135],{"class":128},[118,44464,44465,44467,44469,44471,44473,44475,44477,44479,44481],{"class":120,"line":33675},[118,44466,33587],{"class":128},[118,44468,33590],{"class":233},[118,44470,33728],{"class":128},[118,44472,33621],{"class":233},[118,44474,506],{"class":128},[118,44476,33601],{"class":5221},[118,44478,174],{"class":124},[118,44480,33739],{"class":233},[118,44482,135],{"class":128},[118,44484,44485],{"class":120,"line":33681},[118,44486,33747],{"class":187},[118,44488,44489],{"class":120,"line":33698},[118,44490,33644],{"class":128},[118,44492,44493,44495,44497],{"class":120,"line":33721},[118,44494,33656],{"class":128},[118,44496,33590],{"class":233},[118,44498,135],{"class":128},[118,44500,44501,44503,44505],{"class":120,"line":33744},[118,44502,33667],{"class":128},[118,44504,33769],{"class":233},[118,44506,135],{"class":128},[118,44508,44509],{"class":120,"line":33750},[118,44510,33777],{"class":128},[118,44512,44513],{"class":120,"line":33755},[118,44514,2404],{"emptyLinePlaceholder":45},[118,44516,44517],{"class":120,"line":33764},[118,44518,33788],{"class":187},[118,44520,44521,44523,44525,44527,44529],{"class":120,"line":33774},[118,44522,1535],{"class":124},[118,44524,31213],{"class":177},[118,44526,2953],{"class":124},[118,44528,31218],{"class":233},[118,44530,3743],{"class":128},[118,44532,44533],{"class":120,"line":33780},[118,44534,33807],{"class":187},[118,44536,44537,44540,44542],{"class":120,"line":33785},[118,44538,44539],{"class":128},"    GoogLeNet",[118,44541,174],{"class":124},[118,44543,44544],{"class":128},"GoogLeNet(Inception)\n",[118,44546,44547,44549,44551],{"class":120,"line":33791},[118,44548,33824],{"class":128},[118,44550,174],{"class":124},[118,44552,33829],{"class":128},[118,44554,44555,44557,44559,44562,44564,44566,44568],{"class":120,"line":33804},[118,44556,33386],{"class":128},[118,44558,174],{"class":124},[118,44560,44561],{"class":128},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[118,44563,33842],{"class":5221},[118,44565,174],{"class":124},[118,44567,1079],{"class":177},[118,44569,135],{"class":128},[118,44571,44572],{"class":120,"line":33810},[118,44573,33854],{"class":128},[72,44575,44576],{"start":1183},[75,44577,40567],{},[109,44579,44581],{"className":30371,"code":44580,"language":30373,"meta":39,"style":39},"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",[115,44582,44583,44589,44599,44609,44613,44623,44634,44638,44642,44646,44654,44670,44680,44696,44706,44720,44724,44734,44744,44754,44760,44764,44768,44776,44780,44796,44804,44808,44812,44820,44828,44832,44836,44840,44844,44850,44854,44864,44872,44880,44884,44888,44892,44900,44904,44920,44924,44928,44932,44944,44948,44960,44964,44968,44980,44984,44994,44998,45002,45014,45018,45026,45030,45034,45042,45046,45054,45058,45062,45066,45070,45074,45090,45098,45102,45106,45154,45160,45164,45174,45182,45190,45194,45198,45202,45206,45214,45218,45234,45238,45246,45254],{"__ignoreMap":39},[118,44584,44585,44587],{"class":120,"line":121},[118,44586,30385],{"class":124},[118,44588,30388],{"class":128},[118,44590,44591,44593,44595,44597],{"class":120,"line":40},[118,44592,30385],{"class":124},[118,44594,31408],{"class":128},[118,44596,31376],{"class":124},[118,44598,31413],{"class":128},[118,44600,44601,44603,44605,44607],{"class":120,"line":1183},[118,44602,30730],{"class":124},[118,44604,31391],{"class":128},[118,44606,30385],{"class":124},[118,44608,31396],{"class":128},[118,44610,44611],{"class":120,"line":1198},[118,44612,33915],{"class":187},[118,44614,44615,44617,44619,44621],{"class":120,"line":1204},[118,44616,30730],{"class":124},[118,44618,31361],{"class":128},[118,44620,30385],{"class":124},[118,44622,31366],{"class":128},[118,44624,44625,44627,44629,44631],{"class":120,"line":1218},[118,44626,30730],{"class":124},[118,44628,31907],{"class":128},[118,44630,30385],{"class":124},[118,44632,44633],{"class":128}," GoogLeNet,Inception\n",[118,44635,44636],{"class":120,"line":1224},[118,44637,2404],{"emptyLinePlaceholder":45},[118,44639,44640],{"class":120,"line":1315},[118,44641,2404],{"emptyLinePlaceholder":45},[118,44643,44644],{"class":120,"line":1321},[118,44645,33944],{"class":187},[118,44647,44648,44650,44652],{"class":120,"line":1333},[118,44649,31940],{"class":124},[118,44651,33951],{"class":1967},[118,44653,31946],{"class":128},[118,44655,44656,44658,44660,44662,44664,44666,44668],{"class":120,"line":1616},[118,44657,33958],{"class":128},[118,44659,174],{"class":124},[118,44661,31448],{"class":128},[118,44663,31451],{"class":5221},[118,44665,174],{"class":124},[118,44667,31456],{"class":233},[118,44669,31459],{"class":128},[118,44671,44672,44674,44676,44678],{"class":120,"line":1621},[118,44673,33975],{"class":5221},[118,44675,174],{"class":124},[118,44677,33980],{"class":177},[118,44679,31459],{"class":128},[118,44681,44682,44684,44686,44688,44690,44692,44694],{"class":120,"line":1627},[118,44683,33987],{"class":5221},[118,44685,174],{"class":124},[118,44687,31486],{"class":128},[118,44689,31489],{"class":5221},[118,44691,174],{"class":124},[118,44693,35442],{"class":177},[118,44695,31497],{"class":128},[118,44697,44698,44700,44702,44704],{"class":120,"line":1632},[118,44699,34004],{"class":5221},[118,44701,174],{"class":124},[118,44703,31469],{"class":177},[118,44705,135],{"class":128},[118,44707,44708,44710,44712,44714,44716,44718],{"class":120,"line":1646},[118,44709,34015],{"class":128},[118,44711,174],{"class":124},[118,44713,31527],{"class":128},[118,44715,31530],{"class":5221},[118,44717,174],{"class":124},[118,44719,34026],{"class":128},[118,44721,44722],{"class":120,"line":1651},[118,44723,34031],{"class":187},[118,44725,44726,44728,44730,44732],{"class":120,"line":1657},[118,44727,34036],{"class":5221},[118,44729,174],{"class":124},[118,44731,346],{"class":177},[118,44733,31459],{"class":128},[118,44735,44736,44738,44740,44742],{"class":120,"line":1678},[118,44737,34047],{"class":5221},[118,44739,174],{"class":124},[118,44741,31469],{"class":177},[118,44743,31459],{"class":128},[118,44745,44746,44748,44750,44752],{"class":120,"line":1683},[118,44747,34058],{"class":5221},[118,44749,174],{"class":124},[118,44751,320],{"class":177},[118,44753,135],{"class":128},[118,44755,44756,44758],{"class":120,"line":1697},[118,44757,4094],{"class":124},[118,44759,34071],{"class":128},[118,44761,44762],{"class":120,"line":1702},[118,44763,2404],{"emptyLinePlaceholder":45},[118,44765,44766],{"class":120,"line":1731},[118,44767,34080],{"class":187},[118,44769,44770,44772,44774],{"class":120,"line":1736},[118,44771,31940],{"class":124},[118,44773,34087],{"class":1967},[118,44775,34090],{"class":128},[118,44777,44778],{"class":120,"line":1753},[118,44779,34095],{"class":187},[118,44781,44782,44784,44786,44788,44790,44792,44794],{"class":120,"line":1758},[118,44783,31230],{"class":128},[118,44785,174],{"class":124},[118,44787,31237],{"class":233},[118,44789,1708],{"class":124},[118,44791,31242],{"class":128},[118,44793,1705],{"class":124},[118,44795,34112],{"class":233},[118,44797,44798,44800,44802],{"class":120,"line":1763},[118,44799,31282],{"class":128},[118,44801,174],{"class":124},[118,44803,32282],{"class":128},[118,44805,44806],{"class":120,"line":1768},[118,44807,2404],{"emptyLinePlaceholder":45},[118,44809,44810],{"class":120,"line":1782},[118,44811,34129],{"class":187},[118,44813,44814,44816,44818],{"class":120,"line":1787},[118,44815,34134],{"class":128},[118,44817,174],{"class":124},[118,44819,32335],{"class":177},[118,44821,44822,44824,44826],{"class":120,"line":2581},[118,44823,34143],{"class":128},[118,44825,174],{"class":124},[118,44827,3089],{"class":177},[118,44829,44830],{"class":120,"line":2595},[118,44831,2404],{"emptyLinePlaceholder":45},[118,44833,44834],{"class":120,"line":2603},[118,44835,34156],{"class":187},[118,44837,44838],{"class":120,"line":2608},[118,44839,34161],{"class":187},[118,44841,44842],{"class":120,"line":2614},[118,44843,34166],{"class":187},[118,44845,44846,44848],{"class":120,"line":2620},[118,44847,34171],{"class":124},[118,44849,32877],{"class":128},[118,44851,44852],{"class":120,"line":2625},[118,44853,34178],{"class":187},[118,44855,44856,44858,44860,44862],{"class":120,"line":7953},[118,44857,3407],{"class":124},[118,44859,34185],{"class":128},[118,44861,26036],{"class":124},[118,44863,34190],{"class":128},[118,44865,44866,44868,44870],{"class":120,"line":7977},[118,44867,34195],{"class":128},[118,44869,174],{"class":124},[118,44871,34200],{"class":128},[118,44873,44874,44876,44878],{"class":120,"line":7982},[118,44875,34205],{"class":128},[118,44877,174],{"class":124},[118,44879,34210],{"class":128},[118,44881,44882],{"class":120,"line":7988},[118,44883,34215],{"class":187},[118,44885,44886],{"class":120,"line":8015},[118,44887,32868],{"class":128},[118,44889,44890],{"class":120,"line":8020},[118,44891,34224],{"class":187},[118,44893,44894,44896,44898],{"class":120,"line":8026},[118,44895,32653],{"class":128},[118,44897,174],{"class":124},[118,44899,34233],{"class":128},[118,44901,44902],{"class":120,"line":8038},[118,44903,34238],{"class":187},[118,44905,44906,44908,44910,44912,44914,44916,44918],{"class":120,"line":8050},[118,44907,32670],{"class":128},[118,44909,174],{"class":124},[118,44911,32675],{"class":128},[118,44913,32678],{"class":5221},[118,44915,174],{"class":124},[118,44917,346],{"class":177},[118,44919,135],{"class":128},[118,44921,44922],{"class":120,"line":8062},[118,44923,34259],{"class":187},[118,44925,44926],{"class":120,"line":9721},[118,44927,34264],{"class":187},[118,44929,44930],{"class":120,"line":9746},[118,44931,34269],{"class":187},[118,44933,44934,44936,44938,44940,44942],{"class":120,"line":9769},[118,44935,34274],{"class":128},[118,44937,9482],{"class":124},[118,44939,32780],{"class":128},[118,44941,2953],{"class":124},[118,44943,34283],{"class":128},[118,44945,44946],{"class":120,"line":9793},[118,44947,34288],{"class":187},[118,44949,44950,44952,44954,44956,44958],{"class":120,"line":9798},[118,44951,34293],{"class":128},[118,44953,9482],{"class":124},[118,44955,34298],{"class":128},[118,44957,320],{"class":177},[118,44959,135],{"class":128},[118,44961,44962],{"class":120,"line":9803},[118,44963,2404],{"emptyLinePlaceholder":45},[118,44965,44966],{"class":120,"line":9808},[118,44967,34311],{"class":187},[118,44969,44970,44972,44974,44976,44978],{"class":120,"line":9817},[118,44971,34316],{"class":128},[118,44973,174],{"class":124},[118,44975,34321],{"class":128},[118,44977,712],{"class":124},[118,44979,34326],{"class":128},[118,44981,44982],{"class":120,"line":9822},[118,44983,34331],{"class":187},[118,44985,44986,44988,44990,44992],{"class":120,"line":9828},[118,44987,32444],{"class":177},[118,44989,129],{"class":128},[118,44991,34340],{"class":233},[118,44993,34343],{"class":128},[118,44995,44996],{"class":120,"line":9849},[118,44997,2404],{"emptyLinePlaceholder":45},[118,44999,45000],{"class":120,"line":9855},[118,45001,34352],{"class":187},[118,45003,45004,45006,45008,45010,45012],{"class":120,"line":9869},[118,45005,1535],{"class":124},[118,45007,31213],{"class":177},[118,45009,2953],{"class":124},[118,45011,31218],{"class":233},[118,45013,3743],{"class":128},[118,45015,45016],{"class":120,"line":9875},[118,45017,34369],{"class":187},[118,45019,45020,45022,45024],{"class":120,"line":9902},[118,45021,31282],{"class":128},[118,45023,174],{"class":124},[118,45025,44544],{"class":128},[118,45027,45028],{"class":120,"line":9911},[118,45029,34382],{"class":187},[118,45031,45032],{"class":120,"line":9917},[118,45033,34387],{"class":187},[118,45035,45036,45038,45040],{"class":120,"line":9925},[118,45037,34392],{"class":128},[118,45039,34395],{"class":233},[118,45041,30490],{"class":128},[118,45043,45044],{"class":120,"line":9930},[118,45045,34402],{"class":187},[118,45047,45048,45050,45052],{"class":120,"line":16609},[118,45049,34015],{"class":128},[118,45051,174],{"class":124},[118,45053,34411],{"class":128},[118,45055,45056],{"class":120,"line":16615},[118,45057,34416],{"class":187},[118,45059,45060],{"class":120,"line":16638},[118,45061,34421],{"class":128},[118,45063,45064],{"class":120,"line":16644},[118,45065,2404],{"emptyLinePlaceholder":45},[118,45067,45068],{"class":120,"line":16667},[118,45069,34430],{"class":187},[118,45071,45072],{"class":120,"line":16681},[118,45073,34435],{"class":187},[118,45075,45076,45078,45080,45082,45084,45086,45088],{"class":120,"line":16701},[118,45077,31230],{"class":128},[118,45079,174],{"class":124},[118,45081,31237],{"class":233},[118,45083,1708],{"class":124},[118,45085,31242],{"class":128},[118,45087,1705],{"class":124},[118,45089,34112],{"class":233},[118,45091,45092,45094,45096],{"class":120,"line":16707},[118,45093,31282],{"class":128},[118,45095,174],{"class":124},[118,45097,32282],{"class":128},[118,45099,45100],{"class":120,"line":16718},[118,45101,34464],{"class":187},[118,45103,45104],{"class":120,"line":16741},[118,45105,34469],{"class":187},[118,45107,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144,45146,45148,45150,45152],{"class":120,"line":16763},[118,45109,34474],{"class":128},[118,45111,174],{"class":124},[118,45113,1018],{"class":128},[118,45115,34481],{"class":233},[118,45117,506],{"class":128},[118,45119,34486],{"class":233},[118,45121,506],{"class":128},[118,45123,34491],{"class":233},[118,45125,506],{"class":128},[118,45127,34496],{"class":233},[118,45129,506],{"class":128},[118,45131,34501],{"class":233},[118,45133,506],{"class":128},[118,45135,34506],{"class":233},[118,45137,506],{"class":128},[118,45139,34511],{"class":233},[118,45141,506],{"class":128},[118,45143,34516],{"class":233},[118,45145,506],{"class":128},[118,45147,34521],{"class":233},[118,45149,506],{"class":128},[118,45151,34526],{"class":233},[118,45153,33239],{"class":128},[118,45155,45156,45158],{"class":120,"line":16768},[118,45157,34171],{"class":124},[118,45159,32877],{"class":128},[118,45161,45162],{"class":120,"line":16774},[118,45163,34539],{"class":187},[118,45165,45166,45168,45170,45172],{"class":120,"line":16788},[118,45167,3407],{"class":124},[118,45169,34546],{"class":128},[118,45171,26036],{"class":124},[118,45173,34190],{"class":128},[118,45175,45176,45178,45180],{"class":120,"line":16801},[118,45177,32603],{"class":128},[118,45179,174],{"class":124},[118,45181,32608],{"class":128},[118,45183,45184,45186,45188],{"class":120,"line":16806},[118,45185,32618],{"class":128},[118,45187,174],{"class":124},[118,45189,32623],{"class":128},[118,45191,45192],{"class":120,"line":16820},[118,45193,2404],{"emptyLinePlaceholder":45},[118,45195,45196],{"class":120,"line":16825},[118,45197,34575],{"class":187},[118,45199,45200],{"class":120,"line":16831},[118,45201,32868],{"class":128},[118,45203,45204],{"class":120,"line":16836},[118,45205,34584],{"class":187},[118,45207,45208,45210,45212],{"class":120,"line":16850},[118,45209,32653],{"class":128},[118,45211,174],{"class":124},[118,45213,32658],{"class":128},[118,45215,45216],{"class":120,"line":16855},[118,45217,34597],{"class":187},[118,45219,45220,45222,45224,45226,45228,45230,45232],{"class":120,"line":16860},[118,45221,32670],{"class":128},[118,45223,174],{"class":124},[118,45225,32675],{"class":128},[118,45227,32678],{"class":5221},[118,45229,174],{"class":124},[118,45231,346],{"class":177},[118,45233,135],{"class":128},[118,45235,45236],{"class":120,"line":16874},[118,45237,34618],{"class":187},[118,45239,45240,45242,45244],{"class":120,"line":16886},[118,45241,34623],{"class":128},[118,45243,174],{"class":124},[118,45245,34628],{"class":128},[118,45247,45248,45250,45252],{"class":120,"line":16891},[118,45249,34633],{"class":128},[118,45251,174],{"class":124},[118,45253,34638],{"class":128},[118,45255,45256,45258,45260,45262,45264,45266,45268,45270],{"class":120,"line":16904},[118,45257,34643],{"class":177},[118,45259,129],{"class":128},[118,45261,34648],{"class":233},[118,45263,34651],{"class":128},[118,45265,34654],{"class":233},[118,45267,506],{"class":128},[118,45269,34659],{"class":233},[118,45271,34662],{"class":128},[89,45273,45275],{"id":45274},"_24训练自己的数据集","2.4.训练自己的数据集",[15,45277,45278],{},"猫狗分类任务",[15,45280,45281],{},"划分数据集和验证集",[109,45283,45285],{"className":30371,"code":45284,"language":30373,"meta":39,"style":39},"# 创建脚本，用于划分数据集和验证集\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",[115,45286,45287,45292,45299,45304,45315,45322,45326,45336,45350,45359,45363,45368,45378,45398,45402,45407,45417,45428,45441,45445,45450,45459,45469,45480,45484,45489,45499,45503,45508,45513,45518,45523,45528,45532,45542,45569,45582,45594,45621,45626,45631,45645,45650,45662,45677,45692,45700,45704,45709,45715,45727,45740,45745,45750,45755,45805,45811,45815],{"__ignoreMap":39},[118,45288,45289],{"class":120,"line":121},[118,45290,45291],{"class":187},"# 创建脚本，用于划分数据集和验证集\n",[118,45293,45294,45296],{"class":120,"line":40},[118,45295,30385],{"class":124},[118,45297,45298],{"class":128}," os\n",[118,45300,45301],{"class":120,"line":1183},[118,45302,45303],{"class":187},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[118,45305,45306,45308,45311,45313],{"class":120,"line":1198},[118,45307,30730],{"class":124},[118,45309,45310],{"class":128}," shutil ",[118,45312,30385],{"class":124},[118,45314,31815],{"class":128},[118,45316,45317,45319],{"class":120,"line":1204},[118,45318,30385],{"class":124},[118,45320,45321],{"class":128}," random\n",[118,45323,45324],{"class":120,"line":1218},[118,45325,2404],{"emptyLinePlaceholder":45},[118,45327,45328,45330,45333],{"class":120,"line":1224},[118,45329,31940],{"class":124},[118,45331,45332],{"class":1967}," mkfile",[118,45334,45335],{"class":128},"(file):\n",[118,45337,45338,45340,45342,45345,45348],{"class":120,"line":1315},[118,45339,3105],{"class":124},[118,45341,38923],{"class":124},[118,45343,45344],{"class":128}," os.path.exists(",[118,45346,45347],{"class":5221},"file",[118,45349,30779],{"class":128},[118,45351,45352,45355,45357],{"class":120,"line":1321},[118,45353,45354],{"class":128},"        os.makedirs(",[118,45356,45347],{"class":5221},[118,45358,135],{"class":128},[118,45360,45361],{"class":120,"line":1333},[118,45362,2404],{"emptyLinePlaceholder":45},[118,45364,45365],{"class":120,"line":1616},[118,45366,45367],{"class":187},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[118,45369,45370,45373,45375],{"class":120,"line":1621},[118,45371,45372],{"class":128},"file_path",[118,45374,174],{"class":124},[118,45376,45377],{"class":233},"'data_cat_dog'\n",[118,45379,45380,45383,45385,45388,45390,45393,45395],{"class":120,"line":1627},[118,45381,45382],{"class":128},"flower_class",[118,45384,174],{"class":124},[118,45386,45387],{"class":128},"[cla ",[118,45389,3029],{"class":124},[118,45391,45392],{"class":128}," cla ",[118,45394,26036],{"class":124},[118,45396,45397],{"class":128}," os.listdir(file_path)]\n",[118,45399,45400],{"class":120,"line":1632},[118,45401,2404],{"emptyLinePlaceholder":45},[118,45403,45404],{"class":120,"line":1646},[118,45405,45406],{"class":187},"# 创建训练集train文件夹\n",[118,45408,45409,45412,45415],{"class":120,"line":1651},[118,45410,45411],{"class":128},"mkfile(",[118,45413,45414],{"class":233},"'data\u002Ftrain'",[118,45416,135],{"class":128},[118,45418,45419,45421,45423,45425],{"class":120,"line":1657},[118,45420,3029],{"class":124},[118,45422,45392],{"class":128},[118,45424,26036],{"class":124},[118,45426,45427],{"class":128}," flower_class:\n",[118,45429,45430,45433,45436,45438],{"class":120,"line":1678},[118,45431,45432],{"class":128},"    mkfile(",[118,45434,45435],{"class":233},"'data\u002Ftrain\u002F'",[118,45437,609],{"class":124},[118,45439,45440],{"class":128},"cla)\n",[118,45442,45443],{"class":120,"line":1683},[118,45444,2404],{"emptyLinePlaceholder":45},[118,45446,45447],{"class":120,"line":1697},[118,45448,45449],{"class":187},"# 创建验证集val文件夹\n",[118,45451,45452,45454,45457],{"class":120,"line":1702},[118,45453,45411],{"class":128},[118,45455,45456],{"class":233},"'data\u002Ftest'",[118,45458,135],{"class":128},[118,45460,45461,45463,45465,45467],{"class":120,"line":1731},[118,45462,3029],{"class":124},[118,45464,45392],{"class":128},[118,45466,26036],{"class":124},[118,45468,45427],{"class":128},[118,45470,45471,45473,45476,45478],{"class":120,"line":1736},[118,45472,45432],{"class":128},[118,45474,45475],{"class":233},"'data\u002Ftest\u002F'",[118,45477,609],{"class":124},[118,45479,45440],{"class":128},[118,45481,45482],{"class":120,"line":1753},[118,45483,2404],{"emptyLinePlaceholder":45},[118,45485,45486],{"class":120,"line":1758},[118,45487,45488],{"class":187},"# 划分比例，训练集：测试集=9：1\n",[118,45490,45491,45494,45496],{"class":120,"line":1763},[118,45492,45493],{"class":128},"split_rate",[118,45495,174],{"class":124},[118,45497,45498],{"class":177},"0.1\n",[118,45500,45501],{"class":120,"line":1768},[118,45502,2404],{"emptyLinePlaceholder":45},[118,45504,45505],{"class":120,"line":1782},[118,45506,45507],{"class":187},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[118,45509,45510],{"class":120,"line":1787},[118,45511,45512],{"class":187},"# cla_path：当前类别的原始图片路径\n",[118,45514,45515],{"class":120,"line":2581},[118,45516,45517],{"class":187},"# images：当前类别下所有图片的文件名列表\n",[118,45519,45520],{"class":120,"line":2595},[118,45521,45522],{"class":187},"# num：该类别图片总数\n",[118,45524,45525],{"class":120,"line":2603},[118,45526,45527],{"class":187},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[118,45529,45530],{"class":120,"line":2608},[118,45531,2404],{"emptyLinePlaceholder":45},[118,45533,45534,45536,45538,45540],{"class":120,"line":2614},[118,45535,3029],{"class":124},[118,45537,45392],{"class":128},[118,45539,26036],{"class":124},[118,45541,45427],{"class":128},[118,45543,45544,45547,45549,45552,45554,45557,45560,45562,45564,45566],{"class":120,"line":2620},[118,45545,45546],{"class":128},"    cla_path ",[118,45548,174],{"class":124},[118,45550,45551],{"class":128}," file_path ",[118,45553,609],{"class":124},[118,45555,45556],{"class":233}," '\u002F'",[118,45558,45559],{"class":124}," +",[118,45561,45392],{"class":128},[118,45563,609],{"class":124},[118,45565,45556],{"class":233},[118,45567,45568],{"class":187},"  # 某一类别的子目录\n",[118,45570,45571,45574,45576,45579],{"class":120,"line":2625},[118,45572,45573],{"class":128},"    images ",[118,45575,174],{"class":124},[118,45577,45578],{"class":128}," os.listdir(cla_path)  ",[118,45580,45581],{"class":187},"# iamges 列表存储了该目录下所有图像的名称\n",[118,45583,45584,45587,45589,45591],{"class":120,"line":7953},[118,45585,45586],{"class":128},"    num ",[118,45588,174],{"class":124},[118,45590,7336],{"class":177},[118,45592,45593],{"class":128},"(images)\n",[118,45595,45596,45599,45601,45604,45606,45608,45610,45613,45615,45618],{"class":120,"line":7977},[118,45597,45598],{"class":128},"    eval_index ",[118,45600,174],{"class":124},[118,45602,45603],{"class":128}," random.sample(images, ",[118,45605,621],{"class":5221},[118,45607,174],{"class":124},[118,45609,132],{"class":177},[118,45611,45612],{"class":128},"(num ",[118,45614,583],{"class":124},[118,45616,45617],{"class":128}," split_rate))  ",[118,45619,45620],{"class":187},"# 从images列表中随机抽取 k 个图像名称\n",[118,45622,45623],{"class":120,"line":7982},[118,45624,45625],{"class":187},"    # 遍历该类别下的所有图片\n",[118,45627,45628],{"class":120,"line":7988},[118,45629,45630],{"class":187},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[118,45632,45633,45635,45638,45640,45642],{"class":120,"line":8015},[118,45634,3205],{"class":124},[118,45636,45637],{"class":128}," index, image ",[118,45639,26036],{"class":124},[118,45641,31599],{"class":177},[118,45643,45644],{"class":128},"(images):\n",[118,45646,45647],{"class":120,"line":8020},[118,45648,45649],{"class":187},"        # eval_index 中保存验证集val的图像名称\n",[118,45651,45652,45654,45657,45659],{"class":120,"line":8026},[118,45653,2501],{"class":124},[118,45655,45656],{"class":128}," image ",[118,45658,26036],{"class":124},[118,45660,45661],{"class":128}," eval_index:\n",[118,45663,45664,45667,45669,45672,45674],{"class":120,"line":8038},[118,45665,45666],{"class":128},"            image_path ",[118,45668,174],{"class":124},[118,45670,45671],{"class":128}," cla_path ",[118,45673,609],{"class":124},[118,45675,45676],{"class":128}," image\n",[118,45678,45679,45682,45684,45687,45689],{"class":120,"line":8050},[118,45680,45681],{"class":128},"            new_path ",[118,45683,174],{"class":124},[118,45685,45686],{"class":233}," 'data\u002Ftest\u002F'",[118,45688,45559],{"class":124},[118,45690,45691],{"class":128}," cla\n",[118,45693,45694,45697],{"class":120,"line":8062},[118,45695,45696],{"class":128},"            copy(image_path, new_path)  ",[118,45698,45699],{"class":187},"# 将选中的图像复制到新路径\n",[118,45701,45702],{"class":120,"line":9721},[118,45703,2404],{"emptyLinePlaceholder":45},[118,45705,45706],{"class":120,"line":9746},[118,45707,45708],{"class":187},"        # 其余的图像保存在训练集train中\n",[118,45710,45711,45713],{"class":120,"line":9769},[118,45712,2538],{"class":124},[118,45714,3743],{"class":128},[118,45716,45717,45719,45721,45723,45725],{"class":120,"line":9793},[118,45718,45666],{"class":128},[118,45720,174],{"class":124},[118,45722,45671],{"class":128},[118,45724,609],{"class":124},[118,45726,45676],{"class":128},[118,45728,45729,45731,45733,45736,45738],{"class":120,"line":9798},[118,45730,45681],{"class":128},[118,45732,174],{"class":124},[118,45734,45735],{"class":233}," 'data\u002Ftrain\u002F'",[118,45737,45559],{"class":124},[118,45739,45691],{"class":128},[118,45741,45742],{"class":120,"line":9803},[118,45743,45744],{"class":128},"            copy(image_path, new_path)\n",[118,45746,45747],{"class":120,"line":9808},[118,45748,45749],{"class":187},"            # 打印进度条信息\n",[118,45751,45752],{"class":120,"line":9817},[118,45753,45754],{"class":187},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[118,45756,45757,45759,45761,45763,45766,45768,45770,45773,45775,45777,45779,45782,45785,45787,45789,45792,45795,45797,45799,45802],{"class":120,"line":9822},[118,45758,32444],{"class":177},[118,45760,129],{"class":128},[118,45762,379],{"class":233},[118,45764,45765],{"class":177},"\\r",[118,45767,1018],{"class":233},[118,45769,32452],{"class":177},[118,45771,45772],{"class":233},"] processing [",[118,45774,32452],{"class":177},[118,45776,712],{"class":233},[118,45778,32452],{"class":177},[118,45780,45781],{"class":233},"]\"",[118,45783,45784],{"class":128},".format(cla, index ",[118,45786,609],{"class":124},[118,45788,25123],{"class":177},[118,45790,45791],{"class":128},", num), ",[118,45793,45794],{"class":5221},"end",[118,45796,174],{"class":124},[118,45798,7657],{"class":233},[118,45800,45801],{"class":128},")  ",[118,45803,45804],{"class":187},"# processing bar\n",[118,45806,45807,45809],{"class":120,"line":9828},[118,45808,31292],{"class":177},[118,45810,1980],{"class":128},[118,45812,45813],{"class":120,"line":9849},[118,45814,2404],{"emptyLinePlaceholder":45},[118,45816,45817,45819,45821,45824],{"class":120,"line":9855},[118,45818,30408],{"class":177},[118,45820,129],{"class":128},[118,45822,45823],{"class":233},"\"processing done!\"",[118,45825,135],{"class":128},[15,45827,45828],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22003,45830,45832],{"id":45831},"_242模型代码","2.4.2.模型代码",[15,45834,45835],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[109,45837,45839],{"className":30371,"code":45838,"language":30373,"meta":39,"style":39},"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",[115,45840,45841,45847,45857,45867,45871,45887,45895,45909,45919,45923,45953,45957,45991,46037,46041,46075,46121,46125,46129,46163,46193,46197,46205,46219,46241,46263,46281,46285,46299,46303,46307,46323,46327,46335,46349,46359,46403,46407,46435,46439,46449,46477,46481,46517,46521,46549,46553,46563,46595,46627,46655,46659,46669,46701,46733,46765,46797,46829,46857,46861,46871,46903,46935,46947,46951,46963,46967,46971,46983,46991,47011,47015,47019,47023,47027,47031,47035,47049,47057,47065,47077,47091,47099,47103,47111,47121,47131,47141,47151,47161,47167,47171,47175,47187,47207,47215],{"__ignoreMap":39},[118,45842,45843,45845],{"class":120,"line":121},[118,45844,30385],{"class":124},[118,45846,30388],{"class":128},[118,45848,45849,45851,45853,45855],{"class":120,"line":40},[118,45850,30730],{"class":124},[118,45852,30733],{"class":128},[118,45854,30385],{"class":124},[118,45856,30738],{"class":128},[118,45858,45859,45861,45863,45865],{"class":120,"line":1183},[118,45860,30730],{"class":124},[118,45862,30750],{"class":128},[118,45864,30385],{"class":124},[118,45866,30755],{"class":128},[118,45868,45869],{"class":120,"line":1198},[118,45870,2404],{"emptyLinePlaceholder":45},[118,45872,45873,45875,45877,45879,45881,45883,45885],{"class":120,"line":1204},[118,45874,14699],{"class":124},[118,45876,41486],{"class":1967},[118,45878,129],{"class":128},[118,45880,30771],{"class":1967},[118,45882,686],{"class":128},[118,45884,30776],{"class":1967},[118,45886,30779],{"class":128},[118,45888,45889,45891,45893],{"class":120,"line":1218},[118,45890,30794],{"class":124},[118,45892,30797],{"class":177},[118,45894,41505],{"class":128},[118,45896,45897,45899,45901,45903,45905,45907],{"class":120,"line":1224},[118,45898,30810],{"class":177},[118,45900,41512],{"class":128},[118,45902,30816],{"class":177},[118,45904,30819],{"class":128},[118,45906,30822],{"class":177},[118,45908,1980],{"class":128},[118,45910,45911,45913,45915,45917],{"class":120,"line":1315},[118,45912,30838],{"class":177},[118,45914,34764],{"class":128},[118,45916,174],{"class":124},[118,45918,34769],{"class":128},[118,45920,45921],{"class":120,"line":1321},[118,45922,41535],{"class":187},[118,45924,45925,45927,45929,45931,45933,45935,45937,45939,45941,45943,45945,45947,45949,45951],{"class":120,"line":1333},[118,45926,30838],{"class":177},[118,45928,41542],{"class":128},[118,45930,174],{"class":124},[118,45932,30846],{"class":128},[118,45934,30849],{"class":5221},[118,45936,174],{"class":124},[118,45938,41553],{"class":128},[118,45940,30858],{"class":5221},[118,45942,174],{"class":124},[118,45944,41560],{"class":128},[118,45946,30867],{"class":5221},[118,45948,174],{"class":124},[118,45950,346],{"class":177},[118,45952,135],{"class":128},[118,45954,45955],{"class":120,"line":1616},[118,45956,41573],{"class":187},[118,45958,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987,45989],{"class":120,"line":1621},[118,45960,30838],{"class":177},[118,45962,41580],{"class":128},[118,45964,174],{"class":124},[118,45966,30846],{"class":128},[118,45968,30849],{"class":5221},[118,45970,174],{"class":124},[118,45972,41553],{"class":128},[118,45974,30858],{"class":5221},[118,45976,174],{"class":124},[118,45978,41597],{"class":128},[118,45980,320],{"class":177},[118,45982,41602],{"class":128},[118,45984,30867],{"class":5221},[118,45986,174],{"class":124},[118,45988,346],{"class":177},[118,45990,135],{"class":128},[118,45992,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035],{"class":120,"line":1627},[118,45994,30838],{"class":177},[118,45996,41617],{"class":128},[118,45998,174],{"class":124},[118,46000,30846],{"class":128},[118,46002,30849],{"class":5221},[118,46004,174],{"class":124},[118,46006,41597],{"class":128},[118,46008,320],{"class":177},[118,46010,41602],{"class":128},[118,46012,30858],{"class":5221},[118,46014,174],{"class":124},[118,46016,41597],{"class":128},[118,46018,346],{"class":177},[118,46020,41602],{"class":128},[118,46022,30867],{"class":5221},[118,46024,174],{"class":124},[118,46026,200],{"class":177},[118,46028,506],{"class":128},[118,46030,30876],{"class":5221},[118,46032,174],{"class":124},[118,46034,346],{"class":177},[118,46036,135],{"class":128},[118,46038,46039],{"class":120,"line":1632},[118,46040,41662],{"class":187},[118,46042,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073],{"class":120,"line":1646},[118,46044,30838],{"class":177},[118,46046,41669],{"class":128},[118,46048,174],{"class":124},[118,46050,30846],{"class":128},[118,46052,30849],{"class":5221},[118,46054,174],{"class":124},[118,46056,41553],{"class":128},[118,46058,30858],{"class":5221},[118,46060,174],{"class":124},[118,46062,41686],{"class":128},[118,46064,320],{"class":177},[118,46066,41602],{"class":128},[118,46068,30867],{"class":5221},[118,46070,174],{"class":124},[118,46072,346],{"class":177},[118,46074,135],{"class":128},[118,46076,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119],{"class":120,"line":1651},[118,46078,30838],{"class":177},[118,46080,41705],{"class":128},[118,46082,174],{"class":124},[118,46084,30846],{"class":128},[118,46086,30849],{"class":5221},[118,46088,174],{"class":124},[118,46090,41686],{"class":128},[118,46092,320],{"class":177},[118,46094,41602],{"class":128},[118,46096,30858],{"class":5221},[118,46098,174],{"class":124},[118,46100,41686],{"class":128},[118,46102,346],{"class":177},[118,46104,41602],{"class":128},[118,46106,30867],{"class":5221},[118,46108,174],{"class":124},[118,46110,447],{"class":177},[118,46112,506],{"class":128},[118,46114,30876],{"class":5221},[118,46116,174],{"class":124},[118,46118,206],{"class":177},[118,46120,135],{"class":128},[118,46122,46123],{"class":120,"line":1657},[118,46124,41750],{"class":187},[118,46126,46127],{"class":120,"line":1678},[118,46128,41755],{"class":187},[118,46130,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161],{"class":120,"line":1683},[118,46132,30838],{"class":177},[118,46134,41762],{"class":128},[118,46136,174],{"class":124},[118,46138,34822],{"class":128},[118,46140,30867],{"class":5221},[118,46142,174],{"class":124},[118,46144,200],{"class":177},[118,46146,506],{"class":128},[118,46148,30922],{"class":5221},[118,46150,174],{"class":124},[118,46152,346],{"class":177},[118,46154,506],{"class":128},[118,46156,30876],{"class":5221},[118,46158,174],{"class":124},[118,46160,346],{"class":177},[118,46162,135],{"class":128},[118,46164,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191],{"class":120,"line":1697},[118,46166,30838],{"class":177},[118,46168,41797],{"class":128},[118,46170,174],{"class":124},[118,46172,30846],{"class":128},[118,46174,30849],{"class":5221},[118,46176,174],{"class":124},[118,46178,41553],{"class":128},[118,46180,30858],{"class":5221},[118,46182,174],{"class":124},[118,46184,41814],{"class":128},[118,46186,30867],{"class":5221},[118,46188,174],{"class":124},[118,46190,346],{"class":177},[118,46192,135],{"class":128},[118,46194,46195],{"class":120,"line":1702},[118,46196,2404],{"emptyLinePlaceholder":45},[118,46198,46199,46201,46203],{"class":120,"line":1731},[118,46200,30794],{"class":124},[118,46202,31086],{"class":1967},[118,46204,31089],{"class":128},[118,46206,46207,46209,46211,46213,46215,46217],{"class":120,"line":1736},[118,46208,41839],{"class":128},[118,46210,174],{"class":124},[118,46212,30816],{"class":177},[118,46214,35177],{"class":128},[118,46216,30816],{"class":177},[118,46218,41850],{"class":128},[118,46220,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239],{"class":120,"line":1753},[118,46222,7090],{"class":128},[118,46224,174],{"class":124},[118,46226,30816],{"class":177},[118,46228,35177],{"class":128},[118,46230,30816],{"class":177},[118,46232,41865],{"class":128},[118,46234,30816],{"class":177},[118,46236,35177],{"class":128},[118,46238,30816],{"class":177},[118,46240,41874],{"class":128},[118,46242,46243,46245,46247,46249,46251,46253,46255,46257,46259,46261],{"class":120,"line":1758},[118,46244,41879],{"class":128},[118,46246,174],{"class":124},[118,46248,30816],{"class":177},[118,46250,35177],{"class":128},[118,46252,30816],{"class":177},[118,46254,41890],{"class":128},[118,46256,30816],{"class":177},[118,46258,35177],{"class":128},[118,46260,30816],{"class":177},[118,46262,41899],{"class":128},[118,46264,46265,46267,46269,46271,46273,46275,46277,46279],{"class":120,"line":1763},[118,46266,41904],{"class":128},[118,46268,174],{"class":124},[118,46270,30816],{"class":177},[118,46272,35177],{"class":128},[118,46274,30816],{"class":177},[118,46276,41915],{"class":128},[118,46278,30816],{"class":177},[118,46280,41920],{"class":128},[118,46282,46283],{"class":120,"line":1768},[118,46284,41925],{"class":187},[118,46286,46287,46289,46291,46293,46295,46297],{"class":120,"line":1782},[118,46288,14757],{"class":124},[118,46290,41932],{"class":128},[118,46292,32678],{"class":5221},[118,46294,174],{"class":124},[118,46296,346],{"class":177},[118,46298,135],{"class":128},[118,46300,46301],{"class":120,"line":1787},[118,46302,2404],{"emptyLinePlaceholder":45},[118,46304,46305],{"class":120,"line":2581},[118,46306,41953],{"class":187},[118,46308,46309,46311,46313,46315,46317,46319,46321],{"class":120,"line":2595},[118,46310,14699],{"class":124},[118,46312,41960],{"class":1967},[118,46314,129],{"class":128},[118,46316,30771],{"class":1967},[118,46318,686],{"class":128},[118,46320,30776],{"class":1967},[118,46322,30779],{"class":128},[118,46324,46325],{"class":120,"line":2603},[118,46326,41975],{"class":187},[118,46328,46329,46331,46333],{"class":120,"line":2608},[118,46330,30794],{"class":124},[118,46332,30797],{"class":177},[118,46334,41984],{"class":128},[118,46336,46337,46339,46341,46343,46345,46347],{"class":120,"line":2614},[118,46338,30810],{"class":177},[118,46340,41991],{"class":128},[118,46342,30816],{"class":177},[118,46344,30819],{"class":128},[118,46346,30822],{"class":177},[118,46348,1980],{"class":128},[118,46350,46351,46353,46355,46357],{"class":120,"line":2620},[118,46352,30838],{"class":177},[118,46354,42006],{"class":128},[118,46356,174],{"class":124},[118,46358,38002],{"class":128},[118,46360,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399,46401],{"class":120,"line":2625},[118,46362,38007],{"class":128},[118,46364,30849],{"class":5221},[118,46366,174],{"class":124},[118,46368,200],{"class":177},[118,46370,506],{"class":128},[118,46372,30858],{"class":5221},[118,46374,174],{"class":124},[118,46376,332],{"class":177},[118,46378,506],{"class":128},[118,46380,30867],{"class":5221},[118,46382,174],{"class":124},[118,46384,497],{"class":177},[118,46386,506],{"class":128},[118,46388,30922],{"class":5221},[118,46390,174],{"class":124},[118,46392,206],{"class":177},[118,46394,506],{"class":128},[118,46396,30876],{"class":5221},[118,46398,174],{"class":124},[118,46400,200],{"class":177},[118,46402,38040],{"class":128},[118,46404,46405],{"class":120,"line":7953},[118,46406,38045],{"class":128},[118,46408,46409,46411,46413,46415,46417,46419,46421,46423,46425,46427,46429,46431,46433],{"class":120,"line":7977},[118,46410,38090],{"class":128},[118,46412,30867],{"class":5221},[118,46414,174],{"class":124},[118,46416,200],{"class":177},[118,46418,506],{"class":128},[118,46420,30922],{"class":5221},[118,46422,174],{"class":124},[118,46424,206],{"class":177},[118,46426,506],{"class":128},[118,46428,30876],{"class":5221},[118,46430,174],{"class":124},[118,46432,346],{"class":177},[118,46434,135],{"class":128},[118,46436,46437],{"class":120,"line":7982},[118,46438,38119],{"class":128},[118,46440,46441,46443,46445,46447],{"class":120,"line":7988},[118,46442,30838],{"class":177},[118,46444,42097],{"class":128},[118,46446,174],{"class":124},[118,46448,38002],{"class":128},[118,46450,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471,46473,46475],{"class":120,"line":8015},[118,46452,38007],{"class":128},[118,46454,30849],{"class":5221},[118,46456,174],{"class":124},[118,46458,332],{"class":177},[118,46460,506],{"class":128},[118,46462,30858],{"class":5221},[118,46464,174],{"class":124},[118,46466,332],{"class":177},[118,46468,506],{"class":128},[118,46470,30867],{"class":5221},[118,46472,174],{"class":124},[118,46474,346],{"class":177},[118,46476,38040],{"class":128},[118,46478,46479],{"class":120,"line":8020},[118,46480,38045],{"class":128},[118,46482,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515],{"class":120,"line":8026},[118,46484,38007],{"class":128},[118,46486,30849],{"class":5221},[118,46488,174],{"class":124},[118,46490,332],{"class":177},[118,46492,506],{"class":128},[118,46494,30858],{"class":5221},[118,46496,174],{"class":124},[118,46498,42152],{"class":177},[118,46500,506],{"class":128},[118,46502,30867],{"class":5221},[118,46504,174],{"class":124},[118,46506,200],{"class":177},[118,46508,506],{"class":128},[118,46510,30876],{"class":5221},[118,46512,174],{"class":124},[118,46514,346],{"class":177},[118,46516,38040],{"class":128},[118,46518,46519],{"class":120,"line":8038},[118,46520,38045],{"class":128},[118,46522,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547],{"class":120,"line":8050},[118,46524,38090],{"class":128},[118,46526,30867],{"class":5221},[118,46528,174],{"class":124},[118,46530,200],{"class":177},[118,46532,506],{"class":128},[118,46534,30922],{"class":5221},[118,46536,174],{"class":124},[118,46538,206],{"class":177},[118,46540,506],{"class":128},[118,46542,30876],{"class":5221},[118,46544,174],{"class":124},[118,46546,346],{"class":177},[118,46548,135],{"class":128},[118,46550,46551],{"class":120,"line":8062},[118,46552,38119],{"class":128},[118,46554,46555,46557,46559,46561],{"class":120,"line":9721},[118,46556,30838],{"class":177},[118,46558,42213],{"class":128},[118,46560,174],{"class":124},[118,46562,38002],{"class":128},[118,46564,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593],{"class":120,"line":9746},[118,46566,42222],{"class":128},[118,46568,42152],{"class":177},[118,46570,506],{"class":128},[118,46572,332],{"class":177},[118,46574,42231],{"class":128},[118,46576,338],{"class":177},[118,46578,506],{"class":128},[118,46580,32063],{"class":177},[118,46582,42240],{"class":128},[118,46584,729],{"class":177},[118,46586,506],{"class":128},[118,46588,326],{"class":177},[118,46590,42249],{"class":128},[118,46592,326],{"class":177},[118,46594,38040],{"class":128},[118,46596,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625],{"class":120,"line":9769},[118,46598,42222],{"class":128},[118,46600,34863],{"class":177},[118,46602,506],{"class":128},[118,46604,32063],{"class":177},[118,46606,42231],{"class":128},[118,46608,32063],{"class":177},[118,46610,506],{"class":128},[118,46612,42152],{"class":177},[118,46614,42240],{"class":128},[118,46616,326],{"class":177},[118,46618,506],{"class":128},[118,46620,338],{"class":177},[118,46622,42249],{"class":128},[118,46624,332],{"class":177},[118,46626,38040],{"class":128},[118,46628,46629,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653],{"class":120,"line":9793},[118,46630,38090],{"class":128},[118,46632,30867],{"class":5221},[118,46634,174],{"class":124},[118,46636,200],{"class":177},[118,46638,506],{"class":128},[118,46640,30922],{"class":5221},[118,46642,174],{"class":124},[118,46644,206],{"class":177},[118,46646,506],{"class":128},[118,46648,30876],{"class":5221},[118,46650,174],{"class":124},[118,46652,346],{"class":177},[118,46654,135],{"class":128},[118,46656,46657],{"class":120,"line":9798},[118,46658,38119],{"class":128},[118,46660,46661,46663,46665,46667],{"class":120,"line":9803},[118,46662,30838],{"class":177},[118,46664,42324],{"class":128},[118,46666,174],{"class":124},[118,46668,38002],{"class":128},[118,46670,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699],{"class":120,"line":9808},[118,46672,42222],{"class":128},[118,46674,42335],{"class":177},[118,46676,506],{"class":128},[118,46678,42152],{"class":177},[118,46680,42231],{"class":128},[118,46682,338],{"class":177},[118,46684,506],{"class":128},[118,46686,42348],{"class":177},[118,46688,42240],{"class":128},[118,46690,729],{"class":177},[118,46692,506],{"class":128},[118,46694,735],{"class":177},[118,46696,42249],{"class":128},[118,46698,332],{"class":177},[118,46700,38040],{"class":128},[118,46702,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731],{"class":120,"line":9817},[118,46704,42222],{"class":128},[118,46706,38450],{"class":177},[118,46708,506],{"class":128},[118,46710,21053],{"class":177},[118,46712,42231],{"class":128},[118,46714,746],{"class":177},[118,46716,506],{"class":128},[118,46718,31494],{"class":177},[118,46720,42240],{"class":128},[118,46722,928],{"class":177},[118,46724,506],{"class":128},[118,46726,332],{"class":177},[118,46728,42249],{"class":128},[118,46730,332],{"class":177},[118,46732,38040],{"class":128},[118,46734,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763],{"class":120,"line":9822},[118,46736,42222],{"class":128},[118,46738,38450],{"class":177},[118,46740,506],{"class":128},[118,46742,32063],{"class":177},[118,46744,42231],{"class":128},[118,46746,32063],{"class":177},[118,46748,506],{"class":128},[118,46750,34863],{"class":177},[118,46752,42240],{"class":128},[118,46754,928],{"class":177},[118,46756,506],{"class":128},[118,46758,332],{"class":177},[118,46760,42249],{"class":128},[118,46762,332],{"class":177},[118,46764,38040],{"class":128},[118,46766,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795],{"class":120,"line":9828},[118,46768,42222],{"class":128},[118,46770,38450],{"class":177},[118,46772,506],{"class":128},[118,46774,746],{"class":177},[118,46776,42231],{"class":128},[118,46778,32063],{"class":177},[118,46780,506],{"class":128},[118,46782,42445],{"class":177},[118,46784,42240],{"class":128},[118,46786,326],{"class":177},[118,46788,506],{"class":128},[118,46790,332],{"class":177},[118,46792,42249],{"class":128},[118,46794,332],{"class":177},[118,46796,38040],{"class":128},[118,46798,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827],{"class":120,"line":9849},[118,46800,42222],{"class":128},[118,46802,42466],{"class":177},[118,46804,506],{"class":128},[118,46806,34863],{"class":177},[118,46808,42231],{"class":128},[118,46810,21053],{"class":177},[118,46812,506],{"class":128},[118,46814,42479],{"class":177},[118,46816,42240],{"class":128},[118,46818,326],{"class":177},[118,46820,506],{"class":128},[118,46822,32063],{"class":177},[118,46824,42249],{"class":128},[118,46826,32063],{"class":177},[118,46828,38040],{"class":128},[118,46830,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855],{"class":120,"line":9855},[118,46832,38090],{"class":128},[118,46834,30867],{"class":5221},[118,46836,174],{"class":124},[118,46838,200],{"class":177},[118,46840,506],{"class":128},[118,46842,30922],{"class":5221},[118,46844,174],{"class":124},[118,46846,206],{"class":177},[118,46848,506],{"class":128},[118,46850,30876],{"class":5221},[118,46852,174],{"class":124},[118,46854,346],{"class":177},[118,46856,135],{"class":128},[118,46858,46859],{"class":120,"line":9869},[118,46860,38119],{"class":128},[118,46862,46863,46865,46867,46869],{"class":120,"line":9875},[118,46864,30838],{"class":177},[118,46866,42532],{"class":128},[118,46868,174],{"class":124},[118,46870,38002],{"class":128},[118,46872,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901],{"class":120,"line":9902},[118,46874,42222],{"class":128},[118,46876,42543],{"class":177},[118,46878,506],{"class":128},[118,46880,34863],{"class":177},[118,46882,42231],{"class":128},[118,46884,21053],{"class":177},[118,46886,506],{"class":128},[118,46888,42479],{"class":177},[118,46890,42240],{"class":128},[118,46892,326],{"class":177},[118,46894,506],{"class":128},[118,46896,32063],{"class":177},[118,46898,42249],{"class":128},[118,46900,32063],{"class":177},[118,46902,38040],{"class":128},[118,46904,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933],{"class":120,"line":9911},[118,46906,42222],{"class":128},[118,46908,42543],{"class":177},[118,46910,506],{"class":128},[118,46912,34933],{"class":177},[118,46914,42231],{"class":128},[118,46916,42152],{"class":177},[118,46918,506],{"class":128},[118,46920,34933],{"class":177},[118,46922,42240],{"class":128},[118,46924,735],{"class":177},[118,46926,506],{"class":128},[118,46928,32063],{"class":177},[118,46930,42249],{"class":128},[118,46932,32063],{"class":177},[118,46934,38040],{"class":128},[118,46936,46937,46939,46941,46943,46945],{"class":120,"line":9917},[118,46938,42606],{"class":128},[118,46940,346],{"class":177},[118,46942,506],{"class":128},[118,46944,346],{"class":177},[118,46946,42615],{"class":128},[118,46948,46949],{"class":120,"line":9925},[118,46950,38783],{"class":128},[118,46952,46953,46955,46957,46959,46961],{"class":120,"line":9930},[118,46954,38788],{"class":128},[118,46956,42626],{"class":177},[118,46958,506],{"class":128},[118,46960,206],{"class":177},[118,46962,135],{"class":128},[118,46964,46965],{"class":120,"line":16609},[118,46966,38119],{"class":128},[118,46968,46969],{"class":120,"line":16615},[118,46970,42641],{"class":187},[118,46972,46973,46975,46977,46979,46981],{"class":120,"line":16638},[118,46974,3407],{"class":124},[118,46976,38861],{"class":128},[118,46978,26036],{"class":124},[118,46980,38866],{"class":177},[118,46982,38869],{"class":128},[118,46984,46985,46987,46989],{"class":120,"line":16644},[118,46986,4646],{"class":124},[118,46988,38881],{"class":177},[118,46990,38884],{"class":128},[118,46992,46993,46995,46997,46999,47001,47003,47005,47007,47009],{"class":120,"line":16667},[118,46994,38894],{"class":128},[118,46996,42668],{"class":5221},[118,46998,174],{"class":124},[118,47000,42673],{"class":233},[118,47002,506],{"class":128},[118,47004,38897],{"class":5221},[118,47006,174],{"class":124},[118,47008,38902],{"class":233},[118,47010,135],{"class":128},[118,47012,47013],{"class":120,"line":16681},[118,47014,42688],{"class":187},[118,47016,47017],{"class":120,"line":16701},[118,47018,42693],{"class":187},[118,47020,47021],{"class":120,"line":16707},[118,47022,42698],{"class":187},[118,47024,47025],{"class":120,"line":16718},[118,47026,42703],{"class":187},[118,47028,47029],{"class":120,"line":16741},[118,47030,42708],{"class":187},[118,47032,47033],{"class":120,"line":16763},[118,47034,42713],{"class":187},[118,47036,47037,47039,47041,47043,47045,47047],{"class":120,"line":16768},[118,47038,38914],{"class":124},[118,47040,38917],{"class":128},[118,47042,38920],{"class":124},[118,47044,38923],{"class":124},[118,47046,38926],{"class":177},[118,47048,3743],{"class":128},[118,47050,47051,47053,47055],{"class":120,"line":16774},[118,47052,38938],{"class":128},[118,47054,320],{"class":177},[118,47056,135],{"class":128},[118,47058,47059,47061,47063],{"class":120,"line":16788},[118,47060,42740],{"class":124},[118,47062,38881],{"class":177},[118,47064,38957],{"class":128},[118,47066,47067,47069,47071,47073,47075],{"class":120,"line":16801},[118,47068,42749],{"class":128},[118,47070,320],{"class":177},[118,47072,506],{"class":128},[118,47074,38979],{"class":177},[118,47076,135],{"class":128},[118,47078,47079,47081,47083,47085,47087,47089],{"class":120,"line":16806},[118,47080,42762],{"class":124},[118,47082,38917],{"class":128},[118,47084,38920],{"class":124},[118,47086,38923],{"class":124},[118,47088,38926],{"class":177},[118,47090,3743],{"class":128},[118,47092,47093,47095,47097],{"class":120,"line":16820},[118,47094,42777],{"class":128},[118,47096,320],{"class":177},[118,47098,135],{"class":128},[118,47100,47101],{"class":120,"line":16825},[118,47102,35158],{"class":187},[118,47104,47105,47107,47109],{"class":120,"line":16831},[118,47106,30794],{"class":124},[118,47108,31086],{"class":1967},[118,47110,31089],{"class":128},[118,47112,47113,47115,47117,47119],{"class":120,"line":16836},[118,47114,31094],{"class":128},[118,47116,174],{"class":124},[118,47118,30816],{"class":177},[118,47120,42804],{"class":128},[118,47122,47123,47125,47127,47129],{"class":120,"line":16850},[118,47124,31094],{"class":128},[118,47126,174],{"class":124},[118,47128,30816],{"class":177},[118,47130,42815],{"class":128},[118,47132,47133,47135,47137,47139],{"class":120,"line":16855},[118,47134,31094],{"class":128},[118,47136,174],{"class":124},[118,47138,30816],{"class":177},[118,47140,42826],{"class":128},[118,47142,47143,47145,47147,47149],{"class":120,"line":16860},[118,47144,31094],{"class":128},[118,47146,174],{"class":124},[118,47148,30816],{"class":177},[118,47150,42837],{"class":128},[118,47152,47153,47155,47157,47159],{"class":120,"line":16874},[118,47154,31094],{"class":128},[118,47156,174],{"class":124},[118,47158,30816],{"class":177},[118,47160,42848],{"class":128},[118,47162,47163,47165],{"class":120,"line":16886},[118,47164,14757],{"class":124},[118,47166,31202],{"class":128},[118,47168,47169],{"class":120,"line":16891},[118,47170,2404],{"emptyLinePlaceholder":45},[118,47172,47173],{"class":120,"line":16904},[118,47174,42863],{"class":187},[118,47176,47177,47179,47181,47183,47185],{"class":120,"line":16909},[118,47178,1535],{"class":124},[118,47180,31213],{"class":177},[118,47182,2953],{"class":124},[118,47184,31218],{"class":233},[118,47186,3743],{"class":128},[118,47188,47189,47191,47193,47195,47197,47199,47201,47203,47205],{"class":120,"line":16914},[118,47190,31230],{"class":128},[118,47192,174],{"class":124},[118,47194,30444],{"class":128},[118,47196,31237],{"class":233},[118,47198,1708],{"class":124},[118,47200,31242],{"class":128},[118,47202,1705],{"class":124},[118,47204,30469],{"class":233},[118,47206,135],{"class":128},[118,47208,47209,47211,47213],{"class":120,"line":16919},[118,47210,31282],{"class":128},[118,47212,174],{"class":124},[118,47214,42904],{"class":128},[118,47216,47217,47219,47221,47223,47225,47227,47229,47231],{"class":120,"line":16932},[118,47218,31292],{"class":177},[118,47220,31295],{"class":128},[118,47222,346],{"class":177},[118,47224,506],{"class":128},[118,47226,31494],{"class":177},[118,47228,506],{"class":128},[118,47230,31494],{"class":177},[118,47232,31308],{"class":128},[22003,47234,47236],{"id":47235},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[15,47238,47239],{},"计算图片的均值与方差，用于训练中归一化处理操作",[109,47241,47243],{"className":30371,"code":47242,"language":30373,"meta":39,"style":39},"# 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",[115,47244,47245,47250,47263,47268,47274,47279,47289,47293,47298,47308,47312,47317,47327,47344,47348,47353,47365,47377,47408,47417,47427,47437,47441,47446,47461,47465,47470,47475,47480,47490,47495,47520,47524,47529,47544,47548,47561,47565,47570,47575,47580,47585,47590,47600,47610,47633,47641,47649,47657,47661,47673,47677,47682,47686,47690,47697,47717,47741,47748,47762,47767,47772,47776,47790,47794,47806],{"__ignoreMap":39},[118,47246,47247],{"class":120,"line":121},[118,47248,47249],{"class":187},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[118,47251,47252,47254,47257,47260],{"class":120,"line":40},[118,47253,30730],{"class":124},[118,47255,47256],{"class":177}," PIL",[118,47258,47259],{"class":124}," import",[118,47261,47262],{"class":128}," Image\n",[118,47264,47265],{"class":120,"line":1183},[118,47266,47267],{"class":187},"# os 用来处理文件夹和文件路径\n",[118,47269,47270,47272],{"class":120,"line":1198},[118,47271,30385],{"class":124},[118,47273,45298],{"class":128},[118,47275,47276],{"class":120,"line":1204},[118,47277,47278],{"class":187},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[118,47280,47281,47283,47285,47287],{"class":120,"line":1218},[118,47282,30385],{"class":124},[118,47284,31373],{"class":128},[118,47286,31376],{"class":124},[118,47288,31379],{"class":128},[118,47290,47291],{"class":120,"line":1224},[118,47292,2404],{"emptyLinePlaceholder":45},[118,47294,47295],{"class":120,"line":1315},[118,47296,47297],{"class":187},"# 文件夹路径，包含所有图片文件\n",[118,47299,47300,47303,47305],{"class":120,"line":1321},[118,47301,47302],{"class":128},"folder_path ",[118,47304,174],{"class":124},[118,47306,47307],{"class":233}," 'data_cat_dog'\n",[118,47309,47310],{"class":120,"line":1333},[118,47311,2404],{"emptyLinePlaceholder":45},[118,47313,47314],{"class":120,"line":1616},[118,47315,47316],{"class":187},"# 初始化累积变量\n",[118,47318,47319,47322,47324],{"class":120,"line":1621},[118,47320,47321],{"class":128},"total_pixels ",[118,47323,174],{"class":124},[118,47325,47326],{"class":177}," 0\n",[118,47328,47329,47332,47334,47337,47339,47341],{"class":120,"line":1627},[118,47330,47331],{"class":128},"sum_normalized_pixel_values ",[118,47333,174],{"class":124},[118,47335,47336],{"class":128}," np.zeros(",[118,47338,200],{"class":177},[118,47340,45801],{"class":128},[118,47342,47343],{"class":187},"# 如果是RGB图像，需要三个通道的均值和方差\n",[118,47345,47346],{"class":120,"line":1632},[118,47347,2404],{"emptyLinePlaceholder":45},[118,47349,47350],{"class":120,"line":1646},[118,47351,47352],{"class":187},"# 遍历文件夹中的图片文件\n",[118,47354,47355,47357,47360,47362],{"class":120,"line":1651},[118,47356,3029],{"class":124},[118,47358,47359],{"class":128}," root, dirs, files ",[118,47361,26036],{"class":124},[118,47363,47364],{"class":128}," os.walk(folder_path):\n",[118,47366,47367,47369,47372,47374],{"class":120,"line":1657},[118,47368,3205],{"class":124},[118,47370,47371],{"class":128}," filename ",[118,47373,26036],{"class":124},[118,47375,47376],{"class":128}," files:\n",[118,47378,47379,47381,47384,47387,47389,47392,47394,47397,47399,47402,47405],{"class":120,"line":1678},[118,47380,2501],{"class":124},[118,47382,47383],{"class":128}," filename.endswith((",[118,47385,47386],{"class":233},"'.jpg'",[118,47388,12440],{"class":128},[118,47390,47391],{"class":233},"'.jpeg'",[118,47393,12440],{"class":128},[118,47395,47396],{"class":233},"'.png'",[118,47398,12440],{"class":128},[118,47400,47401],{"class":233},"'.bmp'",[118,47403,47404],{"class":128},")):  ",[118,47406,47407],{"class":187},"# 可根据实际情况添加其他格式\n",[118,47409,47410,47412,47414],{"class":120,"line":1683},[118,47411,45666],{"class":128},[118,47413,174],{"class":124},[118,47415,47416],{"class":128}," os.path.join(root, filename)\n",[118,47418,47419,47422,47424],{"class":120,"line":1697},[118,47420,47421],{"class":128},"            image ",[118,47423,174],{"class":124},[118,47425,47426],{"class":128}," Image.open(image_path)\n",[118,47428,47429,47432,47434],{"class":120,"line":1702},[118,47430,47431],{"class":128},"            image_array ",[118,47433,174],{"class":124},[118,47435,47436],{"class":128}," np.array(image)\n",[118,47438,47439],{"class":120,"line":1731},[118,47440,2404],{"emptyLinePlaceholder":45},[118,47442,47443],{"class":120,"line":1736},[118,47444,47445],{"class":187},"            # 归一化像素值到0-1之间\n",[118,47447,47448,47451,47453,47456,47458],{"class":120,"line":1753},[118,47449,47450],{"class":128},"            normalized_image_array ",[118,47452,174],{"class":124},[118,47454,47455],{"class":128}," image_array ",[118,47457,712],{"class":124},[118,47459,47460],{"class":177}," 255.0\n",[118,47462,47463],{"class":120,"line":1758},[118,47464,2404],{"emptyLinePlaceholder":45},[118,47466,47467],{"class":120,"line":1763},[118,47468,47469],{"class":187},"            # print(image_path)\n",[118,47471,47472],{"class":120,"line":1768},[118,47473,47474],{"class":187},"            # print(normalized_image_array.shape)\n",[118,47476,47477],{"class":120,"line":1782},[118,47478,47479],{"class":187},"            # 累积归一化后的像素值和像素数量\n",[118,47481,47482,47485,47487],{"class":120,"line":1787},[118,47483,47484],{"class":128},"            total_pixels ",[118,47486,9482],{"class":124},[118,47488,47489],{"class":128}," normalized_image_array.size\n",[118,47491,47492],{"class":120,"line":2581},[118,47493,47494],{"class":187},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[118,47496,47497,47500,47502,47505,47508,47510,47512,47514,47516,47518],{"class":120,"line":2595},[118,47498,47499],{"class":128},"            sum_normalized_pixel_values ",[118,47501,9482],{"class":124},[118,47503,47504],{"class":128}," np.sum(normalized_image_array, ",[118,47506,47507],{"class":5221},"axis",[118,47509,174],{"class":124},[118,47511,129],{"class":128},[118,47513,320],{"class":177},[118,47515,12440],{"class":128},[118,47517,346],{"class":177},[118,47519,30490],{"class":128},[118,47521,47522],{"class":120,"line":2603},[118,47523,2404],{"emptyLinePlaceholder":45},[118,47525,47526],{"class":120,"line":2608},[118,47527,47528],{"class":187},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[118,47530,47531,47534,47536,47539,47541],{"class":120,"line":2614},[118,47532,47533],{"class":128},"mean ",[118,47535,174],{"class":124},[118,47537,47538],{"class":128}," sum_normalized_pixel_values ",[118,47540,712],{"class":124},[118,47542,47543],{"class":128}," total_pixels\n",[118,47545,47546],{"class":120,"line":2620},[118,47547,2404],{"emptyLinePlaceholder":45},[118,47549,47550,47553,47555,47557,47559],{"class":120,"line":2625},[118,47551,47552],{"class":128},"sum_squared_diff ",[118,47554,174],{"class":124},[118,47556,47336],{"class":128},[118,47558,200],{"class":177},[118,47560,135],{"class":128},[118,47562,47563],{"class":120,"line":7953},[118,47564,2404],{"emptyLinePlaceholder":45},[118,47566,47567],{"class":120,"line":7977},[118,47568,47569],{"class":187},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[118,47571,47572],{"class":120,"line":7982},[118,47573,47574],{"class":187},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[118,47576,47577],{"class":120,"line":7988},[118,47578,47579],{"class":187},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[118,47581,47582],{"class":120,"line":8015},[118,47583,47584],{"class":187},"# Image.open(image_path)：打开图片\n",[118,47586,47587],{"class":120,"line":8020},[118,47588,47589],{"class":187},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[118,47591,47592,47594,47596,47598],{"class":120,"line":8026},[118,47593,3029],{"class":124},[118,47595,47359],{"class":128},[118,47597,26036],{"class":124},[118,47599,47364],{"class":128},[118,47601,47602,47604,47606,47608],{"class":120,"line":8038},[118,47603,3205],{"class":124},[118,47605,47371],{"class":128},[118,47607,26036],{"class":124},[118,47609,47376],{"class":128},[118,47611,47612,47614,47616,47618,47620,47622,47624,47626,47628,47630],{"class":120,"line":8050},[118,47613,2501],{"class":124},[118,47615,47383],{"class":128},[118,47617,47386],{"class":233},[118,47619,12440],{"class":128},[118,47621,47391],{"class":233},[118,47623,12440],{"class":128},[118,47625,47396],{"class":233},[118,47627,12440],{"class":128},[118,47629,47401],{"class":233},[118,47631,47632],{"class":128},")):\n",[118,47634,47635,47637,47639],{"class":120,"line":8062},[118,47636,45666],{"class":128},[118,47638,174],{"class":124},[118,47640,47416],{"class":128},[118,47642,47643,47645,47647],{"class":120,"line":9721},[118,47644,47421],{"class":128},[118,47646,174],{"class":124},[118,47648,47426],{"class":128},[118,47650,47651,47653,47655],{"class":120,"line":9746},[118,47652,47431],{"class":128},[118,47654,174],{"class":124},[118,47656,47436],{"class":128},[118,47658,47659],{"class":120,"line":9769},[118,47660,47445],{"class":187},[118,47662,47663,47665,47667,47669,47671],{"class":120,"line":9793},[118,47664,47450],{"class":128},[118,47666,174],{"class":124},[118,47668,47455],{"class":128},[118,47670,712],{"class":124},[118,47672,47460],{"class":177},[118,47674,47675],{"class":120,"line":9798},[118,47676,47474],{"class":187},[118,47678,47679],{"class":120,"line":9803},[118,47680,47681],{"class":187},"            # print(mean.shape)\n",[118,47683,47684],{"class":120,"line":9808},[118,47685,47469],{"class":187},[118,47687,47688],{"class":120,"line":9817},[118,47689,2404],{"emptyLinePlaceholder":45},[118,47691,47692,47695],{"class":120,"line":9822},[118,47693,47694],{"class":124},"            try",[118,47696,3743],{"class":128},[118,47698,47699,47702,47704,47707,47709,47712,47714],{"class":120,"line":9828},[118,47700,47701],{"class":128},"                diff ",[118,47703,174],{"class":124},[118,47705,47706],{"class":128}," (normalized_image_array ",[118,47708,660],{"class":124},[118,47710,47711],{"class":128}," mean) ",[118,47713,10666],{"class":124},[118,47715,47716],{"class":177}," 2\n",[118,47718,47719,47722,47724,47727,47729,47731,47733,47735,47737,47739],{"class":120,"line":9849},[118,47720,47721],{"class":128},"                sum_squared_diff ",[118,47723,9482],{"class":124},[118,47725,47726],{"class":128}," np.sum(diff, ",[118,47728,47507],{"class":5221},[118,47730,174],{"class":124},[118,47732,129],{"class":128},[118,47734,320],{"class":177},[118,47736,12440],{"class":128},[118,47738,346],{"class":177},[118,47740,30490],{"class":128},[118,47742,47743,47746],{"class":120,"line":9855},[118,47744,47745],{"class":124},"            except",[118,47747,3743],{"class":128},[118,47749,47750,47753,47755,47757,47760],{"class":120,"line":9869},[118,47751,47752],{"class":177},"                print",[118,47754,129],{"class":128},[118,47756,181],{"class":124},[118,47758,47759],{"class":233},"\"捕获到自定义异常\"",[118,47761,135],{"class":128},[118,47763,47764],{"class":120,"line":9875},[118,47765,47766],{"class":187},"            # diff = (normalized_image_array - mean) ** 2\n",[118,47768,47769],{"class":120,"line":9902},[118,47770,47771],{"class":187},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[118,47773,47774],{"class":120,"line":9911},[118,47775,2404],{"emptyLinePlaceholder":45},[118,47777,47778,47781,47783,47786,47788],{"class":120,"line":9917},[118,47779,47780],{"class":128},"variance ",[118,47782,174],{"class":124},[118,47784,47785],{"class":128}," sum_squared_diff ",[118,47787,712],{"class":124},[118,47789,47543],{"class":128},[118,47791,47792],{"class":120,"line":9925},[118,47793,2404],{"emptyLinePlaceholder":45},[118,47795,47796,47798,47800,47803],{"class":120,"line":9930},[118,47797,30408],{"class":177},[118,47799,129],{"class":128},[118,47801,47802],{"class":233},"\"Mean:\"",[118,47804,47805],{"class":128},", mean)\n",[118,47807,47808,47810,47812,47815],{"class":120,"line":16609},[118,47809,30408],{"class":177},[118,47811,129],{"class":128},[118,47813,47814],{"class":233},"\"Variance:\"",[118,47816,47817],{"class":128},", variance)\n",[109,47819,47821],{"className":30371,"code":47820,"language":30373,"meta":39,"style":39},"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",[115,47822,47823,47829,47835,47845,47851,47861,47875,47885,47895,47905,47909,47919,47929,47933,47937,47945,47950,47955,47974,47978,47983,47988,47993,47998,48039,48044,48054,48059,48072,48077,48082,48087,48092,48097,48101,48106,48111,48133,48137,48169,48183,48193,48203,48207,48217,48231,48241,48251,48261,48267,48271,48275,48279,48283,48287,48295,48315,48319,48323,48327,48331,48347,48351,48355,48363,48367,48371,48379,48383,48387,48391,48399,48403,48407,48411,48419,48423,48431,48435,48443,48447,48455,48459,48467,48471,48475,48483,48487,48491,48503,48527,48541,48545,48549,48553,48561,48565,48573,48577,48585,48589,48597,48601,48609,48613,48621,48625,48637,48641,48649,48653,48661,48665,48669,48673,48677,48685,48689,48705,48709,48717,48721,48725,48729,48733,48737,48741,48745,48761,48765,48777,48781,48793,48797,48809,48813,48821,48825,48833,48837,48841,48845,48851,48855,48863,48867,48883,48887,48895,48899,48915,48927,48931,48943,48947,48951,48959,48963,48967,48975,48979,48987,48991,48999,49003,49007,49049,49091,49095,49099,49115,49119,49135,49139,49143,49151,49155,49159,49171,49209,49213,49217,49225,49229,49243,49253,49259,49265,49271,49277,49281,49285,49291,49295,49299,49307,49311,49329,49333,49337,49341,49357,49361,49365,49369,49373,49377,49397,49417,49421,49425,49429,49437,49445,49449,49465,49485,49505,49509,49514,49523,49532,49537,49542,49547,49560,49565,49574,49583,49600],{"__ignoreMap":39},[118,47824,47825,47827],{"class":120,"line":121},[118,47826,30385],{"class":124},[118,47828,31815],{"class":128},[118,47830,47831,47833],{"class":120,"line":40},[118,47832,30385],{"class":124},[118,47834,31822],{"class":128},[118,47836,47837,47839,47841,47843],{"class":120,"line":1183},[118,47838,30385],{"class":124},[118,47840,31833],{"class":128},[118,47842,31376],{"class":124},[118,47844,31838],{"class":128},[118,47846,47847,47849],{"class":120,"line":1198},[118,47848,30385],{"class":124},[118,47850,30388],{"class":128},[118,47852,47853,47855,47857,47859],{"class":120,"line":1204},[118,47854,30730],{"class":124},[118,47856,31408],{"class":128},[118,47858,30385],{"class":124},[118,47860,31855],{"class":128},[118,47862,47863,47865,47867,47869,47872],{"class":120,"line":1218},[118,47864,30730],{"class":124},[118,47866,31361],{"class":128},[118,47868,30385],{"class":124},[118,47870,47871],{"class":128}," ImageFolder ",[118,47873,47874],{"class":187},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[118,47876,47877,47879,47881,47883],{"class":120,"line":1224},[118,47878,30730],{"class":124},[118,47880,31391],{"class":128},[118,47882,30385],{"class":124},[118,47884,31396],{"class":128},[118,47886,47887,47889,47891,47893],{"class":120,"line":1315},[118,47888,30385],{"class":124},[118,47890,31408],{"class":128},[118,47892,31376],{"class":124},[118,47894,31413],{"class":128},[118,47896,47897,47899,47901,47903],{"class":120,"line":1321},[118,47898,30385],{"class":124},[118,47900,31425],{"class":128},[118,47902,31376],{"class":124},[118,47904,31430],{"class":128},[118,47906,47907],{"class":120,"line":1333},[118,47908,31900],{"class":187},[118,47910,47911,47913,47915,47917],{"class":120,"line":1616},[118,47912,30730],{"class":124},[118,47914,31907],{"class":128},[118,47916,30385],{"class":124},[118,47918,43024],{"class":128},[118,47920,47921,47923,47925,47927],{"class":120,"line":1621},[118,47922,30730],{"class":124},[118,47924,30733],{"class":128},[118,47926,30385],{"class":124},[118,47928,30738],{"class":128},[118,47930,47931],{"class":120,"line":1627},[118,47932,2404],{"emptyLinePlaceholder":45},[118,47934,47935],{"class":120,"line":1632},[118,47936,31935],{"class":187},[118,47938,47939,47941,47943],{"class":120,"line":1646},[118,47940,31940],{"class":124},[118,47942,31943],{"class":1967},[118,47944,31946],{"class":128},[118,47946,47947],{"class":120,"line":1651},[118,47948,47949],{"class":187},"    # 导入自己的数据集，并进行数据处理\n",[118,47951,47952],{"class":120,"line":1657},[118,47953,47954],{"class":187},"    # 定义数据集的路径\n",[118,47956,47957,47960,47962,47964,47966,47968,47972],{"class":120,"line":1678},[118,47958,47959],{"class":177},"    ROOT_PATH",[118,47961,174],{"class":124},[118,47963,798],{"class":124},[118,47965,379],{"class":233},[118,47967,686],{"class":177},[118,47969,47971],{"class":47970},"sA_wV","\u002Fdata\u002Ftrain",[118,47973,25138],{"class":233},[118,47975,47976],{"class":120,"line":1683},[118,47977,2404],{"emptyLinePlaceholder":45},[118,47979,47980],{"class":120,"line":1697},[118,47981,47982],{"class":187},"    # 定义归一化方法\n",[118,47984,47985],{"class":120,"line":1702},[118,47986,47987],{"class":187},"    # 这里需要先计算一下数据集的均值和方差\n",[118,47989,47990],{"class":120,"line":1731},[118,47991,47992],{"class":187},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[118,47994,47995],{"class":120,"line":1736},[118,47996,47997],{"class":187},"    # 第一个参数是均值，第二个参数是方差\n",[118,47999,48000,48003,48005,48008,48011,48013,48016,48018,48021,48024,48027,48029,48032,48034,48037],{"class":120,"line":1753},[118,48001,48002],{"class":128},"    normalize",[118,48004,174],{"class":124},[118,48006,48007],{"class":128},"transforms.Normalize([",[118,48009,48010],{"class":177},"0.162",[118,48012,506],{"class":128},[118,48014,48015],{"class":177},"0.151",[118,48017,506],{"class":128},[118,48019,48020],{"class":177},"0.138",[118,48022,48023],{"class":128},"],[",[118,48025,48026],{"class":177},"0.058",[118,48028,506],{"class":128},[118,48030,48031],{"class":177},"0.052",[118,48033,506],{"class":128},[118,48035,48036],{"class":177},"0.048",[118,48038,4661],{"class":128},[118,48040,48041],{"class":120,"line":1758},[118,48042,48043],{"class":187},"    # 定义数据集处理方法变量\n",[118,48045,48046,48049,48051],{"class":120,"line":1763},[118,48047,48048],{"class":128},"    train_transform",[118,48050,174],{"class":124},[118,48052,48053],{"class":128},"transforms.Compose([\n",[118,48055,48056],{"class":120,"line":1768},[118,48057,48058],{"class":187},"        # 调整图像大小为224*224\n",[118,48060,48061,48064,48066,48068,48070],{"class":120,"line":1782},[118,48062,48063],{"class":128},"        transforms.Resize((",[118,48065,31494],{"class":177},[118,48067,506],{"class":128},[118,48069,31494],{"class":177},[118,48071,42615],{"class":128},[118,48073,48074],{"class":120,"line":1787},[118,48075,48076],{"class":187},"        # 将图像转换为张量\n",[118,48078,48079],{"class":120,"line":2581},[118,48080,48081],{"class":128},"        transforms.ToTensor(),\n",[118,48083,48084],{"class":120,"line":2595},[118,48085,48086],{"class":128},"        normalize])\n",[118,48088,48089],{"class":120,"line":2603},[118,48090,48091],{"class":187},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[118,48093,48094],{"class":120,"line":2608},[118,48095,48096],{"class":187},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[118,48098,48099],{"class":120,"line":2614},[118,48100,2404],{"emptyLinePlaceholder":45},[118,48102,48103],{"class":120,"line":2620},[118,48104,48105],{"class":187},"    # 加载数据集\n",[118,48107,48108],{"class":120,"line":2625},[118,48109,48110],{"class":187},"    # 传入数据集路径与处理方法\n",[118,48112,48113,48115,48117,48120,48123,48125,48128,48130],{"class":120,"line":7953},[118,48114,31951],{"class":128},[118,48116,174],{"class":124},[118,48118,48119],{"class":128},"ImageFolder(",[118,48121,48122],{"class":177},"ROOT_PATH",[118,48124,506],{"class":128},[118,48126,48127],{"class":5221},"transform",[118,48129,174],{"class":124},[118,48131,48132],{"class":128},"train_transform)\n",[118,48134,48135],{"class":120,"line":7977},[118,48136,2404],{"emptyLinePlaceholder":45},[118,48138,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161,48163,48165,48167],{"class":120,"line":7982},[118,48140,32003],{"class":128},[118,48142,174],{"class":124},[118,48144,32008],{"class":128},[118,48146,32011],{"class":177},[118,48148,129],{"class":128},[118,48150,32016],{"class":177},[118,48152,583],{"class":124},[118,48154,7363],{"class":177},[118,48156,32023],{"class":128},[118,48158,32011],{"class":177},[118,48160,129],{"class":128},[118,48162,32030],{"class":177},[118,48164,583],{"class":124},[118,48166,7363],{"class":177},[118,48168,32037],{"class":128},[118,48170,48171,48173,48175,48177,48179,48181],{"class":120,"line":7988},[118,48172,32042],{"class":128},[118,48174,174],{"class":124},[118,48176,32047],{"class":128},[118,48178,31530],{"class":5221},[118,48180,174],{"class":124},[118,48182,31535],{"class":128},[118,48184,48185,48187,48189,48191],{"class":120,"line":8015},[118,48186,32058],{"class":5221},[118,48188,174],{"class":124},[118,48190,326],{"class":177},[118,48192,31459],{"class":128},[118,48194,48195,48197,48199,48201],{"class":120,"line":8020},[118,48196,32070],{"class":5221},[118,48198,174],{"class":124},[118,48200,31469],{"class":177},[118,48202,31459],{"class":128},[118,48204,48205],{"class":120,"line":8026},[118,48206,32081],{"class":187},[118,48208,48209,48211,48213,48215],{"class":120,"line":8038},[118,48210,32086],{"class":5221},[118,48212,174],{"class":124},[118,48214,523],{"class":177},[118,48216,135],{"class":128},[118,48218,48219,48221,48223,48225,48227,48229],{"class":120,"line":8050},[118,48220,32097],{"class":128},[118,48222,174],{"class":124},[118,48224,31527],{"class":128},[118,48226,31530],{"class":5221},[118,48228,174],{"class":124},[118,48230,32108],{"class":128},[118,48232,48233,48235,48237,48239],{"class":120,"line":8062},[118,48234,32113],{"class":5221},[118,48236,174],{"class":124},[118,48238,326],{"class":177},[118,48240,31459],{"class":128},[118,48242,48243,48245,48247,48249],{"class":120,"line":9721},[118,48244,32124],{"class":5221},[118,48246,174],{"class":124},[118,48248,31469],{"class":177},[118,48250,31459],{"class":128},[118,48252,48253,48255,48257,48259],{"class":120,"line":9746},[118,48254,32135],{"class":5221},[118,48256,174],{"class":124},[118,48258,523],{"class":177},[118,48260,135],{"class":128},[118,48262,48263,48265],{"class":120,"line":9769},[118,48264,4094],{"class":124},[118,48266,32148],{"class":128},[118,48268,48269],{"class":120,"line":9793},[118,48270,2404],{"emptyLinePlaceholder":45},[118,48272,48273],{"class":120,"line":9798},[118,48274,32157],{"class":187},[118,48276,48277],{"class":120,"line":9803},[118,48278,32162],{"class":187},[118,48280,48281],{"class":120,"line":9808},[118,48282,2404],{"emptyLinePlaceholder":45},[118,48284,48285],{"class":120,"line":9817},[118,48286,32171],{"class":187},[118,48288,48289,48291,48293],{"class":120,"line":9822},[118,48290,31940],{"class":124},[118,48292,32178],{"class":1967},[118,48294,32181],{"class":128},[118,48296,48297,48299,48301,48303,48305,48307,48309,48311,48313],{"class":120,"line":9828},[118,48298,31230],{"class":128},[118,48300,174],{"class":124},[118,48302,30444],{"class":128},[118,48304,31237],{"class":233},[118,48306,1708],{"class":124},[118,48308,31242],{"class":128},[118,48310,1705],{"class":124},[118,48312,32200],{"class":233},[118,48314,135],{"class":128},[118,48316,48317],{"class":120,"line":9849},[118,48318,2404],{"emptyLinePlaceholder":45},[118,48320,48321],{"class":120,"line":9855},[118,48322,32215],{"class":187},[118,48324,48325],{"class":120,"line":9869},[118,48326,32220],{"class":187},[118,48328,48329],{"class":120,"line":9875},[118,48330,32225],{"class":187},[118,48332,48333,48335,48337,48339,48341,48343,48345],{"class":120,"line":9902},[118,48334,32230],{"class":128},[118,48336,174],{"class":124},[118,48338,32235],{"class":128},[118,48340,32238],{"class":5221},[118,48342,174],{"class":124},[118,48344,32243],{"class":177},[118,48346,135],{"class":128},[118,48348,48349],{"class":120,"line":9911},[118,48350,2404],{"emptyLinePlaceholder":45},[118,48352,48353],{"class":120,"line":9917},[118,48354,32254],{"class":187},[118,48356,48357,48359,48361],{"class":120,"line":9925},[118,48358,32259],{"class":128},[118,48360,174],{"class":124},[118,48362,32264],{"class":128},[118,48364,48365],{"class":120,"line":9930},[118,48366,2404],{"emptyLinePlaceholder":45},[118,48368,48369],{"class":120,"line":16609},[118,48370,32273],{"class":187},[118,48372,48373,48375,48377],{"class":120,"line":16615},[118,48374,31282],{"class":128},[118,48376,174],{"class":124},[118,48378,32282],{"class":128},[118,48380,48381],{"class":120,"line":16638},[118,48382,32287],{"class":187},[118,48384,48385],{"class":120,"line":16644},[118,48386,32292],{"class":187},[118,48388,48389],{"class":120,"line":16667},[118,48390,32297],{"class":187},[118,48392,48393,48395,48397],{"class":120,"line":16681},[118,48394,32302],{"class":128},[118,48396,174],{"class":124},[118,48398,32307],{"class":128},[118,48400,48401],{"class":120,"line":16701},[118,48402,2404],{"emptyLinePlaceholder":45},[118,48404,48405],{"class":120,"line":16707},[118,48406,32320],{"class":187},[118,48408,48409],{"class":120,"line":16718},[118,48410,32325],{"class":187},[118,48412,48413,48415,48417],{"class":120,"line":16741},[118,48414,32330],{"class":128},[118,48416,174],{"class":124},[118,48418,32335],{"class":177},[118,48420,48421],{"class":120,"line":16763},[118,48422,32340],{"class":187},[118,48424,48425,48427,48429],{"class":120,"line":16768},[118,48426,32345],{"class":128},[118,48428,174],{"class":124},[118,48430,32350],{"class":128},[118,48432,48433],{"class":120,"line":16774},[118,48434,32355],{"class":187},[118,48436,48437,48439,48441],{"class":120,"line":16788},[118,48438,32360],{"class":128},[118,48440,174],{"class":124},[118,48442,32350],{"class":128},[118,48444,48445],{"class":120,"line":16801},[118,48446,32369],{"class":187},[118,48448,48449,48451,48453],{"class":120,"line":16806},[118,48450,32374],{"class":128},[118,48452,174],{"class":124},[118,48454,32350],{"class":128},[118,48456,48457],{"class":120,"line":16820},[118,48458,32383],{"class":187},[118,48460,48461,48463,48465],{"class":120,"line":16825},[118,48462,32388],{"class":128},[118,48464,174],{"class":124},[118,48466,32350],{"class":128},[118,48468,48469],{"class":120,"line":16831},[118,48470,2404],{"emptyLinePlaceholder":45},[118,48472,48473],{"class":120,"line":16836},[118,48474,32401],{"class":187},[118,48476,48477,48479,48481],{"class":120,"line":16850},[118,48478,32406],{"class":128},[118,48480,174],{"class":124},[118,48482,32411],{"class":128},[118,48484,48485],{"class":120,"line":16855},[118,48486,2404],{"emptyLinePlaceholder":45},[118,48488,48489],{"class":120,"line":16860},[118,48490,32424],{"class":187},[118,48492,48493,48495,48497,48499,48501],{"class":120,"line":16874},[118,48494,3205],{"class":124},[118,48496,32431],{"class":128},[118,48498,26036],{"class":124},[118,48500,32436],{"class":177},[118,48502,32439],{"class":128},[118,48504,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523,48525],{"class":120,"line":16886},[118,48506,32444],{"class":177},[118,48508,129],{"class":128},[118,48510,32449],{"class":233},[118,48512,32452],{"class":177},[118,48514,712],{"class":233},[118,48516,32452],{"class":177},[118,48518,379],{"class":233},[118,48520,32461],{"class":128},[118,48522,660],{"class":124},[118,48524,346],{"class":177},[118,48526,30490],{"class":128},[118,48528,48529,48531,48533,48535,48537,48539],{"class":120,"line":16891},[118,48530,32444],{"class":177},[118,48532,129],{"class":128},[118,48534,32476],{"class":233},[118,48536,583],{"class":124},[118,48538,574],{"class":177},[118,48540,135],{"class":128},[118,48542,48543],{"class":120,"line":16904},[118,48544,2404],{"emptyLinePlaceholder":45},[118,48546,48547],{"class":120,"line":16909},[118,48548,32491],{"class":187},[118,48550,48551],{"class":120,"line":16914},[118,48552,32496],{"class":187},[118,48554,48555,48557,48559],{"class":120,"line":16919},[118,48556,32501],{"class":128},[118,48558,174],{"class":124},[118,48560,32335],{"class":177},[118,48562,48563],{"class":120,"line":16932},[118,48564,32510],{"class":187},[118,48566,48567,48569,48571],{"class":120,"line":16937},[118,48568,32515],{"class":128},[118,48570,174],{"class":124},[118,48572,3089],{"class":177},[118,48574,48575],{"class":120,"line":32626},[118,48576,32524],{"class":187},[118,48578,48579,48581,48583],{"class":120,"line":32632},[118,48580,32529],{"class":128},[118,48582,174],{"class":124},[118,48584,32335],{"class":177},[118,48586,48587],{"class":120,"line":32638},[118,48588,32538],{"class":187},[118,48590,48591,48593,48595],{"class":120,"line":32644},[118,48592,32543],{"class":128},[118,48594,174],{"class":124},[118,48596,3089],{"class":177},[118,48598,48599],{"class":120,"line":32650},[118,48600,32552],{"class":187},[118,48602,48603,48605,48607],{"class":120,"line":32661},[118,48604,32557],{"class":128},[118,48606,174],{"class":124},[118,48608,3089],{"class":177},[118,48610,48611],{"class":120,"line":32667},[118,48612,32566],{"class":187},[118,48614,48615,48617,48619],{"class":120,"line":32687},[118,48616,32571],{"class":128},[118,48618,174],{"class":124},[118,48620,3089],{"class":177},[118,48622,48623],{"class":120,"line":32693},[118,48624,32580],{"class":187},[118,48626,48627,48629,48631,48633,48635],{"class":120,"line":32704},[118,48628,3407],{"class":124},[118,48630,31594],{"class":128},[118,48632,26036],{"class":124},[118,48634,31599],{"class":177},[118,48636,32593],{"class":128},[118,48638,48639],{"class":120,"line":32710},[118,48640,32598],{"class":187},[118,48642,48643,48645,48647],{"class":120,"line":32716},[118,48644,32603],{"class":128},[118,48646,174],{"class":124},[118,48648,32608],{"class":128},[118,48650,48651],{"class":120,"line":32722},[118,48652,32613],{"class":187},[118,48654,48655,48657,48659],{"class":120,"line":32728},[118,48656,32618],{"class":128},[118,48658,174],{"class":124},[118,48660,32623],{"class":128},[118,48662,48663],{"class":120,"line":32734},[118,48664,32629],{"class":187},[118,48666,48667],{"class":120,"line":32740},[118,48668,32635],{"class":128},[118,48670,48671],{"class":120,"line":32746},[118,48672,32641],{"class":187},[118,48674,48675],{"class":120,"line":32766},[118,48676,32647],{"class":187},[118,48678,48679,48681,48683],{"class":120,"line":32772},[118,48680,32653],{"class":128},[118,48682,174],{"class":124},[118,48684,32658],{"class":128},[118,48686,48687],{"class":120,"line":32788},[118,48688,32664],{"class":187},[118,48690,48691,48693,48695,48697,48699,48701,48703],{"class":120,"line":32794},[118,48692,32670],{"class":128},[118,48694,174],{"class":124},[118,48696,32675],{"class":128},[118,48698,32678],{"class":5221},[118,48700,174],{"class":124},[118,48702,346],{"class":177},[118,48704,135],{"class":128},[118,48706,48707],{"class":120,"line":32808},[118,48708,32690],{"class":187},[118,48710,48711,48713,48715],{"class":120,"line":32814},[118,48712,32696],{"class":128},[118,48714,174],{"class":124},[118,48716,32701],{"class":128},[118,48718,48719],{"class":120,"line":32829},[118,48720,32707],{"class":187},[118,48722,48723],{"class":120,"line":32835},[118,48724,32713],{"class":128},[118,48726,48727],{"class":120,"line":32844},[118,48728,32719],{"class":187},[118,48730,48731],{"class":120,"line":32850},[118,48732,32725],{"class":128},[118,48734,48735],{"class":120,"line":32859},[118,48736,32731],{"class":187},[118,48738,48739],{"class":120,"line":32865},[118,48740,32737],{"class":128},[118,48742,48743],{"class":120,"line":32871},[118,48744,32743],{"class":187},[118,48746,48747,48749,48751,48753,48755,48757,48759],{"class":120,"line":32880},[118,48748,32749],{"class":128},[118,48750,9482],{"class":124},[118,48752,32754],{"class":128},[118,48754,583],{"class":124},[118,48756,32759],{"class":128},[118,48758,320],{"class":177},[118,48760,135],{"class":128},[118,48762,48763],{"class":120,"line":32886},[118,48764,32769],{"class":187},[118,48766,48767,48769,48771,48773,48775],{"class":120,"line":32897},[118,48768,32775],{"class":128},[118,48770,9482],{"class":124},[118,48772,32780],{"class":128},[118,48774,2953],{"class":124},[118,48776,32785],{"class":128},[118,48778,48779],{"class":120,"line":32903},[118,48780,32791],{"class":187},[118,48782,48783,48785,48787,48789,48791],{"class":120,"line":32922},[118,48784,32797],{"class":128},[118,48786,9482],{"class":124},[118,48788,32759],{"class":128},[118,48790,320],{"class":177},[118,48792,135],{"class":128},[118,48794,48795],{"class":120,"line":32928},[118,48796,32811],{"class":187},[118,48798,48799,48801,48803,48805,48807],{"class":120,"line":32939},[118,48800,3407],{"class":124},[118,48802,32819],{"class":128},[118,48804,26036],{"class":124},[118,48806,31599],{"class":177},[118,48808,32826],{"class":128},[118,48810,48811],{"class":120,"line":32945},[118,48812,32832],{"class":187},[118,48814,48815,48817,48819],{"class":120,"line":32965},[118,48816,32603],{"class":128},[118,48818,174],{"class":124},[118,48820,32608],{"class":128},[118,48822,48823],{"class":120,"line":32981},[118,48824,32847],{"class":187},[118,48826,48827,48829,48831],{"class":120,"line":32987},[118,48828,32618],{"class":128},[118,48830,174],{"class":124},[118,48832,32623],{"class":128},[118,48834,48835],{"class":120,"line":33001},[118,48836,32862],{"class":187},[118,48838,48839],{"class":120,"line":33007},[118,48840,32868],{"class":128},[118,48842,48843],{"class":120,"line":33013},[118,48844,36349],{"class":187},[118,48846,48847,48849],{"class":120,"line":33024},[118,48848,32874],{"class":124},[118,48850,32877],{"class":128},[118,48852,48853],{"class":120,"line":33030},[118,48854,32883],{"class":187},[118,48856,48857,48859,48861],{"class":120,"line":33036},[118,48858,36364],{"class":128},[118,48860,174],{"class":124},[118,48862,32658],{"class":128},[118,48864,48865],{"class":120,"line":33046},[118,48866,32900],{"class":187},[118,48868,48869,48871,48873,48875,48877,48879,48881],{"class":120,"line":33052},[118,48870,36377],{"class":128},[118,48872,174],{"class":124},[118,48874,32675],{"class":128},[118,48876,32678],{"class":5221},[118,48878,174],{"class":124},[118,48880,346],{"class":177},[118,48882,135],{"class":128},[118,48884,48885],{"class":120,"line":33063},[118,48886,32925],{"class":187},[118,48888,48889,48891,48893],{"class":120,"line":33069},[118,48890,36398],{"class":128},[118,48892,174],{"class":124},[118,48894,32701],{"class":128},[118,48896,48897],{"class":120,"line":33079},[118,48898,32942],{"class":187},[118,48900,48901,48903,48905,48907,48909,48911,48913],{"class":120,"line":33084},[118,48902,36411],{"class":128},[118,48904,9482],{"class":124},[118,48906,36416],{"class":128},[118,48908,583],{"class":124},[118,48910,32759],{"class":128},[118,48912,320],{"class":177},[118,48914,135],{"class":128},[118,48916,48917,48919,48921,48923,48925],{"class":120,"line":33090},[118,48918,36429],{"class":128},[118,48920,9482],{"class":124},[118,48922,32780],{"class":128},[118,48924,2953],{"class":124},[118,48926,32785],{"class":128},[118,48928,48929],{"class":120,"line":33139},[118,48930,36442],{"class":187},[118,48932,48933,48935,48937,48939,48941],{"class":120,"line":33186},[118,48934,36447],{"class":128},[118,48936,9482],{"class":124},[118,48938,32759],{"class":128},[118,48940,320],{"class":177},[118,48942,135],{"class":128},[118,48944,48945],{"class":120,"line":33191},[118,48946,33004],{"class":187},[118,48948,48949],{"class":120,"line":33197},[118,48950,33010],{"class":187},[118,48952,48953,48955,48957],{"class":120,"line":33216},[118,48954,33016],{"class":128},[118,48956,712],{"class":124},[118,48958,33021],{"class":128},[118,48960,48961],{"class":120,"line":33222},[118,48962,33027],{"class":187},[118,48964,48965],{"class":120,"line":33242},[118,48966,33033],{"class":187},[118,48968,48969,48971,48973],{"class":120,"line":33248},[118,48970,33039],{"class":128},[118,48972,712],{"class":124},[118,48974,33021],{"class":128},[118,48976,48977],{"class":120,"line":33254},[118,48978,33049],{"class":187},[118,48980,48981,48983,48985],{"class":120,"line":33264},[118,48982,33055],{"class":128},[118,48984,712],{"class":124},[118,48986,33060],{"class":128},[118,48988,48989],{"class":120,"line":33269},[118,48990,33066],{"class":187},[118,48992,48993,48995,48997],{"class":120,"line":33275},[118,48994,33072],{"class":128},[118,48996,712],{"class":124},[118,48998,33060],{"class":128},[118,49000,49001],{"class":120,"line":33291},[118,49002,2404],{"emptyLinePlaceholder":45},[118,49004,49005],{"class":120,"line":33336},[118,49006,33087],{"class":187},[118,49008,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047],{"class":120,"line":33342},[118,49010,32444],{"class":177},[118,49012,129],{"class":128},[118,49014,3596],{"class":233},[118,49016,32452],{"class":177},[118,49018,33101],{"class":233},[118,49020,1024],{"class":177},[118,49022,33106],{"class":124},[118,49024,1074],{"class":177},[118,49026,33111],{"class":233},[118,49028,1024],{"class":177},[118,49030,33106],{"class":124},[118,49032,1074],{"class":177},[118,49034,3596],{"class":233},[118,49036,33122],{"class":128},[118,49038,660],{"class":124},[118,49040,346],{"class":177},[118,49042,33129],{"class":128},[118,49044,660],{"class":124},[118,49046,346],{"class":177},[118,49048,33136],{"class":128},[118,49050,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081,49083,49085,49087,49089],{"class":120,"line":33348},[118,49052,32444],{"class":177},[118,49054,129],{"class":128},[118,49056,3596],{"class":233},[118,49058,32452],{"class":177},[118,49060,33150],{"class":233},[118,49062,1024],{"class":177},[118,49064,33106],{"class":124},[118,49066,1074],{"class":177},[118,49068,33159],{"class":233},[118,49070,1024],{"class":177},[118,49072,33106],{"class":124},[118,49074,1074],{"class":177},[118,49076,3596],{"class":233},[118,49078,33170],{"class":128},[118,49080,660],{"class":124},[118,49082,346],{"class":177},[118,49084,33177],{"class":128},[118,49086,660],{"class":124},[118,49088,346],{"class":177},[118,49090,33136],{"class":128},[118,49092,49093],{"class":120,"line":33354},[118,49094,2404],{"emptyLinePlaceholder":45},[118,49096,49097],{"class":120,"line":33365},[118,49098,33194],{"class":187},[118,49100,49101,49103,49105,49107,49109,49111,49113],{"class":120,"line":33371},[118,49102,2501],{"class":124},[118,49104,33202],{"class":128},[118,49106,660],{"class":124},[118,49108,346],{"class":177},[118,49110,1068],{"class":128},[118,49112,1088],{"class":124},[118,49114,33213],{"class":128},[118,49116,49117],{"class":120,"line":33377},[118,49118,33219],{"class":187},[118,49120,49121,49123,49125,49127,49129,49131,49133],{"class":120,"line":33383},[118,49122,33225],{"class":128},[118,49124,168],{"class":177},[118,49126,174],{"class":124},[118,49128,33232],{"class":128},[118,49130,660],{"class":124},[118,49132,346],{"class":177},[118,49134,33239],{"class":128},[118,49136,49137],{"class":120,"line":33401},[118,49138,33245],{"class":187},[118,49140,49141],{"class":120,"line":33415},[118,49142,33251],{"class":187},[118,49144,49145,49147,49149],{"class":120,"line":33424},[118,49146,33257],{"class":128},[118,49148,174],{"class":124},[118,49150,32307],{"class":128},[118,49152,49153],{"class":120,"line":33433},[118,49154,2404],{"emptyLinePlaceholder":45},[118,49156,49157],{"class":120,"line":33442},[118,49158,33272],{"class":187},[118,49160,49161,49163,49165,49167,49169],{"class":120,"line":33451},[118,49162,33278],{"class":128},[118,49164,174],{"class":124},[118,49166,33283],{"class":128},[118,49168,660],{"class":124},[118,49170,33288],{"class":128},[118,49172,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199,49201,49203,49205,49207],{"class":120,"line":33457},[118,49174,32444],{"class":177},[118,49176,129],{"class":128},[118,49178,33298],{"class":233},[118,49180,1024],{"class":177},[118,49182,33303],{"class":124},[118,49184,1074],{"class":177},[118,49186,672],{"class":233},[118,49188,1024],{"class":177},[118,49190,33303],{"class":124},[118,49192,1074],{"class":177},[118,49194,33316],{"class":233},[118,49196,33319],{"class":128},[118,49198,33322],{"class":124},[118,49200,1035],{"class":177},[118,49202,33327],{"class":128},[118,49204,456],{"class":124},[118,49206,1035],{"class":177},[118,49208,30490],{"class":128},[118,49210,49211],{"class":120,"line":33463},[118,49212,36726],{"class":187},[118,49214,49215],{"class":120,"line":33471},[118,49216,36731],{"class":187},[118,49218,49219,49221,49223],{"class":120,"line":33476},[118,49220,36736],{"class":128},[118,49222,33360],{"class":233},[118,49224,135],{"class":128},[118,49226,49227],{"class":120,"line":33482},[118,49228,33380],{"class":187},[118,49230,49231,49233,49235,49237,49239,49241],{"class":120,"line":33493},[118,49232,33386],{"class":128},[118,49234,174],{"class":124},[118,49236,33391],{"class":128},[118,49238,33394],{"class":5221},[118,49240,174],{"class":124},[118,49242,1550],{"class":128},[118,49244,49245,49247,49249,49251],{"class":120,"line":33499},[118,49246,33404],{"class":233},[118,49248,987],{"class":128},[118,49250,33409],{"class":177},[118,49252,33412],{"class":128},[118,49254,49255,49257],{"class":120,"line":33519},[118,49256,33418],{"class":233},[118,49258,33421],{"class":128},[118,49260,49261,49263],{"class":120,"line":33525},[118,49262,33427],{"class":233},[118,49264,33430],{"class":128},[118,49266,49267,49269],{"class":120,"line":33531},[118,49268,33436],{"class":233},[118,49270,33439],{"class":128},[118,49272,49273,49275],{"class":120,"line":33537},[118,49274,33445],{"class":233},[118,49276,33448],{"class":128},[118,49278,49279],{"class":120,"line":33554},[118,49280,33454],{"class":128},[118,49282,49283],{"class":120,"line":33560},[118,49284,33460],{"class":187},[118,49286,49287,49289],{"class":120,"line":33566},[118,49288,4094],{"class":124},[118,49290,33468],{"class":128},[118,49292,49293],{"class":120,"line":33572},[118,49294,2404],{"emptyLinePlaceholder":45},[118,49296,49297],{"class":120,"line":33578},[118,49298,33479],{"class":187},[118,49300,49301,49303,49305],{"class":120,"line":33584},[118,49302,31940],{"class":124},[118,49304,33487],{"class":1967},[118,49306,33490],{"class":128},[118,49308,49309],{"class":120,"line":33611},[118,49310,33496],{"class":187},[118,49312,49313,49315,49317,49319,49321,49323,49325,49327],{"class":120,"line":33635},[118,49314,33502],{"class":128},[118,49316,31686],{"class":5221},[118,49318,174],{"class":124},[118,49320,129],{"class":128},[118,49322,626],{"class":177},[118,49324,506],{"class":128},[118,49326,421],{"class":177},[118,49328,30490],{"class":128},[118,49330,49331],{"class":120,"line":33641},[118,49332,33522],{"class":187},[118,49334,49335],{"class":120,"line":33647},[118,49336,33528],{"class":187},[118,49338,49339],{"class":120,"line":33653},[118,49340,33534],{"class":187},[118,49342,49343,49345,49347,49349,49351,49353,49355],{"class":120,"line":33664},[118,49344,31720],{"class":128},[118,49346,346],{"class":177},[118,49348,506],{"class":128},[118,49350,206],{"class":177},[118,49352,506],{"class":128},[118,49354,346],{"class":177},[118,49356,135],{"class":128},[118,49358,49359],{"class":120,"line":33675},[118,49360,33557],{"class":187},[118,49362,49363],{"class":120,"line":33681},[118,49364,33563],{"class":187},[118,49366,49367],{"class":120,"line":33698},[118,49368,33569],{"class":187},[118,49370,49371],{"class":120,"line":33721},[118,49372,33575],{"class":187},[118,49374,49375],{"class":120,"line":33744},[118,49376,33581],{"class":187},[118,49378,49379,49381,49383,49385,49387,49389,49391,49393,49395],{"class":120,"line":33750},[118,49380,33587],{"class":128},[118,49382,33590],{"class":233},[118,49384,33593],{"class":128},[118,49386,33596],{"class":233},[118,49388,506],{"class":128},[118,49390,33601],{"class":5221},[118,49392,174],{"class":124},[118,49394,33606],{"class":233},[118,49396,135],{"class":128},[118,49398,49399,49401,49403,49405,49407,49409,49411,49413,49415],{"class":120,"line":33755},[118,49400,33587],{"class":128},[118,49402,33590],{"class":233},[118,49404,33618],{"class":128},[118,49406,33621],{"class":233},[118,49408,506],{"class":128},[118,49410,33601],{"class":5221},[118,49412,174],{"class":124},[118,49414,33630],{"class":233},[118,49416,135],{"class":128},[118,49418,49419],{"class":120,"line":33764},[118,49420,33638],{"class":187},[118,49422,49423],{"class":120,"line":33774},[118,49424,33644],{"class":128},[118,49426,49427],{"class":120,"line":33780},[118,49428,33650],{"class":187},[118,49430,49431,49433,49435],{"class":120,"line":33785},[118,49432,33656],{"class":128},[118,49434,33659],{"class":233},[118,49436,135],{"class":128},[118,49438,49439,49441,49443],{"class":120,"line":33791},[118,49440,33667],{"class":128},[118,49442,33670],{"class":233},[118,49444,135],{"class":128},[118,49446,49447],{"class":120,"line":33804},[118,49448,33678],{"class":187},[118,49450,49451,49453,49455,49457,49459,49461,49463],{"class":120,"line":33810},[118,49452,31720],{"class":128},[118,49454,346],{"class":177},[118,49456,506],{"class":128},[118,49458,206],{"class":177},[118,49460,506],{"class":128},[118,49462,206],{"class":177},[118,49464,135],{"class":128},[118,49466,49467,49469,49471,49473,49475,49477,49479,49481,49483],{"class":120,"line":33821},[118,49468,33587],{"class":128},[118,49470,33590],{"class":233},[118,49472,33705],{"class":128},[118,49474,33596],{"class":233},[118,49476,506],{"class":128},[118,49478,33601],{"class":5221},[118,49480,174],{"class":124},[118,49482,33716],{"class":233},[118,49484,135],{"class":128},[118,49486,49487,49489,49491,49493,49495,49497,49499,49501,49503],{"class":120,"line":33832},[118,49488,33587],{"class":128},[118,49490,33590],{"class":233},[118,49492,33728],{"class":128},[118,49494,33621],{"class":233},[118,49496,506],{"class":128},[118,49498,33601],{"class":5221},[118,49500,174],{"class":124},[118,49502,33739],{"class":233},[118,49504,135],{"class":128},[118,49506,49507],{"class":120,"line":33851},[118,49508,33747],{"class":187},[118,49510,49512],{"class":120,"line":49511},219,[118,49513,33644],{"class":128},[118,49515,49517,49519,49521],{"class":120,"line":49516},220,[118,49518,33656],{"class":128},[118,49520,33590],{"class":233},[118,49522,135],{"class":128},[118,49524,49526,49528,49530],{"class":120,"line":49525},221,[118,49527,33667],{"class":128},[118,49529,33769],{"class":233},[118,49531,135],{"class":128},[118,49533,49535],{"class":120,"line":49534},222,[118,49536,33777],{"class":128},[118,49538,49540],{"class":120,"line":49539},223,[118,49541,2404],{"emptyLinePlaceholder":45},[118,49543,49545],{"class":120,"line":49544},224,[118,49546,33788],{"class":187},[118,49548,49550,49552,49554,49556,49558],{"class":120,"line":49549},225,[118,49551,1535],{"class":124},[118,49553,31213],{"class":177},[118,49555,2953],{"class":124},[118,49557,31218],{"class":233},[118,49559,3743],{"class":128},[118,49561,49563],{"class":120,"line":49562},226,[118,49564,33807],{"class":187},[118,49566,49568,49570,49572],{"class":120,"line":49567},227,[118,49569,44539],{"class":128},[118,49571,174],{"class":124},[118,49573,44544],{"class":128},[118,49575,49577,49579,49581],{"class":120,"line":49576},228,[118,49578,33824],{"class":128},[118,49580,174],{"class":124},[118,49582,33829],{"class":128},[118,49584,49586,49588,49590,49592,49594,49596,49598],{"class":120,"line":49585},229,[118,49587,33386],{"class":128},[118,49589,174],{"class":124},[118,49591,44561],{"class":128},[118,49593,33842],{"class":5221},[118,49595,174],{"class":124},[118,49597,1035],{"class":177},[118,49599,135],{"class":128},[118,49601,49603],{"class":120,"line":49602},230,[118,49604,33854],{"class":128},[22003,49606,49608],{"id":49607},"_242测试代码","2.4.2.测试代码",[15,49610,49611],{},"使用测试集进行测试与推理",[109,49613,49615],{"className":30371,"code":49614,"language":30373,"meta":39,"style":39},"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",[115,49616,49617,49623,49633,49643,49654,49664,49668,49672,49680,49685,49689,49706,49710,49714,49718,49722,49726,49758,49762,49770,49774,49786,49790,49794,49798,49802,49806,49810,49814,49818,49836,49850,49854,49864,49874,49884,49890,49894,49898,49906,49910,49926,49934,49938,49942,49950,49958,49962,49966,49970,49974,49980,49984,49994,50002,50010,50014,50018,50022,50030,50034,50050,50054,50058,50062,50074,50078,50090,50094,50098,50110,50114,50124,50128,50132,50144,50148,50156,50160,50164,50172,50176,50184,50188,50192,50196,50200,50204,50220,50228,50232,50236,50254,50260,50264,50274,50282,50290,50294,50298,50302,50306,50314,50318,50334,50338,50346,50354],{"__ignoreMap":39},[118,49618,49619,49621],{"class":120,"line":121},[118,49620,30385],{"class":124},[118,49622,30388],{"class":128},[118,49624,49625,49627,49629,49631],{"class":120,"line":40},[118,49626,30385],{"class":124},[118,49628,31408],{"class":128},[118,49630,31376],{"class":124},[118,49632,31413],{"class":128},[118,49634,49635,49637,49639,49641],{"class":120,"line":1183},[118,49636,30730],{"class":124},[118,49638,31391],{"class":128},[118,49640,30385],{"class":124},[118,49642,31396],{"class":128},[118,49644,49645,49647,49649,49651],{"class":120,"line":1198},[118,49646,30730],{"class":124},[118,49648,31361],{"class":128},[118,49650,30385],{"class":124},[118,49652,49653],{"class":128}," ImageFolder\n",[118,49655,49656,49658,49660,49662],{"class":120,"line":1204},[118,49657,30730],{"class":124},[118,49659,31907],{"class":128},[118,49661,30385],{"class":124},[118,49663,44633],{"class":128},[118,49665,49666],{"class":120,"line":1218},[118,49667,2404],{"emptyLinePlaceholder":45},[118,49669,49670],{"class":120,"line":1224},[118,49671,33944],{"class":187},[118,49673,49674,49676,49678],{"class":120,"line":1315},[118,49675,31940],{"class":124},[118,49677,33951],{"class":1967},[118,49679,31946],{"class":128},[118,49681,49682],{"class":120,"line":1321},[118,49683,49684],{"class":187},"   # 导入自己的数据集，并进行数据处理\n",[118,49686,49687],{"class":120,"line":1333},[118,49688,47954],{"class":187},[118,49690,49691,49693,49695,49697,49699,49701,49704],{"class":120,"line":1616},[118,49692,47959],{"class":177},[118,49694,174],{"class":124},[118,49696,798],{"class":124},[118,49698,379],{"class":233},[118,49700,686],{"class":177},[118,49702,49703],{"class":47970},"\u002Fdata\u002Ftest",[118,49705,25138],{"class":233},[118,49707,49708],{"class":120,"line":1621},[118,49709,2404],{"emptyLinePlaceholder":45},[118,49711,49712],{"class":120,"line":1627},[118,49713,47982],{"class":187},[118,49715,49716],{"class":120,"line":1632},[118,49717,47987],{"class":187},[118,49719,49720],{"class":120,"line":1646},[118,49721,47992],{"class":187},[118,49723,49724],{"class":120,"line":1651},[118,49725,47997],{"class":187},[118,49727,49728,49730,49732,49734,49736,49738,49740,49742,49744,49746,49748,49750,49752,49754,49756],{"class":120,"line":1657},[118,49729,48002],{"class":128},[118,49731,174],{"class":124},[118,49733,48007],{"class":128},[118,49735,48010],{"class":177},[118,49737,506],{"class":128},[118,49739,48015],{"class":177},[118,49741,506],{"class":128},[118,49743,48020],{"class":177},[118,49745,48023],{"class":128},[118,49747,48026],{"class":177},[118,49749,506],{"class":128},[118,49751,48031],{"class":177},[118,49753,506],{"class":128},[118,49755,48036],{"class":177},[118,49757,4661],{"class":128},[118,49759,49760],{"class":120,"line":1678},[118,49761,48043],{"class":187},[118,49763,49764,49766,49768],{"class":120,"line":1683},[118,49765,48048],{"class":128},[118,49767,174],{"class":124},[118,49769,48053],{"class":128},[118,49771,49772],{"class":120,"line":1697},[118,49773,48058],{"class":187},[118,49775,49776,49778,49780,49782,49784],{"class":120,"line":1702},[118,49777,48063],{"class":128},[118,49779,31494],{"class":177},[118,49781,506],{"class":128},[118,49783,31494],{"class":177},[118,49785,42615],{"class":128},[118,49787,49788],{"class":120,"line":1731},[118,49789,48076],{"class":187},[118,49791,49792],{"class":120,"line":1736},[118,49793,48081],{"class":128},[118,49795,49796],{"class":120,"line":1753},[118,49797,48086],{"class":128},[118,49799,49800],{"class":120,"line":1758},[118,49801,48091],{"class":187},[118,49803,49804],{"class":120,"line":1763},[118,49805,48096],{"class":187},[118,49807,49808],{"class":120,"line":1768},[118,49809,2404],{"emptyLinePlaceholder":45},[118,49811,49812],{"class":120,"line":1782},[118,49813,48105],{"class":187},[118,49815,49816],{"class":120,"line":1787},[118,49817,48110],{"class":187},[118,49819,49820,49822,49824,49826,49828,49830,49832,49834],{"class":120,"line":2581},[118,49821,33958],{"class":128},[118,49823,174],{"class":124},[118,49825,48119],{"class":128},[118,49827,48122],{"class":177},[118,49829,506],{"class":128},[118,49831,48127],{"class":5221},[118,49833,174],{"class":124},[118,49835,48132],{"class":128},[118,49837,49838,49840,49842,49844,49846,49848],{"class":120,"line":2595},[118,49839,34015],{"class":128},[118,49841,174],{"class":124},[118,49843,31527],{"class":128},[118,49845,31530],{"class":5221},[118,49847,174],{"class":124},[118,49849,34026],{"class":128},[118,49851,49852],{"class":120,"line":2603},[118,49853,34031],{"class":187},[118,49855,49856,49858,49860,49862],{"class":120,"line":2608},[118,49857,34036],{"class":5221},[118,49859,174],{"class":124},[118,49861,346],{"class":177},[118,49863,31459],{"class":128},[118,49865,49866,49868,49870,49872],{"class":120,"line":2614},[118,49867,34047],{"class":5221},[118,49869,174],{"class":124},[118,49871,31469],{"class":177},[118,49873,31459],{"class":128},[118,49875,49876,49878,49880,49882],{"class":120,"line":2620},[118,49877,34058],{"class":5221},[118,49879,174],{"class":124},[118,49881,320],{"class":177},[118,49883,135],{"class":128},[118,49885,49886,49888],{"class":120,"line":2625},[118,49887,4094],{"class":124},[118,49889,34071],{"class":128},[118,49891,49892],{"class":120,"line":7953},[118,49893,2404],{"emptyLinePlaceholder":45},[118,49895,49896],{"class":120,"line":7977},[118,49897,34080],{"class":187},[118,49899,49900,49902,49904],{"class":120,"line":7982},[118,49901,31940],{"class":124},[118,49903,34087],{"class":1967},[118,49905,34090],{"class":128},[118,49907,49908],{"class":120,"line":7988},[118,49909,34095],{"class":187},[118,49911,49912,49914,49916,49918,49920,49922,49924],{"class":120,"line":8015},[118,49913,31230],{"class":128},[118,49915,174],{"class":124},[118,49917,31237],{"class":233},[118,49919,1708],{"class":124},[118,49921,31242],{"class":128},[118,49923,1705],{"class":124},[118,49925,34112],{"class":233},[118,49927,49928,49930,49932],{"class":120,"line":8020},[118,49929,31282],{"class":128},[118,49931,174],{"class":124},[118,49933,32282],{"class":128},[118,49935,49936],{"class":120,"line":8026},[118,49937,2404],{"emptyLinePlaceholder":45},[118,49939,49940],{"class":120,"line":8038},[118,49941,34129],{"class":187},[118,49943,49944,49946,49948],{"class":120,"line":8050},[118,49945,34134],{"class":128},[118,49947,174],{"class":124},[118,49949,32335],{"class":177},[118,49951,49952,49954,49956],{"class":120,"line":8062},[118,49953,34143],{"class":128},[118,49955,174],{"class":124},[118,49957,3089],{"class":177},[118,49959,49960],{"class":120,"line":9721},[118,49961,2404],{"emptyLinePlaceholder":45},[118,49963,49964],{"class":120,"line":9746},[118,49965,34156],{"class":187},[118,49967,49968],{"class":120,"line":9769},[118,49969,34161],{"class":187},[118,49971,49972],{"class":120,"line":9793},[118,49973,34166],{"class":187},[118,49975,49976,49978],{"class":120,"line":9798},[118,49977,34171],{"class":124},[118,49979,32877],{"class":128},[118,49981,49982],{"class":120,"line":9803},[118,49983,34178],{"class":187},[118,49985,49986,49988,49990,49992],{"class":120,"line":9808},[118,49987,3407],{"class":124},[118,49989,34185],{"class":128},[118,49991,26036],{"class":124},[118,49993,34190],{"class":128},[118,49995,49996,49998,50000],{"class":120,"line":9817},[118,49997,34195],{"class":128},[118,49999,174],{"class":124},[118,50001,34200],{"class":128},[118,50003,50004,50006,50008],{"class":120,"line":9822},[118,50005,34205],{"class":128},[118,50007,174],{"class":124},[118,50009,34210],{"class":128},[118,50011,50012],{"class":120,"line":9828},[118,50013,34215],{"class":187},[118,50015,50016],{"class":120,"line":9849},[118,50017,32868],{"class":128},[118,50019,50020],{"class":120,"line":9855},[118,50021,34224],{"class":187},[118,50023,50024,50026,50028],{"class":120,"line":9869},[118,50025,32653],{"class":128},[118,50027,174],{"class":124},[118,50029,34233],{"class":128},[118,50031,50032],{"class":120,"line":9875},[118,50033,34238],{"class":187},[118,50035,50036,50038,50040,50042,50044,50046,50048],{"class":120,"line":9902},[118,50037,32670],{"class":128},[118,50039,174],{"class":124},[118,50041,32675],{"class":128},[118,50043,32678],{"class":5221},[118,50045,174],{"class":124},[118,50047,346],{"class":177},[118,50049,135],{"class":128},[118,50051,50052],{"class":120,"line":9911},[118,50053,34259],{"class":187},[118,50055,50056],{"class":120,"line":9917},[118,50057,34264],{"class":187},[118,50059,50060],{"class":120,"line":9925},[118,50061,34269],{"class":187},[118,50063,50064,50066,50068,50070,50072],{"class":120,"line":9930},[118,50065,34274],{"class":128},[118,50067,9482],{"class":124},[118,50069,32780],{"class":128},[118,50071,2953],{"class":124},[118,50073,34283],{"class":128},[118,50075,50076],{"class":120,"line":16609},[118,50077,34288],{"class":187},[118,50079,50080,50082,50084,50086,50088],{"class":120,"line":16615},[118,50081,34293],{"class":128},[118,50083,9482],{"class":124},[118,50085,34298],{"class":128},[118,50087,320],{"class":177},[118,50089,135],{"class":128},[118,50091,50092],{"class":120,"line":16638},[118,50093,2404],{"emptyLinePlaceholder":45},[118,50095,50096],{"class":120,"line":16644},[118,50097,34311],{"class":187},[118,50099,50100,50102,50104,50106,50108],{"class":120,"line":16667},[118,50101,34316],{"class":128},[118,50103,174],{"class":124},[118,50105,34321],{"class":128},[118,50107,712],{"class":124},[118,50109,34326],{"class":128},[118,50111,50112],{"class":120,"line":16681},[118,50113,34331],{"class":187},[118,50115,50116,50118,50120,50122],{"class":120,"line":16701},[118,50117,32444],{"class":177},[118,50119,129],{"class":128},[118,50121,34340],{"class":233},[118,50123,34343],{"class":128},[118,50125,50126],{"class":120,"line":16707},[118,50127,2404],{"emptyLinePlaceholder":45},[118,50129,50130],{"class":120,"line":16718},[118,50131,34352],{"class":187},[118,50133,50134,50136,50138,50140,50142],{"class":120,"line":16741},[118,50135,1535],{"class":124},[118,50137,31213],{"class":177},[118,50139,2953],{"class":124},[118,50141,31218],{"class":233},[118,50143,3743],{"class":128},[118,50145,50146],{"class":120,"line":16763},[118,50147,34369],{"class":187},[118,50149,50150,50152,50154],{"class":120,"line":16768},[118,50151,31282],{"class":128},[118,50153,174],{"class":124},[118,50155,44544],{"class":128},[118,50157,50158],{"class":120,"line":16774},[118,50159,34382],{"class":187},[118,50161,50162],{"class":120,"line":16788},[118,50163,34387],{"class":187},[118,50165,50166,50168,50170],{"class":120,"line":16801},[118,50167,34392],{"class":128},[118,50169,34395],{"class":233},[118,50171,30490],{"class":128},[118,50173,50174],{"class":120,"line":16806},[118,50175,34402],{"class":187},[118,50177,50178,50180,50182],{"class":120,"line":16820},[118,50179,34015],{"class":128},[118,50181,174],{"class":124},[118,50183,34411],{"class":128},[118,50185,50186],{"class":120,"line":16825},[118,50187,34416],{"class":187},[118,50189,50190],{"class":120,"line":16831},[118,50191,34421],{"class":128},[118,50193,50194],{"class":120,"line":16836},[118,50195,2404],{"emptyLinePlaceholder":45},[118,50197,50198],{"class":120,"line":16850},[118,50199,34430],{"class":187},[118,50201,50202],{"class":120,"line":16855},[118,50203,34435],{"class":187},[118,50205,50206,50208,50210,50212,50214,50216,50218],{"class":120,"line":16860},[118,50207,31230],{"class":128},[118,50209,174],{"class":124},[118,50211,31237],{"class":233},[118,50213,1708],{"class":124},[118,50215,31242],{"class":128},[118,50217,1705],{"class":124},[118,50219,34112],{"class":233},[118,50221,50222,50224,50226],{"class":120,"line":16874},[118,50223,31282],{"class":128},[118,50225,174],{"class":124},[118,50227,32282],{"class":128},[118,50229,50230],{"class":120,"line":16886},[118,50231,34464],{"class":187},[118,50233,50234],{"class":120,"line":16891},[118,50235,34469],{"class":187},[118,50237,50238,50240,50242,50244,50247,50249,50252],{"class":120,"line":16904},[118,50239,34474],{"class":128},[118,50241,174],{"class":124},[118,50243,1018],{"class":128},[118,50245,50246],{"class":233},"'猫'",[118,50248,506],{"class":128},[118,50250,50251],{"class":233},"'狗'",[118,50253,33239],{"class":128},[118,50255,50256,50258],{"class":120,"line":16909},[118,50257,34171],{"class":124},[118,50259,32877],{"class":128},[118,50261,50262],{"class":120,"line":16914},[118,50263,34539],{"class":187},[118,50265,50266,50268,50270,50272],{"class":120,"line":16919},[118,50267,3407],{"class":124},[118,50269,34546],{"class":128},[118,50271,26036],{"class":124},[118,50273,34190],{"class":128},[118,50275,50276,50278,50280],{"class":120,"line":16932},[118,50277,32603],{"class":128},[118,50279,174],{"class":124},[118,50281,32608],{"class":128},[118,50283,50284,50286,50288],{"class":120,"line":16937},[118,50285,32618],{"class":128},[118,50287,174],{"class":124},[118,50289,32623],{"class":128},[118,50291,50292],{"class":120,"line":32626},[118,50293,2404],{"emptyLinePlaceholder":45},[118,50295,50296],{"class":120,"line":32632},[118,50297,34575],{"class":187},[118,50299,50300],{"class":120,"line":32638},[118,50301,32868],{"class":128},[118,50303,50304],{"class":120,"line":32644},[118,50305,34584],{"class":187},[118,50307,50308,50310,50312],{"class":120,"line":32650},[118,50309,32653],{"class":128},[118,50311,174],{"class":124},[118,50313,32658],{"class":128},[118,50315,50316],{"class":120,"line":32661},[118,50317,34597],{"class":187},[118,50319,50320,50322,50324,50326,50328,50330,50332],{"class":120,"line":32667},[118,50321,32670],{"class":128},[118,50323,174],{"class":124},[118,50325,32675],{"class":128},[118,50327,32678],{"class":5221},[118,50329,174],{"class":124},[118,50331,346],{"class":177},[118,50333,135],{"class":128},[118,50335,50336],{"class":120,"line":32687},[118,50337,34618],{"class":187},[118,50339,50340,50342,50344],{"class":120,"line":32693},[118,50341,34623],{"class":128},[118,50343,174],{"class":124},[118,50345,34628],{"class":128},[118,50347,50348,50350,50352],{"class":120,"line":32704},[118,50349,34633],{"class":128},[118,50351,174],{"class":124},[118,50353,34638],{"class":128},[118,50355,50356,50358,50360,50362,50364,50366,50368,50370],{"class":120,"line":32710},[118,50357,34643],{"class":177},[118,50359,129],{"class":128},[118,50361,34648],{"class":233},[118,50363,34651],{"class":128},[118,50365,34654],{"class":233},[118,50367,506],{"class":128},[118,50369,34659],{"class":233},[118,50371,34662],{"class":128},[5131,50373,50374],{},"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":39,"searchDepth":40,"depth":40,"links":50376},[50377,50378,50379,50380],{"id":30584,"depth":1183,"text":30585},{"id":37832,"depth":1183,"text":37833},{"id":41265,"depth":1183,"text":41266},{"id":45274,"depth":1183,"text":45275},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30576,"description":42},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50387,"title":50388,"body":50389,"description":42,"extension":43,"meta":50396,"navigation":45,"path":50397,"seo":50398,"stem":50399,"__hash__":50400},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50390,"toc":50394},[50391],[10,50392,50388],{"id":50393},"_3yolo模型学习",{"title":39,"searchDepth":40,"depth":40,"links":50395},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50388,"description":42},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50402,"title":50403,"body":50404,"description":50411,"extension":43,"meta":50412,"navigation":45,"path":50414,"seo":50415,"stem":50416,"__hash__":50417},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50405,"toc":50409},[50406],[15,50407,50408],{},"yolo模型还未补充",{"title":39,"searchDepth":40,"depth":40,"links":50410},[],"深度学习学习",{"category":50413},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50403,"description":50411},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50419,"title":50420,"body":50421,"description":42,"extension":43,"meta":50446,"navigation":45,"path":50447,"seo":50448,"stem":50449,"__hash__":50450},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50422,"toc":50444},[50423,50426,50429,50434,50441],[10,50424,50420],{"id":50425},"_1工具",[15,50427,50428],{},"提示错误插件：有问题会提前报错",[15,50430,50431],{},[1466,50432],{"alt":39,"src":50433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[15,50435,50436],{},[21,50437,50440],{"href":50438,"rel":50439},"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",[25],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[15,50442,50443],{},"alt键加上下箭头可以实现语句的移动",{"title":39,"searchDepth":40,"depth":40,"links":50445},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50420,"description":42},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50452,"title":50453,"body":50454,"description":42,"extension":43,"meta":53318,"navigation":45,"path":53319,"seo":53320,"stem":53321,"__hash__":53322},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50455,"toc":53269},[50456,50459,50463,50467,50472,50475,50480,50484,50491,50496,50503,50508,50515,50520,50524,50529,50532,50536,50541,50545,50550,50553,50556,50559,50562,50565,50568,50571,50574,50579,50584,50589,50593,50596,50599,50603,50608,50611,50619,50624,50641,50649,50654,50659,50664,50669,50674,50677,50682,50687,50691,50700,50705,50710,50714,50719,50722,50726,50731,50739,50744,50749,50752,50757,50762,50767,50770,50773,50776,50781,50786,50789,50794,50797,50802,50805,50808,50811,50816,50819,50822,50837,50842,50847,50852,50855,50858,50861,50875,50878,50883,50888,50891,50894,50897,50900,50903,50906,50909,50913,50917,50922,50926,50929,50934,50939,50942,50947,50950,50954,50959,50962,50965,50968,50971,50974,50977,50980,50983,50986,50990,50995,51000,51005,51008,51011,51015,51020,51023,51027,51030,51033,51038,51041,51044,51048,51052,51055,51060,51065,51068,51097,51102,51107,51112,51117,51121,51126,51130,51135,51138,51142,51146,51151,51155,51160,51165,51169,51174,51177,51179,51182,51187,51191,51196,51200,51204,51209,51214,51219,51224,51228,51233,51238,51243,51246,51249,51254,51257,51262,51267,51272,51277,51281,52088,52092,52435,52440,52443,52446,52449,52452,52455,52458,52461,52464,52466,52469,52471,52474,52478,52483,52486,52489,52492,52496,52501,52506,52526,52529,52533,52538,52543,52560,52564,52593,52597,52619,52621,52660,52668,52674,52678,52681,52684,52689,52694,52697,52700,52703,52708,52713,52716,52719,52722,52725,52728,52731,52734,52737,52740,52743,52746,52748,52751,52754,52757,52760,52763,52766,52769,52772,52776,52781,52784,52789,52792,52795,52798,52801,52804,52807,52810,52812,52815,52818,52821,52824,52827,52830,52834,52837,52846,52849,52854,52857,52862,52865,52868,52871,52874,52877,52880,52883,52887,52891,52894,52897,52902,52907,52912,52916,52921,52926,52929,52932,52935,52938,52941,52946,52949,52954,52956,52961,52964,52968,52973,52976,52979,52984,52988,52991,52996,52999,53002,53031,53036,53039,53042,53045,53048,53051,53055,53058,53144,53148,53151,53156,53161,53168,53171,53174,53177,53180,53183,53188,53193,53196,53199,53202,53205,53208,53211,53214,53217,53220,53222,53225,53229,53234,53239,53244,53247,53252,53257,53260,53263,53266],[10,50457,50453],{"id":50458},"_2基础语法",[60,50460,50462],{"id":50461},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[89,50464,50466],{"id":50465},"_211-js组成","2.1.1 js组成",[72,50468,50469],{},[75,50470,50471],{},"js是编程语言，html和css不是编程语言，是标记语言",[15,50473,50474],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[72,50476,50477],{"start":40},[75,50478,50479],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[89,50481,50483],{"id":50482},"_212-js书写位置","2.1.2 js书写位置",[72,50485,50486],{},[75,50487,50488],{},[278,50489,50490],{},"内部 JavaScript",[15,50492,50493],{},[1466,50494],{"alt":39,"src":50495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[72,50497,50498],{"start":40},[75,50499,50500],{},[278,50501,50502],{},"外部 JavaScript",[15,50504,50505],{},[1466,50506],{"alt":39,"src":50507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[72,50509,50510],{"start":1183},[75,50511,50512],{},[278,50513,50514],{},"内联 JavaScript",[15,50516,50517],{},[1466,50518],{"alt":39,"src":50519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[89,50521,50523],{"id":50522},"_213-javascript注释","2.1.3 JavaScript注释",[15,50525,50526],{},[1466,50527],{"alt":39,"src":50528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[15,50530,50531],{},"alt+shift+a一定要记住！",[89,50533,50535],{"id":50534},"_214-javascript结束符","2.1.4 JavaScript结束符",[15,50537,50538],{},[1466,50539],{"alt":39,"src":50540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[89,50542,50544],{"id":50543},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[72,50546,50547],{},[75,50548,50549],{},"输出语法：",[15,50551,50552],{},"①document.write('要出的内容')",[15,50554,50555],{},"向body内输出内容；",[15,50557,50558],{},"如果输出的内容写的是标签，也会被解析cheng",[15,50560,50561],{},"②alert('要出的内容')",[15,50563,50564],{},"页面弹出警告对话框",[15,50566,50567],{},"③console.log('控制台打印')",[15,50569,50570],{},"控制台输出语法，程序员调试使用",[15,50572,50573],{},"输入log就行，自动生成：",[15,50575,50576],{},[1466,50577],{"alt":39,"src":50578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[72,50580,50581],{"start":40},[75,50582,50583],{},"输入语法：",[15,50585,50586],{},[1466,50587],{"alt":39,"src":50588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[89,50590,50592],{"id":50591},"_2116-字面量","21.1.6 字面量",[15,50594,50595],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[15,50597,50598],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[60,50600,50602],{"id":50601},"_22-变量","2.2 变量",[72,50604,50605],{},[75,50606,50607],{},"变量声明",[15,50609,50610],{},"let 变量名",[1135,50612,50613,50616],{},[75,50614,50615],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[75,50617,50618],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[72,50620,50621],{"start":40},[75,50622,50623],{},"变量赋值",[109,50625,50629],{"className":50626,"code":50627,"language":50628,"meta":39,"style":39},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[115,50630,50631,50636],{"__ignoreMap":39},[118,50632,50633],{"class":120,"line":121},[118,50634,50635],{"class":128},"let age\n",[118,50637,50638],{"class":120,"line":40},[118,50639,50640],{"class":128},"age=18\n",[72,50642,50643,50646],{"start":1183},[75,50644,50645],{},"连这些（变量的初始化）：let age=18",[75,50647,50648],{},"更新变量",[15,50650,50651],{},[1466,50652],{"alt":39,"src":50653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[72,50655,50656],{"start":1204},[75,50657,50658],{},"声明多个变量",[15,50660,50661],{},[1466,50662],{"alt":39,"src":50663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[72,50665,50666],{"start":1218},[75,50667,50668],{},"变量命名规则与规范",[15,50670,50671],{},[1466,50672],{"alt":39,"src":50673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[15,50675,50676],{},"遵守小驼峰！",[72,50678,50679],{"start":1224},[75,50680,50681],{},"变量拓展-let和var的区别",[15,50683,50684],{},[1466,50685],{"alt":39,"src":50686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[60,50688,50690],{"id":50689},"_23-数组","2.3 数组",[109,50692,50694],{"className":50626,"code":50693,"language":50628,"meta":39,"style":39},"let arr = []\n",[115,50695,50696],{"__ignoreMap":39},[118,50697,50698],{"class":120,"line":121},[118,50699,50693],{"class":128},[15,50701,50702],{},[1466,50703],{"alt":39,"src":50704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[15,50706,50707],{},[1466,50708],{"alt":39,"src":50709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[60,50711,50713],{"id":50712},"_24-常量","2.4 常量",[15,50715,50716],{},[1466,50717],{"alt":39,"src":50718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[15,50720,50721],{},"const — 类似于 let ，但是变量的值无法被修改",[60,50723,50725],{"id":50724},"_25-数据类型","2.5 数据类型",[15,50727,50728],{},[1466,50729],{"alt":39,"src":50730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[72,50732,50733,50736],{},[75,50734,50735],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[75,50737,50738],{},"算数运算符：",[15,50740,50741],{},[1466,50742],{"alt":39,"src":50743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[72,50745,50746],{"start":1183},[75,50747,50748],{},"数字类型（Number）",[15,50750,50751],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[15,50753,50754],{},[1466,50755],{"alt":39,"src":50756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[72,50758,50759],{"start":1198},[75,50760,50761],{},"字符串类型（string）",[15,50763,50764],{},[1466,50765],{"alt":39,"src":50766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[15,50768,50769],{},"反引号也是可以使用的",[15,50771,50772],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[15,50774,50775],{},"例如：document.write(\"我今年\"+age+\"岁\")",[72,50777,50778],{"start":1204},[75,50779,50780],{},"模板字符串",[15,50782,50783],{},[1466,50784],{"alt":39,"src":50785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[15,50787,50788],{},"类似于python的字符串格式化",[72,50790,50791],{"start":1218},[75,50792,50793],{},"布尔类型",[15,50795,50796],{},"true 和 false",[72,50798,50799],{"start":1224},[75,50800,50801],{},"未定义类型（underfined）",[15,50803,50804],{},"表示没有赋值",[15,50806,50807],{},"未定义类型是比较特殊的类型，只有一个值undefined",[15,50809,50810],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[72,50812,50813],{"start":1315},[75,50814,50815],{},"null（空类型）",[15,50817,50818],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[15,50820,50821],{},"赋值了，但是内容为空",[109,50823,50825],{"className":50626,"code":50824,"language":50628,"meta":39,"style":39},"typeof null\n输出的是'object'，是一个对象数据类型\n",[115,50826,50827,50832],{"__ignoreMap":39},[118,50828,50829],{"class":120,"line":121},[118,50830,50831],{"class":128},"typeof null\n",[118,50833,50834],{"class":120,"line":40},[118,50835,50836],{"class":128},"输出的是'object'，是一个对象数据类型\n",[72,50838,50839],{"start":1321},[75,50840,50841],{},"控制台检测数据类型",[15,50843,50844],{},[1466,50845],{"alt":39,"src":50846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[72,50848,50849],{"start":1333},[75,50850,50851],{},"类型转换",[15,50853,50854],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[15,50856,50857],{},"转换方式：隐式转换和显示转换",[15,50859,50860],{},"①隐式转换",[1135,50862,50863,50866,50869,50872],{},[75,50864,50865],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[75,50867,50868],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[75,50870,50871],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[75,50873,50874],{},"任何数据和字符串相加结果都是字符串",[15,50876,50877],{},"②显示转换",[15,50879,50880],{},[1466,50881],{"alt":39,"src":50882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[15,50884,50885],{},[1466,50886],{"alt":39,"src":50887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[15,50889,50890],{},"在输入的时候要用好隐式转换，简单写起来",[15,50892,50893],{},"let num = +prompt(’请输入数字：‘)",[15,50895,50896],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[15,50898,50899],{},"console.log(parseInt('12.333px'))",[15,50901,50902],{},"输出为：12",[15,50904,50905],{},"console.log(parseInt('a'a'a12.333px'))",[15,50907,50908],{},"输出：NaN",[60,50910,50912],{"id":50911},"_26-运算符","2.6 运算符",[89,50914,50916],{"id":50915},"_261-赋值运算符","2.6.1 赋值运算符",[15,50918,50919],{},[1466,50920],{"alt":39,"src":50921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[89,50923,50925],{"id":50924},"_262-一元运算符","2.6.2 一元运算符",[15,50927,50928],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[15,50930,50931],{},[1466,50932],{"alt":39,"src":50933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[15,50935,50936],{},[1466,50937],{"alt":39,"src":50938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[15,50940,50941],{},"两者的区别：",[15,50943,50944],{},[1466,50945],{"alt":39,"src":50946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[15,50948,50949],{},"前置先自加；后置后加，代码执行完之后再加",[89,50951,50953],{"id":50952},"_263-比较运算符","2.6.3 比较运算符",[15,50955,50956],{},[1466,50957],{"alt":39,"src":50958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[15,50960,50961],{},"比较运算符也有隐式转换",[15,50963,50964],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[15,50966,50967],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[15,50969,50970],{},"要使用三等，开发的时候",[15,50972,50973],{},"NaN不等于任何人，包括它自己",[15,50975,50976],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[15,50978,50979],{},"7\u002F10=0.7",[15,50981,50982],{},"最后：0.5+0.2=0.7",[15,50984,50985],{},"字符串比较，比较的是字符对应的ASCII码",[89,50987,50989],{"id":50988},"_264-逻辑运算符","2.6.4 逻辑运算符",[15,50991,50992],{},[1466,50993],{"alt":39,"src":50994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[15,50996,50997],{},[1466,50998],{"alt":39,"src":50999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[15,51001,51002],{},[1466,51003],{"alt":39,"src":51004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[15,51006,51007],{},"上述题目选D",[15,51009,51010],{},"与真2假1；或真1假2",[89,51012,51014],{"id":51013},"_265-运算符优先级","2.6.5 运算符优先级",[15,51016,51017],{},[1466,51018],{"alt":39,"src":51019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[15,51021,51022],{},"先算逻辑与，后算逻辑或",[60,51024,51026],{"id":51025},"_27-语句","2.7 语句",[15,51028,51029],{},"表达式：是可以被求值的代码，会有结果给我们",[15,51031,51032],{},"语句：语句是可以被执行的代码，例如prompt()",[15,51034,51035],{},[1466,51036],{"alt":39,"src":51037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[15,51039,51040],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[15,51042,51043],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[89,51045,51047],{"id":51046},"_271-分支语句","2.7.1 分支语句",[22003,51049,51051],{"id":51050},"_2711-if分支语句","2.7.1.1 if分支语句",[15,51053,51054],{},"if语句单行简单的话，可以不写{}，写在一行就行",[72,51056,51057],{},[75,51058,51059],{},"单分支语句",[15,51061,51062],{},[1466,51063],{"alt":39,"src":51064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[15,51066,51067],{},"除了0，所有数字都为真",[109,51069,51071],{"className":50626,"code":51070,"language":50628,"meta":39,"style":39},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[115,51072,51073,51078,51083,51088,51092],{"__ignoreMap":39},[118,51074,51075],{"class":120,"line":121},[118,51076,51077],{"class":128},"if（0) {\n",[118,51079,51080],{"class":120,"line":40},[118,51081,51082],{"class":128},"    let a=1\n",[118,51084,51085],{"class":120,"line":1183},[118,51086,51087],{"class":128},"    alert(typeof a)\n",[118,51089,51090],{"class":120,"line":1198},[118,51091,1569],{"class":128},[118,51093,51094],{"class":120,"line":1204},[118,51095,51096],{"class":128},"不输出，括号为假\n",[72,51098,51099],{"start":40},[75,51100,51101],{},"双分支语句",[15,51103,51104],{},[1466,51105],{"alt":39,"src":51106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[72,51108,51109],{"start":1183},[75,51110,51111],{},"多分支语句",[15,51113,51114],{},[1466,51115],{"alt":39,"src":51116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22003,51118,51120],{"id":51119},"_2712-三元运算符","2.7.1.2 三元运算符",[15,51122,51123],{},[1466,51124],{"alt":39,"src":51125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22003,51127,51129],{"id":51128},"_2713-switch语句","2.7.1.3 switch语句",[15,51131,51132],{},[1466,51133],{"alt":39,"src":51134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[15,51136,51137],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[89,51139,51141],{"id":51140},"_272-循环语句","2.7.2 循环语句",[22003,51143,51145],{"id":51144},"_2721-断点演示","2.7.2.1 断点演示",[15,51147,51148],{},[1466,51149],{"alt":39,"src":51150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22003,51152,51154],{"id":51153},"_2722-while循环","2.7.2.2 while循环",[15,51156,51157],{},[1466,51158],{"alt":39,"src":51159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[15,51161,51162],{},[1466,51163],{"alt":39,"src":51164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22003,51166,51168],{"id":51167},"_2723-for循环","2.7.2.3 for循环",[15,51170,51171],{},[1466,51172],{"alt":39,"src":51173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[15,51175,51176],{},"for(;;) {",[15,51178,1074],{},[15,51180,51181],{},"表示无限循环",[15,51183,51184],{},[1466,51185],{"alt":39,"src":51186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22003,51188,51190],{"id":51189},"_2724-循环的退出","2.7.2.4 循环的退出",[15,51192,51193],{},[1466,51194],{"alt":39,"src":51195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[60,51197,51199],{"id":51198},"_28-数组","2.8 数组",[89,51201,51203],{"id":51202},"_281-基础认识","2.8.1 基础认识",[15,51205,51206],{},[1466,51207],{"alt":39,"src":51208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[15,51210,51211],{},[1466,51212],{"alt":39,"src":51213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[15,51215,51216],{},[1466,51217],{"alt":39,"src":51218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[15,51220,51221],{},[1466,51222],{"alt":39,"src":51223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[89,51225,51227],{"id":51226},"_282-操作数组","2.8.2 操作数组",[15,51229,51230],{},[1466,51231],{"alt":39,"src":51232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[72,51234,51235],{},[75,51236,51237],{},"添加元素",[15,51239,51240],{},[1466,51241],{"alt":39,"src":51242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[15,51244,51245],{},"console.log(arr.push('green'))",[15,51247,51248],{},"输出结果：为新数组的长度",[15,51250,51251],{},[1466,51252],{"alt":39,"src":51253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[15,51255,51256],{},"push用的非常多，一定要记住",[72,51258,51259],{},[75,51260,51261],{},"删除元素",[15,51263,51264],{},[1466,51265],{"alt":39,"src":51266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[15,51268,51269],{},[1466,51270],{"alt":39,"src":51271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[15,51273,51274],{},[1466,51275],{"alt":39,"src":51276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[89,51278,51280],{"id":51279},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[109,51282,51284],{"className":50626,"code":51283,"language":50628,"meta":39,"style":39},"\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",[115,51285,51286,51301,51317,51321,51330,51348,51372,51394,51408,51416,51423,51435,51446,51450,51454,51461,51473,51488,51501,51520,51537,51552,51564,51576,51588,51592,51596,51607,51617,51629,51641,51653,51664,51668,51672,51684,51688,51702,51706,51710,51721,51735,51747,51761,51765,51774,51783,51787,51796,51800,51809,51814,51819,51832,51860,51865,51870,51895,51900,51904,51909,51914,51929,51933,51938,51968,51980,51996,52012,52026,52031,52038,52042,52047,52060,52068,52076,52080],{"__ignoreMap":39},[118,51287,51288,51291,51295,51298],{"class":120,"line":121},[118,51289,51290],{"class":128},"\u003C!",[118,51292,51294],{"class":51293},"s9eBZ","DOCTYPE",[118,51296,51297],{"class":1967}," html",[118,51299,51300],{"class":128},">\n",[118,51302,51303,51305,51307,51310,51312,51315],{"class":120,"line":40},[118,51304,1038],{"class":128},[118,51306,50628],{"class":51293},[118,51308,51309],{"class":1967}," lang",[118,51311,174],{"class":128},[118,51313,51314],{"class":233},"\"en\"",[118,51316,51300],{"class":128},[118,51318,51319],{"class":120,"line":1183},[118,51320,2404],{"emptyLinePlaceholder":45},[118,51322,51323,51325,51328],{"class":120,"line":1198},[118,51324,1038],{"class":128},[118,51326,51327],{"class":51293},"head",[118,51329,51300],{"class":128},[118,51331,51332,51335,51338,51341,51343,51346],{"class":120,"line":1204},[118,51333,51334],{"class":128},"    \u003C",[118,51336,51337],{"class":51293},"meta",[118,51339,51340],{"class":1967}," charset",[118,51342,174],{"class":128},[118,51344,51345],{"class":233},"\"UTF-8\"",[118,51347,51300],{"class":128},[118,51349,51350,51352,51354,51357,51359,51362,51365,51367,51370],{"class":120,"line":1218},[118,51351,51334],{"class":128},[118,51353,51337],{"class":51293},[118,51355,51356],{"class":1967}," http-equiv",[118,51358,174],{"class":128},[118,51360,51361],{"class":233},"\"X-UA-Compatible\"",[118,51363,51364],{"class":1967}," content",[118,51366,174],{"class":128},[118,51368,51369],{"class":233},"\"IE=edge\"",[118,51371,51300],{"class":128},[118,51373,51374,51376,51378,51380,51382,51385,51387,51389,51392],{"class":120,"line":1224},[118,51375,51334],{"class":128},[118,51377,51337],{"class":51293},[118,51379,14925],{"class":1967},[118,51381,174],{"class":128},[118,51383,51384],{"class":233},"\"viewport\"",[118,51386,51364],{"class":1967},[118,51388,174],{"class":128},[118,51390,51391],{"class":233},"\"width=device-width, initial-scale=1.0\"",[118,51393,51300],{"class":128},[118,51395,51396,51398,51401,51404,51406],{"class":120,"line":1315},[118,51397,51334],{"class":128},[118,51399,51400],{"class":51293},"title",[118,51402,51403],{"class":128},">Document\u003C\u002F",[118,51405,51400],{"class":51293},[118,51407,51300],{"class":128},[118,51409,51410,51412,51414],{"class":120,"line":1321},[118,51411,51334],{"class":128},[118,51413,5131],{"class":51293},[118,51415,51300],{"class":128},[118,51417,51418,51421],{"class":120,"line":1333},[118,51419,51420],{"class":51293},"        *",[118,51422,15577],{"class":128},[118,51424,51425,51428,51431,51433],{"class":120,"line":1616},[118,51426,51427],{"class":177},"            margin",[118,51429,51430],{"class":128},": ",[118,51432,320],{"class":177},[118,51434,1294],{"class":128},[118,51436,51437,51440,51442,51444],{"class":120,"line":1621},[118,51438,51439],{"class":177},"            padding",[118,51441,51430],{"class":128},[118,51443,320],{"class":177},[118,51445,1294],{"class":128},[118,51447,51448],{"class":120,"line":1627},[118,51449,2533],{"class":128},[118,51451,51452],{"class":120,"line":1632},[118,51453,2404],{"emptyLinePlaceholder":45},[118,51455,51456,51459],{"class":120,"line":1646},[118,51457,51458],{"class":1967},"        .box",[118,51460,15577],{"class":128},[118,51462,51463,51466,51468,51471],{"class":120,"line":1651},[118,51464,51465],{"class":177},"            display",[118,51467,51430],{"class":128},[118,51469,51470],{"class":177},"flex",[118,51472,1294],{"class":128},[118,51474,51475,51478,51480,51483,51486],{"class":120,"line":1657},[118,51476,51477],{"class":177},"            width",[118,51479,51430],{"class":128},[118,51481,51482],{"class":177},"700",[118,51484,51485],{"class":124},"px",[118,51487,1294],{"class":128},[118,51489,51490,51493,51495,51497,51499],{"class":120,"line":1678},[118,51491,51492],{"class":177},"            height",[118,51494,51430],{"class":128},[118,51496,3977],{"class":177},[118,51498,51485],{"class":124},[118,51500,1294],{"class":128},[118,51502,51503,51506,51508,51510,51512,51515,51518],{"class":120,"line":1683},[118,51504,51505],{"class":177},"            border-left",[118,51507,51430],{"class":128},[118,51509,346],{"class":177},[118,51511,51485],{"class":124},[118,51513,51514],{"class":177}," solid",[118,51516,51517],{"class":177}," pink",[118,51519,1294],{"class":128},[118,51521,51522,51525,51527,51529,51531,51533,51535],{"class":120,"line":1697},[118,51523,51524],{"class":177},"            border-bottom",[118,51526,51430],{"class":128},[118,51528,346],{"class":177},[118,51530,51485],{"class":124},[118,51532,51514],{"class":177},[118,51534,51517],{"class":177},[118,51536,1294],{"class":128},[118,51538,51539,51541,51543,51545,51547,51550],{"class":120,"line":1702},[118,51540,51427],{"class":177},[118,51542,51430],{"class":128},[118,51544,784],{"class":177},[118,51546,51485],{"class":124},[118,51548,51549],{"class":177}," auto",[118,51551,1294],{"class":128},[118,51553,51554,51557,51559,51562],{"class":120,"line":1731},[118,51555,51556],{"class":177},"            justify-content",[118,51558,51430],{"class":128},[118,51560,51561],{"class":177},"space-around",[118,51563,1294],{"class":128},[118,51565,51566,51569,51571,51574],{"class":120,"line":1736},[118,51567,51568],{"class":177},"            align-items",[118,51570,51430],{"class":128},[118,51572,51573],{"class":177},"flex-end",[118,51575,1294],{"class":128},[118,51577,51578,51581,51583,51586],{"class":120,"line":1753},[118,51579,51580],{"class":177},"            text-align",[118,51582,51430],{"class":128},[118,51584,51585],{"class":177},"center",[118,51587,1294],{"class":128},[118,51589,51590],{"class":120,"line":1758},[118,51591,2533],{"class":128},[118,51593,51594],{"class":120,"line":1763},[118,51595,2404],{"emptyLinePlaceholder":45},[118,51597,51598,51600,51602,51605],{"class":120,"line":1768},[118,51599,51458],{"class":1967},[118,51601,1088],{"class":124},[118,51603,51604],{"class":51293},"div",[118,51606,15577],{"class":128},[118,51608,51609,51611,51613,51615],{"class":120,"line":1782},[118,51610,51465],{"class":177},[118,51612,51430],{"class":128},[118,51614,51470],{"class":177},[118,51616,1294],{"class":128},[118,51618,51619,51621,51623,51625,51627],{"class":120,"line":1787},[118,51620,51477],{"class":177},[118,51622,51430],{"class":128},[118,51624,784],{"class":177},[118,51626,51485],{"class":124},[118,51628,1294],{"class":128},[118,51630,51631,51634,51636,51639],{"class":120,"line":2581},[118,51632,51633],{"class":177},"            background-color",[118,51635,51430],{"class":128},[118,51637,51638],{"class":177},"pink",[118,51640,1294],{"class":128},[118,51642,51643,51646,51648,51651],{"class":120,"line":2595},[118,51644,51645],{"class":177},"            flex-direction",[118,51647,51430],{"class":128},[118,51649,51650],{"class":177},"column",[118,51652,1294],{"class":128},[118,51654,51655,51657,51659,51662],{"class":120,"line":2603},[118,51656,51556],{"class":177},[118,51658,51430],{"class":128},[118,51660,51661],{"class":177},"space-between",[118,51663,1294],{"class":128},[118,51665,51666],{"class":120,"line":2608},[118,51667,2533],{"class":128},[118,51669,51670],{"class":120,"line":2614},[118,51671,2404],{"emptyLinePlaceholder":45},[118,51673,51674,51676,51679,51682],{"class":120,"line":2620},[118,51675,51458],{"class":1967},[118,51677,51678],{"class":51293}," div",[118,51680,51681],{"class":51293}," span",[118,51683,15577],{"class":128},[118,51685,51686],{"class":120,"line":2625},[118,51687,2404],{"emptyLinePlaceholder":45},[118,51689,51690,51693,51695,51698,51700],{"class":120,"line":7953},[118,51691,51692],{"class":177},"            margin-top",[118,51694,51430],{"class":128},[118,51696,51697],{"class":177},"-20",[118,51699,51485],{"class":124},[118,51701,1294],{"class":128},[118,51703,51704],{"class":120,"line":7977},[118,51705,2533],{"class":128},[118,51707,51708],{"class":120,"line":7982},[118,51709,2404],{"emptyLinePlaceholder":45},[118,51711,51712,51714,51716,51719],{"class":120,"line":7988},[118,51713,51458],{"class":1967},[118,51715,51678],{"class":51293},[118,51717,51718],{"class":51293}," h4",[118,51720,15577],{"class":128},[118,51722,51723,51726,51728,51731,51733],{"class":120,"line":8015},[118,51724,51725],{"class":177},"            margin-bottom",[118,51727,51430],{"class":128},[118,51729,51730],{"class":177},"-35",[118,51732,51485],{"class":124},[118,51734,1294],{"class":128},[118,51736,51737,51739,51741,51743,51745],{"class":120,"line":8020},[118,51738,51477],{"class":177},[118,51740,51430],{"class":128},[118,51742,484],{"class":177},[118,51744,51485],{"class":124},[118,51746,1294],{"class":128},[118,51748,51749,51752,51754,51757,51759],{"class":120,"line":8026},[118,51750,51751],{"class":177},"            margin-left",[118,51753,51430],{"class":128},[118,51755,51756],{"class":177},"-10",[118,51758,51485],{"class":124},[118,51760,1294],{"class":128},[118,51762,51763],{"class":120,"line":8038},[118,51764,2533],{"class":128},[118,51766,51767,51770,51772],{"class":120,"line":8050},[118,51768,51769],{"class":128},"    \u003C\u002F",[118,51771,5131],{"class":51293},[118,51773,51300],{"class":128},[118,51775,51776,51779,51781],{"class":120,"line":8062},[118,51777,51778],{"class":128},"\u003C\u002F",[118,51780,51327],{"class":51293},[118,51782,51300],{"class":128},[118,51784,51785],{"class":120,"line":9721},[118,51786,2404],{"emptyLinePlaceholder":45},[118,51788,51789,51791,51794],{"class":120,"line":9746},[118,51790,1038],{"class":128},[118,51792,51793],{"class":51293},"body",[118,51795,51300],{"class":128},[118,51797,51798],{"class":120,"line":9769},[118,51799,2404],{"emptyLinePlaceholder":45},[118,51801,51802,51804,51807],{"class":120,"line":9793},[118,51803,51334],{"class":128},[118,51805,51806],{"class":51293},"script",[118,51808,51300],{"class":128},[118,51810,51811],{"class":120,"line":9798},[118,51812,51813],{"class":187},"        \u002F\u002F 1. 四次弹框效果\n",[118,51815,51816],{"class":120,"line":9803},[118,51817,51818],{"class":187},"        \u002F\u002F 声明一个新的数组\n",[118,51820,51821,51824,51827,51829],{"class":120,"line":9808},[118,51822,51823],{"class":124},"        let",[118,51825,51826],{"class":128}," arr ",[118,51828,174],{"class":124},[118,51830,51831],{"class":128}," []\n",[118,51833,51834,51836,51838,51841,51843,51845,51847,51849,51851,51854,51856,51858],{"class":120,"line":9817},[118,51835,3407],{"class":124},[118,51837,1662],{"class":128},[118,51839,51840],{"class":124},"let",[118,51842,9443],{"class":128},[118,51844,174],{"class":124},[118,51846,25123],{"class":177},[118,51848,9450],{"class":128},[118,51850,1592],{"class":124},[118,51852,51853],{"class":177}," 4",[118,51855,3218],{"class":128},[118,51857,2296],{"class":124},[118,51859,12447],{"class":128},[118,51861,51862],{"class":120,"line":9822},[118,51863,51864],{"class":187},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[118,51866,51867],{"class":120,"line":9828},[118,51868,51869],{"class":187},"            \u002F\u002F arr.push(num)\n",[118,51871,51872,51875,51878,51880,51883,51885,51888,51890,51893],{"class":120,"line":9849},[118,51873,51874],{"class":128},"            arr.",[118,51876,51877],{"class":1967},"push",[118,51879,129],{"class":128},[118,51881,51882],{"class":1967},"prompt",[118,51884,129],{"class":128},[118,51886,51887],{"class":233},"`请输入第${",[118,51889,569],{"class":128},[118,51891,51892],{"class":233},"}季度的数据:`",[118,51894,30490],{"class":128},[118,51896,51897],{"class":120,"line":9855},[118,51898,51899],{"class":187},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[118,51901,51902],{"class":120,"line":9869},[118,51903,2533],{"class":128},[118,51905,51906],{"class":120,"line":9875},[118,51907,51908],{"class":187},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[118,51910,51911],{"class":120,"line":9902},[118,51912,51913],{"class":187},"        \u002F\u002F 盒子开头\n",[118,51915,51916,51919,51922,51924,51927],{"class":120,"line":9911},[118,51917,51918],{"class":128},"        document.",[118,51920,51921],{"class":1967},"write",[118,51923,129],{"class":128},[118,51925,51926],{"class":233},"` \u003Cdiv class=\"box\">`",[118,51928,135],{"class":128},[118,51930,51931],{"class":120,"line":9917},[118,51932,2404],{"emptyLinePlaceholder":45},[118,51934,51935],{"class":120,"line":9925},[118,51936,51937],{"class":187},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[118,51939,51940,51942,51944,51946,51948,51950,51952,51954,51956,51959,51962,51964,51966],{"class":120,"line":9930},[118,51941,3407],{"class":124},[118,51943,1662],{"class":128},[118,51945,51840],{"class":124},[118,51947,9443],{"class":128},[118,51949,174],{"class":124},[118,51951,4097],{"class":177},[118,51953,9450],{"class":128},[118,51955,1038],{"class":124},[118,51957,51958],{"class":128}," arr.",[118,51960,51961],{"class":177},"length",[118,51963,3218],{"class":128},[118,51965,2296],{"class":124},[118,51967,12447],{"class":128},[118,51969,51970,51973,51975,51977],{"class":120,"line":16609},[118,51971,51972],{"class":128},"            document.",[118,51974,51921],{"class":1967},[118,51976,129],{"class":128},[118,51978,51979],{"class":233},"`\n",[118,51981,51982,51985,51987,51989,51991,51993],{"class":120,"line":16615},[118,51983,51984],{"class":233},"              \u003Cdiv style=\"height: ${",[118,51986,3884],{"class":128},[118,51988,1018],{"class":233},[118,51990,569],{"class":128},[118,51992,1068],{"class":233},[118,51994,51995],{"class":233},"}px;\">\n",[118,51997,51998,52001,52003,52005,52007,52009],{"class":120,"line":16638},[118,51999,52000],{"class":233},"                \u003Cspan>${",[118,52002,3884],{"class":128},[118,52004,1018],{"class":233},[118,52006,569],{"class":128},[118,52008,1068],{"class":233},[118,52010,52011],{"class":233},"}\u003C\u002Fspan>\n",[118,52013,52014,52017,52019,52021,52023],{"class":120,"line":16644},[118,52015,52016],{"class":233},"                \u003Ch4>第${",[118,52018,569],{"class":128},[118,52020,45559],{"class":124},[118,52022,25123],{"class":177},[118,52024,52025],{"class":233},"}季度\u003C\u002Fh4>\n",[118,52027,52028],{"class":120,"line":16667},[118,52029,52030],{"class":233},"              \u003C\u002Fdiv>          \n",[118,52032,52033,52036],{"class":120,"line":16681},[118,52034,52035],{"class":233},"            `",[118,52037,135],{"class":128},[118,52039,52040],{"class":120,"line":16701},[118,52041,2533],{"class":128},[118,52043,52044],{"class":120,"line":16707},[118,52045,52046],{"class":187},"        \u002F\u002F 盒子结尾\n",[118,52048,52049,52051,52053,52055,52058],{"class":120,"line":16718},[118,52050,51918],{"class":128},[118,52052,51921],{"class":1967},[118,52054,129],{"class":128},[118,52056,52057],{"class":233},"` \u003C\u002Fdiv>`",[118,52059,135],{"class":128},[118,52061,52062,52064,52066],{"class":120,"line":16741},[118,52063,51769],{"class":128},[118,52065,51806],{"class":51293},[118,52067,51300],{"class":128},[118,52069,52070,52072,52074],{"class":120,"line":16763},[118,52071,51778],{"class":128},[118,52073,51793],{"class":51293},[118,52075,51300],{"class":128},[118,52077,52078],{"class":120,"line":16768},[118,52079,2404],{"emptyLinePlaceholder":45},[118,52081,52082,52084,52086],{"class":120,"line":16774},[118,52083,51778],{"class":128},[118,52085,50628],{"class":51293},[118,52087,51300],{"class":128},[89,52089,52091],{"id":52090},"_284-冒泡排序","2.8.4 冒泡排序",[109,52093,52095],{"className":50626,"code":52094,"language":50628,"meta":39,"style":39},"\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",[115,52096,52097,52107,52121,52125,52133,52148,52168,52180,52188,52192,52200,52208,52240,52273,52310,52315,52334,52339,52352,52367,52383,52387,52392,52396,52406,52415,52423,52427],{"__ignoreMap":39},[118,52098,52099,52101,52103,52105],{"class":120,"line":121},[118,52100,51290],{"class":128},[118,52102,51294],{"class":51293},[118,52104,51297],{"class":1967},[118,52106,51300],{"class":128},[118,52108,52109,52111,52113,52115,52117,52119],{"class":120,"line":40},[118,52110,1038],{"class":128},[118,52112,50628],{"class":51293},[118,52114,51309],{"class":1967},[118,52116,174],{"class":128},[118,52118,51314],{"class":233},[118,52120,51300],{"class":128},[118,52122,52123],{"class":120,"line":1183},[118,52124,2404],{"emptyLinePlaceholder":45},[118,52126,52127,52129,52131],{"class":120,"line":1198},[118,52128,1038],{"class":128},[118,52130,51327],{"class":51293},[118,52132,51300],{"class":128},[118,52134,52135,52138,52140,52142,52144,52146],{"class":120,"line":1204},[118,52136,52137],{"class":128},"  \u003C",[118,52139,51337],{"class":51293},[118,52141,51340],{"class":1967},[118,52143,174],{"class":128},[118,52145,51345],{"class":233},[118,52147,51300],{"class":128},[118,52149,52150,52152,52154,52156,52158,52160,52162,52164,52166],{"class":120,"line":1218},[118,52151,52137],{"class":128},[118,52153,51337],{"class":51293},[118,52155,14925],{"class":1967},[118,52157,174],{"class":128},[118,52159,51384],{"class":233},[118,52161,51364],{"class":1967},[118,52163,174],{"class":128},[118,52165,51391],{"class":233},[118,52167,51300],{"class":128},[118,52169,52170,52172,52174,52176,52178],{"class":120,"line":1224},[118,52171,52137],{"class":128},[118,52173,51400],{"class":51293},[118,52175,51403],{"class":128},[118,52177,51400],{"class":51293},[118,52179,51300],{"class":128},[118,52181,52182,52184,52186],{"class":120,"line":1315},[118,52183,51778],{"class":128},[118,52185,51327],{"class":51293},[118,52187,51300],{"class":128},[118,52189,52190],{"class":120,"line":1321},[118,52191,2404],{"emptyLinePlaceholder":45},[118,52193,52194,52196,52198],{"class":120,"line":1333},[118,52195,1038],{"class":128},[118,52197,51793],{"class":51293},[118,52199,51300],{"class":128},[118,52201,52202,52204,52206],{"class":120,"line":1616},[118,52203,52137],{"class":128},[118,52205,51806],{"class":51293},[118,52207,51300],{"class":128},[118,52209,52210,52213,52215,52217,52220,52222,52224,52226,52228,52230,52232,52234,52236,52238],{"class":120,"line":1621},[118,52211,52212],{"class":124},"    let",[118,52214,51826],{"class":128},[118,52216,174],{"class":124},[118,52218,52219],{"class":128}," [",[118,52221,447],{"class":177},[118,52223,12440],{"class":128},[118,52225,421],{"class":177},[118,52227,12440],{"class":128},[118,52229,200],{"class":177},[118,52231,12440],{"class":128},[118,52233,206],{"class":177},[118,52235,12440],{"class":128},[118,52237,346],{"class":177},[118,52239,33239],{"class":128},[118,52241,52242,52244,52246,52248,52250,52252,52254,52256,52258,52260,52262,52265,52267,52269,52271],{"class":120,"line":1627},[118,52243,3205],{"class":124},[118,52245,1662],{"class":128},[118,52247,51840],{"class":124},[118,52249,9443],{"class":128},[118,52251,174],{"class":124},[118,52253,4097],{"class":177},[118,52255,9450],{"class":128},[118,52257,1038],{"class":124},[118,52259,51958],{"class":128},[118,52261,51961],{"class":177},[118,52263,52264],{"class":124}," -",[118,52266,25123],{"class":177},[118,52268,3218],{"class":128},[118,52270,2296],{"class":124},[118,52272,12447],{"class":128},[118,52274,52275,52278,52280,52282,52284,52286,52288,52290,52292,52294,52296,52298,52300,52302,52304,52306,52308],{"class":120,"line":1632},[118,52276,52277],{"class":124},"      for",[118,52279,1662],{"class":128},[118,52281,51840],{"class":124},[118,52283,9505],{"class":128},[118,52285,174],{"class":124},[118,52287,4097],{"class":177},[118,52289,9512],{"class":128},[118,52291,1038],{"class":124},[118,52293,51958],{"class":128},[118,52295,51961],{"class":177},[118,52297,52264],{"class":124},[118,52299,9443],{"class":128},[118,52301,660],{"class":124},[118,52303,25123],{"class":177},[118,52305,9519],{"class":128},[118,52307,2296],{"class":124},[118,52309,12447],{"class":128},[118,52311,52312],{"class":120,"line":1646},[118,52313,52314],{"class":187},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[118,52316,52317,52319,52322,52324,52327,52329,52331],{"class":120,"line":1651},[118,52318,2501],{"class":124},[118,52320,52321],{"class":128}," (arr[j] ",[118,52323,1088],{"class":124},[118,52325,52326],{"class":128}," arr[j ",[118,52328,609],{"class":124},[118,52330,25123],{"class":177},[118,52332,52333],{"class":128},"]) {\n",[118,52335,52336],{"class":120,"line":1657},[118,52337,52338],{"class":187},"          \u002F\u002F 交换两个变量\n",[118,52340,52341,52344,52347,52349],{"class":120,"line":1678},[118,52342,52343],{"class":124},"          let",[118,52345,52346],{"class":128}," tmp ",[118,52348,174],{"class":124},[118,52350,52351],{"class":128}," arr[j]\n",[118,52353,52354,52357,52359,52361,52363,52365],{"class":120,"line":1683},[118,52355,52356],{"class":128},"          arr[j] ",[118,52358,174],{"class":124},[118,52360,52326],{"class":128},[118,52362,609],{"class":124},[118,52364,25123],{"class":177},[118,52366,33239],{"class":128},[118,52368,52369,52372,52374,52376,52378,52380],{"class":120,"line":1697},[118,52370,52371],{"class":128},"          arr[j ",[118,52373,609],{"class":124},[118,52375,25123],{"class":177},[118,52377,4447],{"class":128},[118,52379,174],{"class":124},[118,52381,52382],{"class":128}," tmp\n",[118,52384,52385],{"class":120,"line":1702},[118,52386,2533],{"class":128},[118,52388,52389],{"class":120,"line":1731},[118,52390,52391],{"class":128},"      }\n",[118,52393,52394],{"class":120,"line":1736},[118,52395,2191],{"class":128},[118,52397,52398,52401,52403],{"class":120,"line":1753},[118,52399,52400],{"class":128},"    document.",[118,52402,51921],{"class":1967},[118,52404,52405],{"class":128},"(arr)\n",[118,52407,52408,52411,52413],{"class":120,"line":1758},[118,52409,52410],{"class":128},"  \u003C\u002F",[118,52412,51806],{"class":51293},[118,52414,51300],{"class":128},[118,52416,52417,52419,52421],{"class":120,"line":1763},[118,52418,51778],{"class":128},[118,52420,51793],{"class":51293},[118,52422,51300],{"class":128},[118,52424,52425],{"class":120,"line":1768},[118,52426,2404],{"emptyLinePlaceholder":45},[118,52428,52429,52431,52433],{"class":120,"line":1782},[118,52430,51778],{"class":128},[118,52432,50628],{"class":51293},[118,52434,51300],{"class":128},[15,52436,52437],{},[1466,52438],{"alt":39,"src":52439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[15,52441,52442],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[15,52444,52445],{},"let arr = [4, 2, 5, 1, 3]",[15,52447,52448],{},"\u002F\u002F 1.升序排列写法",[15,52450,52451],{},"arr.sort(function (a, b) {",[15,52453,52454],{},"return a - b",[15,52456,52457],{},"})",[15,52459,52460],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[15,52462,52463],{},"\u002F\u002F 降序排列写法",[15,52465,52451],{},[15,52467,52468],{},"return b - a",[15,52470,52457],{},[15,52472,52473],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[60,52475,52477],{"id":52476},"_29-函数","2.9 函数",[15,52479,52480],{},[1466,52481],{"alt":39,"src":52482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[15,52484,52485],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[15,52487,52488],{},"函数的声明用function",[15,52490,52491],{},"函数里边可以嵌套函数",[89,52493,52495],{"id":52494},"_291-函数传参","2.9.1 函数传参",[15,52497,52498],{},[1466,52499],{"alt":39,"src":52500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[15,52502,52503],{},[1466,52504],{"alt":39,"src":52505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1135,52507,52508,52511,52514,52517,52520,52523],{},[75,52509,52510],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[75,52512,52513],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[75,52515,52516],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[75,52518,52519],{},"开发中尽量保持形参和实参个数一致",[75,52521,52522],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[75,52524,52525],{},"形参只在函数中有用，所以不需要进行声明这个变量",[15,52527,52528],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[89,52530,52532],{"id":52531},"_292-函数的返回值","2.9.2 函数的返回值",[15,52534,52535],{},[1466,52536],{"alt":39,"src":52537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[15,52539,52540],{},[1466,52541],{"alt":39,"src":52542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1135,52544,52545,52548,52551,52554,52557],{},[75,52546,52547],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[75,52549,52550],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[75,52552,52553],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[75,52555,52556],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[75,52558,52559],{},"断点调试:进入函数内部看执行过程F11",[89,52561,52563],{"id":52562},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[109,52565,52567],{"className":50626,"code":52566,"language":50628,"meta":39,"style":39},"    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",[115,52568,52569,52574,52579,52583,52588],{"__ignoreMap":39},[118,52570,52571],{"class":120,"line":121},[118,52572,52573],{"class":128},"    function fn(a, b) {\n",[118,52575,52576],{"class":120,"line":40},[118,52577,52578],{"class":128},"      console.log(a + b);\n",[118,52580,52581],{"class":120,"line":1183},[118,52582,2191],{"class":128},[118,52584,52585],{"class":120,"line":1198},[118,52586,52587],{"class":128},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[118,52589,52590],{"class":120,"line":1204},[118,52591,52592],{"class":128},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[89,52594,52596],{"id":52595},"_294-作用域","2.9.4 作用域",[1135,52598,52599,52605,52610,52613,52616],{},[75,52600,52601,52602],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[278,52603,52604],{},"作用域",[75,52606,52607],{},[278,52608,52609],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[75,52611,52612],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[75,52614,52615],{},"函数内部可以直接所使用全局变量",[75,52617,52618],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[15,52620,14638],{},[109,52622,52624],{"className":50626,"code":52623,"language":50628,"meta":39,"style":39},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[115,52625,52626,52631,52636,52640,52645,52650,52655],{"__ignoreMap":39},[118,52627,52628],{"class":120,"line":121},[118,52629,52630],{"class":128},"    function fun() {\n",[118,52632,52633],{"class":120,"line":40},[118,52634,52635],{"class":128},"      num = 10\n",[118,52637,52638],{"class":120,"line":1183},[118,52639,2191],{"class":128},[118,52641,52642],{"class":120,"line":1198},[118,52643,52644],{"class":128},"    fun()\n",[118,52646,52647],{"class":120,"line":1204},[118,52648,52649],{"class":128},"    console.log(num)\n",[118,52651,52652],{"class":120,"line":1218},[118,52653,52654],{"class":128},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[118,52656,52657],{"class":120,"line":1224},[118,52658,52659],{"class":128},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1135,52661,52662,52665],{},[75,52663,52664],{},"函数内部的形参可以看做是局部变量",[75,52666,52667],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[15,52669,52670,52671],{},"变量访问原则： ",[278,52672,52673],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[89,52675,52677],{"id":52676},"_295-匿名函数","2.9.5 匿名函数",[15,52679,52680],{},"函数可以分为具名函数和匿名函数",[15,52682,52683],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[72,52685,52686],{},[75,52687,52688],{},"函数表达式",[15,52690,52691],{},[1466,52692],{"alt":39,"src":52693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[15,52695,52696],{},"里边也可以写参数",[15,52698,52699],{},"具名函数调用位置可以随意调整；",[15,52701,52702],{},"匿名函数函数表达式形式只能在声明后才可以使用",[72,52704,52705],{"start":40},[75,52706,52707],{},"立即执行函数",[15,52709,52710],{},[1466,52711],{"alt":39,"src":52712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[15,52714,52715],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[15,52717,52718],{},"写法：两个小括号，然后在第一个小括号中写function",[15,52720,52721],{},"(function () {})();",[15,52723,52724],{},"不要落下最后的;",[15,52726,52727],{},"立即执行函数必须要加;",[15,52729,52730],{},"分号写前写后都没问题",[15,52732,52733],{},"写前：",[15,52735,52736],{},"(function() {})()",[15,52738,52739],{},";(function () {})();",[15,52741,52742],{},"写后:",[15,52744,52745],{},"(function() {})();",[15,52747,52721],{},[15,52749,52750],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[15,52752,52753],{},"还有一种写法：",[15,52755,52756],{},"(function(){}());",[15,52758,52759],{},"或者:",[15,52761,52762],{},"!function(){}();",[15,52764,52765],{},"立即执行函数有时候也是可以加名字的：",[15,52767,52768],{},"(function flexible(window,document) {}(window,document));",[15,52770,52771],{},"省一些调用方法",[89,52773,52775],{"id":52774},"_296-逻辑中断","2.9.6 逻辑中断!!!",[15,52777,52778],{},[1466,52779],{"alt":39,"src":52780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[15,52782,52783],{},"这样就不用非得给x,y初始化了",[15,52785,52786],{},[1466,52787],{"alt":39,"src":52788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[15,52790,52791],{},"代码执行时先看左边",[15,52793,52794],{},"例如：console.log(false && 3+5)",[15,52796,52797],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[15,52799,52800],{},"&&都是真时，就返回最后一个真值",[15,52802,52803],{},"console.log(11 && 22)",[15,52805,52806],{},"输出22",[15,52808,52809],{},"逻辑与：遇真则真",[15,52811,14638],{},[15,52813,52814],{},"let age=1",[15,52816,52817],{},"console.log(11 || age++)",[15,52819,52820],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[15,52822,52823],{},"console.log(11 || 22)",[15,52825,52826],{},"||逻辑或遇到真就直接输出，输出结果为11",[15,52828,52829],{},"||如果都是假的话，就取最后一个假的值了",[89,52831,52833],{"id":52832},"_297-转换为boolean型","2.9.7 转换为Boolean型",[15,52835,52836],{},"显示转换：",[15,52838,52839,52842,52843],{},[278,52840,52841],{},"记忆","： ",[278,52844,52845],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[15,52847,52848],{},"空字符串为假，其他字符串全为真",[15,52850,52851],{},[1466,52852],{"alt":39,"src":52853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[15,52855,52856],{},"隐式转换：",[15,52858,52859],{},[1466,52860],{"alt":39,"src":52861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[15,52863,52864],{},"隐式转换:",[15,52866,52867],{},"null+3=3",[15,52869,52870],{},"undefined+3=NaN",[15,52872,52873],{},"null==undefined 输出true,他两个都当0看",[15,52875,52876],{},"null===undefined 输出false",[15,52878,52879],{},"undefined做任何操作都是NaN",[15,52881,52882],{},"NaN不等于NaN，NaN表示计算错误",[60,52884,52886],{"id":52885},"_210-对象","2.10 对象",[89,52888,52890],{"id":52889},"_2101-对象的介绍","2.10.1 对象的介绍",[15,52892,52893],{},"对象也是一种数据类型，里边的数据是无序的",[15,52895,52896],{},"对象由属性和方法组成",[15,52898,52899],{},[1466,52900],{"alt":39,"src":52901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[15,52903,52904],{},[1466,52905],{"alt":39,"src":52906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[15,52908,52909],{},[1466,52910],{"alt":39,"src":52911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[89,52913,52915],{"id":52914},"_2102-对象属性","2.10.2 对象属性",[15,52917,52918],{},[1466,52919],{"alt":39,"src":52920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[72,52922,52923],{},[75,52924,52925],{},"查询对象",[15,52927,52928],{},"对象名.属性 goods.uname",[15,52930,52931],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[15,52933,52934],{},"不带字符串的属性名也可以使用 对象名['属性名']",[15,52936,52937],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[15,52939,52940],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[72,52942,52943],{"start":40},[75,52944,52945],{},"重新赋值",[15,52947,52948],{},"对象名.属性=新值",[72,52950,52951],{"start":1183},[75,52952,52953],{},"增加新数据",[15,52955,52948],{},[72,52957,52958],{"start":1198},[75,52959,52960],{},"删除对象中的属性",[15,52962,52963],{},"delete 对象名.属性",[89,52965,52967],{"id":52966},"_2103-对象方法","2.10.3 对象方法",[15,52969,52970],{},[1466,52971],{"alt":39,"src":52972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[15,52974,52975],{},"后边跟的是匿名函数",[15,52977,52978],{},"对象外面的叫函数；对象内部的叫方法",[15,52980,52981],{},[1466,52982],{"alt":39,"src":52983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[89,52985,52987],{"id":52986},"_2104-遍历对象","2.10.4 遍历对象",[15,52989,52990],{},"理解为加括号的python字典遍历",[15,52992,52993],{},[1466,52994],{"alt":39,"src":52995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[15,52997,52998],{},"k是字符串类型",[15,53000,53001],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[109,53003,53005],{"className":50626,"code":53004,"language":50628,"meta":39,"style":39},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[115,53006,53007,53012,53017,53022,53027],{"__ignoreMap":39},[118,53008,53009],{"class":120,"line":121},[118,53010,53011],{"class":128},"   let arr = [1, 2, 3]\n",[118,53013,53014],{"class":120,"line":40},[118,53015,53016],{"class":128},"    for (let k in arr) {\n",[118,53018,53019],{"class":120,"line":1183},[118,53020,53021],{"class":128},"      console.log(k)\n",[118,53023,53024],{"class":120,"line":1198},[118,53025,53026],{"class":128},"      console.log(arr[k])\n",[118,53028,53029],{"class":120,"line":1204},[118,53030,2191],{"class":128},[15,53032,53033],{},[1466,53034],{"alt":39,"src":53035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[15,53037,53038],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[15,53040,53041],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[15,53043,53044],{},"for in 得到的k是属性名",[51806,53046,53047],{},"\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",[15,53049,53050],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[89,53052,53054],{"id":53053},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[15,53056,53057],{},"数组中放对象信息",[109,53059,53063],{"className":53060,"code":53061,"language":53062,"meta":39,"style":39},"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",[115,53064,53065,53073,53078,53083,53088,53093,53098,53103,53108,53113,53118,53123,53128,53132,53136],{"__ignoreMap":39},[118,53066,53067,53069,53071],{"class":120,"line":121},[118,53068,1038],{"class":128},[118,53070,51806],{"class":51293},[118,53072,51300],{"class":128},[118,53074,53075],{"class":120,"line":40},[118,53076,53077],{"class":128},"    let students = [\n",[118,53079,53080],{"class":120,"line":1183},[118,53081,53082],{"class":128},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[118,53084,53085],{"class":120,"line":1198},[118,53086,53087],{"class":128},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[118,53089,53090],{"class":120,"line":1204},[118,53091,53092],{"class":128},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[118,53094,53095],{"class":120,"line":1218},[118,53096,53097],{"class":128},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[118,53099,53100],{"class":120,"line":1224},[118,53101,53102],{"class":128},"    ]\n",[118,53104,53105],{"class":120,"line":1315},[118,53106,53107],{"class":128},"    for (let i = 0; i \u003C students.length; i++) {\n",[118,53109,53110],{"class":120,"line":1321},[118,53111,53112],{"class":128},"      for (let k in students[i]) {\n",[118,53114,53115],{"class":120,"line":1333},[118,53116,53117],{"class":128},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[118,53119,53120],{"class":120,"line":1616},[118,53121,53122],{"class":128},"        \u002F\u002F输出每个人的名字：\n",[118,53124,53125],{"class":120,"line":1621},[118,53126,53127],{"class":128},"        \u002F\u002Fconsole.log(students[i].name)\n",[118,53129,53130],{"class":120,"line":1627},[118,53131,52391],{"class":128},[118,53133,53134],{"class":120,"line":1632},[118,53135,2191],{"class":128},[118,53137,53138,53140,53142],{"class":120,"line":1646},[118,53139,52410],{"class":128},[118,53141,51806],{"class":51293},[118,53143,51300],{"class":128},[89,53145,53147],{"id":53146},"_2106-内置对象","2.10.6 内置对象",[15,53149,53150],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[72,53152,53153],{},[75,53154,53155],{},"数学对象Math",[15,53157,53158],{},[1466,53159],{"alt":39,"src":53160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[15,53162,53163],{},[21,53164,53167],{"href":53165,"rel":53166},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[15,53169,53170],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[15,53172,53173],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[15,53175,53176],{},"数组不可以使用Math中的max,min来求最大值与最小值",[15,53178,53179],{},"null是一个空对象，可以认为：null类似于let obj={}",[15,53181,53182],{},"null属于对象数据类型",[72,53184,53185],{"start":40},[75,53186,53187],{},"生成任意范围随机数",[15,53189,53190],{},[1466,53191],{"alt":39,"src":53192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[15,53194,53195],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[15,53197,53198],{},"乘以几就取不到几",[15,53200,53201],{},"取数组中的随机元素：",[15,53203,53204],{},"let arr = ['red', 'green', 'blue']",[15,53206,53207],{},"let random = Math.floor(Math.random() * arr.length)",[15,53209,53210],{},"console.log(arr[random])",[15,53212,53213],{},"这个函数得到的是全闭区间",[15,53215,53216],{},"function getRandom(N, M) {",[15,53218,53219],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[15,53221,1074],{},[15,53223,53224],{},"console.log(getRandom(4, 8))",[89,53226,53228],{"id":53227},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[15,53230,53231],{},[1466,53232],{"alt":39,"src":53233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[15,53235,53236],{},[1466,53237],{"alt":39,"src":53238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[15,53240,53241],{},[1466,53242],{"alt":39,"src":53243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[15,53245,53246],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[15,53248,53249],{},[1466,53250],{"alt":39,"src":53251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[15,53253,53254],{},[1466,53255],{"alt":39,"src":53256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[15,53258,53259],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[15,53261,53262],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[15,53264,53265],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5131,53267,53268],{},"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":39,"searchDepth":40,"depth":40,"links":53270},[53271,53279,53280,53281,53282,53283,53290,53294,53300,53309],{"id":50461,"depth":40,"text":50462,"children":53272},[53273,53274,53275,53276,53277,53278],{"id":50465,"depth":1183,"text":50466},{"id":50482,"depth":1183,"text":50483},{"id":50522,"depth":1183,"text":50523},{"id":50534,"depth":1183,"text":50535},{"id":50543,"depth":1183,"text":50544},{"id":50591,"depth":1183,"text":50592},{"id":50601,"depth":40,"text":50602},{"id":50689,"depth":40,"text":50690},{"id":50712,"depth":40,"text":50713},{"id":50724,"depth":40,"text":50725},{"id":50911,"depth":40,"text":50912,"children":53284},[53285,53286,53287,53288,53289],{"id":50915,"depth":1183,"text":50916},{"id":50924,"depth":1183,"text":50925},{"id":50952,"depth":1183,"text":50953},{"id":50988,"depth":1183,"text":50989},{"id":51013,"depth":1183,"text":51014},{"id":51025,"depth":40,"text":51026,"children":53291},[53292,53293],{"id":51046,"depth":1183,"text":51047},{"id":51140,"depth":1183,"text":51141},{"id":51198,"depth":40,"text":51199,"children":53295},[53296,53297,53298,53299],{"id":51202,"depth":1183,"text":51203},{"id":51226,"depth":1183,"text":51227},{"id":51279,"depth":1183,"text":51280},{"id":52090,"depth":1183,"text":52091},{"id":52476,"depth":40,"text":52477,"children":53301},[53302,53303,53304,53305,53306,53307,53308],{"id":52494,"depth":1183,"text":52495},{"id":52531,"depth":1183,"text":52532},{"id":52562,"depth":1183,"text":52563},{"id":52595,"depth":1183,"text":52596},{"id":52676,"depth":1183,"text":52677},{"id":52774,"depth":1183,"text":52775},{"id":52832,"depth":1183,"text":52833},{"id":52885,"depth":40,"text":52886,"children":53310},[53311,53312,53313,53314,53315,53316,53317],{"id":52889,"depth":1183,"text":52890},{"id":52914,"depth":1183,"text":52915},{"id":52966,"depth":1183,"text":52967},{"id":52986,"depth":1183,"text":52987},{"id":53053,"depth":1183,"text":53054},{"id":53146,"depth":1183,"text":53147},{"id":53227,"depth":1183,"text":53228},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50453,"description":42},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53324,"title":53325,"body":53326,"description":42,"extension":43,"meta":76666,"navigation":45,"path":76667,"seo":76668,"stem":76669,"__hash__":76670},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53327,"toc":76606},[53328,53331,53334,53337,53342,53345,53348,53351,53355,53359,53365,53370,53378,53385,53388,53392,53397,53402,53407,53410,53413,53424,53427,53431,53434,53437,53442,53447,53452,53455,53458,53550,53553,53558,53561,53566,53569,53572,53577,53580,53585,53589,53592,53606,53610,53615,53618,53621,53625,53630,53633,53637,53641,53646,53650,53655,53658,53661,53664,53667,53670,53673,53678,53683,53711,53714,53717,53720,53725,53728,53731,53734,53737,53741,53770,53774,53779,53784,53787,53790,53793,53798,53913,53918,53923,54084,54089,54092,54096,54101,54106,54109,54112,54115,54118,54121,54124,54127,54130,54133,54136,54139,54142,54145,54148,54150,54153,54156,54159,54164,54168,54565,54568,54574,54578,54583,55865,55870,55873,55876,55879,55884,57080,57084,57090,57095,57098,57103,57108,57112,57116,57121,57124,57129,57132,57135,57139,58047,58050,58054,58275,58278,58281,58284,58510,58513,58737,58740,58744,58749,58752,58755,58983,58986,59019,59022,59026,59031,59035,59038,59041,59044,59047,59050,59053,59056,59061,60341,60345,60348,61441,61445,61448,61451,61454,61457,61461,61464,61467,61469,61477,62958,62962,62965,62968,62971,63180,63183,63187,63191,63196,63201,63204,63207,63212,63216,63221,63224,63333,63337,63342,63347,63350,63353,63357,63362,63367,63372,63375,63378,63389,63392,63397,63402,63405,63408,63481,63485,63490,63493,63495,63506,63510,63515,64841,64844,64847,64850,64852,64855,64858,64861,64864,64867,64870,64873,64876,64879,64882,64885,64888,64890,64892,64895,64899,65993,65996,65999,66015,66029,66032,66037,66043,66048,66052,66056,66061,66065,66070,66512,66517,66520,66524,66529,66532,66535,66539,66544,66548,66553,66558,66562,66567,66572,66575,66580,66585,66589,66594,66599,66703,66706,66710,66715,67081,67084,67087,67090,67093,67096,67099,67102,67105,68401,68405,68410,68415,68418,68421,68424,68427,68429,68434,68439,68442,68446,68451,68456,68461,68464,68467,68470,68473,68476,68481,68484,68488,68493,68498,68502,68507,68510,68515,68518,68521,68524,68527,68530,68535,68538,68541,68544,68547,68551,68556,68559,68563,68568,68571,68574,68578,68607,68610,68614,68618,68623,68627,68632,68635,68638,68641,68644,68647,68650,68653,68656,68659,68662,68665,68668,68671,68674,68678,68683,68688,68691,68695,68699,68704,68707,68711,68714,68717,68722,68727,68732,68737,68742,68745,68748,68753,68758,68762,68767,68770,68775,68778,68781,68784,68787,68792,68795,68804,68808,68813,68816,68819,68823,68826,68831,68835,68838,68844,68850,68854,68880,68883,70444,70447,70943,70946,70951,70956,70961,70965,70970,70975,70980,70984,70989,70992,70995,70998,71001,71005,71008,71013,71016,71021,71025,71030,71033,71038,71043,71048,71051,71054,71059,71064,71067,71070,71074,71077,71082,71085,71090,71093,71098,71103,71108,71111,71116,71181,71184,71195,71199,71204,71376,71380,71385,71388,71391,71394,71398,71409,71413,71416,71421,71426,71429,71432,71435,71438,71441,71443,71446,71449,71452,71457,71460,71465,71468,71472,71475,71478,71492,71496,71499,71554,71559,71562,71565,71570,71573,71577,71582,71712,71716,71721,71726,71807,71812,71816,71819,71824,71829,71835,71838,71841,71844,71848,71853,71856,71867,71871,71888,74935,74939,74942,74945,74948,74969,74973,74976,74984,74987,74992,74995,74998,75003,75008,75012,75033,75037,75042,75045,75048,75051,75054,75058,75063,75066,75070,75075,75078,75083,75086,75091,75094,75099,76302,76306,76311,76314,76319,76603],[10,53329,53325],{"id":53330},"_3web-apis",[15,53332,53333],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[15,53335,53336],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[15,53338,53339],{},[1466,53340],{"alt":39,"src":53341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[15,53343,53344],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[15,53346,53347],{},"建议数组和对象使用 const 来声明",[15,53349,53350],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[60,53352,53354],{"id":53353},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[89,53356,53358],{"id":53357},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[15,53360,53361,53364],{},[115,53362,53363],{},"document"," = HTML 文件解析后的对象化表示；",[15,53366,53367,53369],{},[115,53368,53363],{}," ≠ HTML 文件本身",[15,53371,53372,53377],{},[278,53373,53374],{},[115,53375,53376],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[15,53379,53380,53384],{},[278,53381,53382],{},[115,53383,53363],{}," ：容器里的内容，代表当前加载的网页（DOM）",[15,53386,53387],{},"document实际上为window.document的简写",[89,53389,53391],{"id":53390},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[15,53393,53394],{},[1466,53395],{"alt":39,"src":53396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[15,53398,53399],{},[1466,53400],{"alt":39,"src":53401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[15,53403,53404],{},[1466,53405],{"alt":39,"src":53406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[15,53408,53409],{},"console.dir()",[15,53411,53412],{},"dir用来打印对象",[1135,53414,53415,53418,53421],{},[75,53416,53417],{},"任何一个标签，都是一个对象",[75,53419,53420],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[75,53422,53423],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[15,53425,53426],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[89,53428,53430],{"id":53429},"_312-获取dom对象","3.1.2 获取DoM对象",[15,53432,53433],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[15,53435,53436],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[15,53438,53439],{},[278,53440,53441],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[72,53443,53444],{},[75,53445,53446],{},"利用CSS选择器来获取标签元素",[15,53448,53449],{},[1466,53450],{"alt":39,"src":53451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[15,53453,53454],{},"里边的选择器必须必须加引号！！！",[15,53456,53457],{},"只选择第一个元素",[109,53459,53461],{"className":53060,"code":53460,"language":53062,"meta":39,"style":39},"\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",[115,53462,53463,53471,53492,53511,53519,53524,53529,53534,53542],{"__ignoreMap":39},[118,53464,53465,53467,53469],{"class":120,"line":121},[118,53466,1038],{"class":128},[118,53468,51793],{"class":51293},[118,53470,51300],{"class":128},[118,53472,53473,53475,53477,53480,53482,53485,53488,53490],{"class":120,"line":40},[118,53474,52137],{"class":128},[118,53476,51604],{"class":51293},[118,53478,53479],{"class":1967}," class",[118,53481,174],{"class":128},[118,53483,53484],{"class":233},"\"box\"",[118,53486,53487],{"class":128},">123\u003C\u002F",[118,53489,51604],{"class":51293},[118,53491,51300],{"class":128},[118,53493,53494,53496,53498,53500,53502,53504,53507,53509],{"class":120,"line":1183},[118,53495,52137],{"class":128},[118,53497,51604],{"class":51293},[118,53499,53479],{"class":1967},[118,53501,174],{"class":128},[118,53503,53484],{"class":233},[118,53505,53506],{"class":128},">456\u003C\u002F",[118,53508,51604],{"class":51293},[118,53510,51300],{"class":128},[118,53512,53513,53515,53517],{"class":120,"line":1198},[118,53514,52137],{"class":128},[118,53516,51806],{"class":51293},[118,53518,51300],{"class":128},[118,53520,53521],{"class":120,"line":1204},[118,53522,53523],{"class":128},"    \u002F\u002F 1.获取匹配的第一个元素\n",[118,53525,53526],{"class":120,"line":1218},[118,53527,53528],{"class":128},"    const box = document.querySelector('div')\n",[118,53530,53531],{"class":120,"line":1224},[118,53532,53533],{"class":128},"    console.dir(box)\n",[118,53535,53536,53538,53540],{"class":120,"line":1315},[118,53537,52410],{"class":128},[118,53539,51806],{"class":51293},[118,53541,51300],{"class":128},[118,53543,53544,53546,53548],{"class":120,"line":1321},[118,53545,51778],{"class":128},[118,53547,51793],{"class":51293},[118,53549,51300],{"class":128},[15,53551,53552],{},"只选123，不选456",[15,53554,53555],{},[1466,53556],{"alt":39,"src":53557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[15,53559,53560],{},"返回的是一个数组的集合，不能对其进行直接修改",[15,53562,53563],{},[1466,53564],{"alt":39,"src":53565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[15,53567,53568],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[15,53570,53571],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[72,53573,53574],{"start":40},[75,53575,53576],{},"其他方法来获取标签元素",[15,53578,53579],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[15,53581,53582],{},[1466,53583],{"alt":39,"src":53584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[89,53586,53588],{"id":53587},"_313-操作元素的内容","3.1.3 操作元素的内容",[15,53590,53591],{},"设置修改DOM元素内容有两种方式：",[1135,53593,53594,53597,53600,53603],{},[75,53595,53596],{},"元素.innerText=''",[75,53598,53599],{},"元素.innerHTML=''",[75,53601,53602],{},"不写字符串输出数字也是可以的",[75,53604,53605],{},"元素.innerHtml=1",[22003,53607,53609],{"id":53608},"_3131-innertext","3.1.3.1 innerText",[15,53611,53612],{},[1466,53613],{"alt":39,"src":53614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[15,53616,53617],{},"思路：实现了修改盒子中的内容！",[15,53619,53620],{},"它只显示纯文本，不解析标签",[22003,53622,53624],{"id":53623},"_3132-innerhtml","3.1.3.2 innerHTML",[15,53626,53627],{},[1466,53628],{"alt":39,"src":53629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[15,53631,53632],{},"相比于innerText，他的强大之处在于可以解析标签",[89,53634,53636],{"id":53635},"_314-操作元素属性","3.1.4 操作元素属性",[22003,53638,53640],{"id":53639},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[15,53642,53643],{},[1466,53644],{"alt":39,"src":53645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22003,53647,53649],{"id":53648},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[15,53651,53652],{},[1466,53653],{"alt":39,"src":53654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[15,53656,53657],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[15,53659,53660],{},"div.style.backgroundColor = 'hotpink'",[15,53662,53663],{},"如果按照css的写法，-表示减，就会出错",[15,53665,53666],{},"body元素不需要再获取，直接用就行！！！！！！",[15,53668,53669],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[15,53671,53672],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[15,53674,53675],{},[1466,53676],{"alt":39,"src":53677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[15,53679,53680],{},[1466,53681],{"alt":39,"src":53682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[72,53684,53685,53688,53691,53694,53697,53700],{},[75,53686,53687],{},"className这个方式就是修改很多样式的时候来使用的！",[75,53689,53690],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[75,53692,53693],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[75,53695,53696],{},"className为属性名，如果还用class的话就导致与关键字冲突",[75,53698,53699],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[75,53701,53702,53703,53708],{},"解析标签的时候就变为了",[51604,53704],{"className":53705},[53706,53707],"nav","box",[53709,53710],"br",{},[15,53712,53713],{},"例子：",[51604,53715],{"className":53716},[53706],[51806,53718,53719],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[15,53721,53722],{},[1466,53723],{"alt":39,"src":53724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[15,53726,53727],{},"追加和删除类名用classList",[15,53729,53730],{},"常用于类似于开关的操作",[15,53732,53733],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[15,53735,53736],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22003,53738,53740],{"id":53739},"_3143-牢记点","3.1.4.3 牢记点",[72,53742,53743,53746,53749,53752,53755,53758,53761,53764,53767],{},[75,53744,53745],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[75,53747,53748],{},"使用style属性操作css时不要忘记引号",[75,53750,53751],{},"使用className或者classList时也不要忘记引号",[75,53753,53754],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[75,53756,53757],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[75,53759,53760],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[75,53762,53763],{},"若： let arr=['1','2',3] arr[0]=1",[75,53765,53766],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[75,53768,53769],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[89,53771,53773],{"id":53772},"_315-操作表单元素","3.1.5 操作表单元素",[72,53775,53776],{},[75,53777,53778],{},"天生的属性",[15,53780,53781],{},[1466,53782],{"alt":39,"src":53783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[15,53785,53786],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[15,53788,53789],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[15,53791,53792],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[15,53794,53795],{},[1466,53796],{"alt":39,"src":53797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[109,53799,53801],{"className":50626,"code":53800,"language":50628,"meta":39,"style":39},"在复选框中如果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",[115,53802,53803,53808,53840,53845,53850,53855,53860,53864,53869,53874,53891,53903,53908],{"__ignoreMap":39},[118,53804,53805],{"class":120,"line":121},[118,53806,53807],{"class":128},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[118,53809,53810,53812,53815,53818,53820,53823,53825,53827,53829,53831,53833,53835,53838],{"class":120,"line":40},[118,53811,1038],{"class":128},[118,53813,53814],{"class":51293},"input",[118,53816,53817],{"class":1967}," type",[118,53819,174],{"class":128},[118,53821,53822],{"class":233},"\"checkbox\"",[118,53824,14925],{"class":1967},[118,53826,174],{"class":128},[118,53828,7657],{"class":233},[118,53830,14964],{"class":1967},[118,53832,174],{"class":128},[118,53834,7657],{"class":233},[118,53836,53837],{"class":1967}," checked",[118,53839,51300],{"class":128},[118,53841,53842],{"class":120,"line":1183},[118,53843,53844],{"class":128},"不选的话：\n",[118,53846,53847],{"class":120,"line":1198},[118,53848,53849],{"class":128},"const input = document.querySelector('input')\n",[118,53851,53852],{"class":120,"line":1204},[118,53853,53854],{"class":128},"input.checked=false\n",[118,53856,53857],{"class":120,"line":1218},[118,53858,53859],{"class":128},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[118,53861,53862],{"class":120,"line":1224},[118,53863,2404],{"emptyLinePlaceholder":45},[118,53865,53866],{"class":120,"line":1315},[118,53867,53868],{"class":128},"禁用按钮：\n",[118,53870,53871],{"class":120,"line":1321},[118,53872,53873],{"class":128},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[118,53875,53876,53878,53881,53884,53887,53889],{"class":120,"line":1333},[118,53877,1038],{"class":128},[118,53879,53880],{"class":51293},"button",[118,53882,53883],{"class":1967}," disabled",[118,53885,53886],{"class":128},">点击\u003C\u002F",[118,53888,53880],{"class":51293},[118,53890,51300],{"class":128},[118,53892,53893,53895,53897,53899,53901],{"class":120,"line":1616},[118,53894,1038],{"class":128},[118,53896,53880],{"class":51293},[118,53898,53886],{"class":128},[118,53900,53880],{"class":51293},[118,53902,51300],{"class":128},[118,53904,53905],{"class":120,"line":1621},[118,53906,53907],{"class":128},"const bt = document.querySelector('button')\n",[118,53909,53910],{"class":120,"line":1627},[118,53911,53912],{"class":128},"bt.disabled = false\n",[72,53914,53915],{"start":40},[75,53916,53917],{},"自定义属性",[15,53919,53920],{},[1466,53921],{"alt":39,"src":53922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[109,53924,53926],{"className":53060,"code":53925,"language":53062,"meta":39,"style":39},"\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",[115,53927,53928,53936,53964,53983,54002,54021,54040,54048,54053,54058,54063,54068,54076],{"__ignoreMap":39},[118,53929,53930,53932,53934],{"class":120,"line":121},[118,53931,1038],{"class":128},[118,53933,51793],{"class":51293},[118,53935,51300],{"class":128},[118,53937,53938,53940,53942,53945,53947,53949,53952,53954,53957,53960,53962],{"class":120,"line":40},[118,53939,52137],{"class":128},[118,53941,51604],{"class":51293},[118,53943,53944],{"class":1967}," data-id",[118,53946,174],{"class":128},[118,53948,3682],{"class":233},[118,53950,53951],{"class":1967}," data-spm",[118,53953,174],{"class":128},[118,53955,53956],{"class":233},"\"我不知道\"",[118,53958,53959],{"class":128},">1\u003C\u002F",[118,53961,51604],{"class":51293},[118,53963,51300],{"class":128},[118,53965,53966,53968,53970,53972,53974,53976,53979,53981],{"class":120,"line":1183},[118,53967,52137],{"class":128},[118,53969,51604],{"class":51293},[118,53971,53944],{"class":1967},[118,53973,174],{"class":128},[118,53975,3705],{"class":233},[118,53977,53978],{"class":128},">2\u003C\u002F",[118,53980,51604],{"class":51293},[118,53982,51300],{"class":128},[118,53984,53985,53987,53989,53991,53993,53995,53998,54000],{"class":120,"line":1198},[118,53986,52137],{"class":128},[118,53988,51604],{"class":51293},[118,53990,53944],{"class":1967},[118,53992,174],{"class":128},[118,53994,3718],{"class":233},[118,53996,53997],{"class":128},">3\u003C\u002F",[118,53999,51604],{"class":51293},[118,54001,51300],{"class":128},[118,54003,54004,54006,54008,54010,54012,54014,54017,54019],{"class":120,"line":1204},[118,54005,52137],{"class":128},[118,54007,51604],{"class":51293},[118,54009,53944],{"class":1967},[118,54011,174],{"class":128},[118,54013,3731],{"class":233},[118,54015,54016],{"class":128},">4\u003C\u002F",[118,54018,51604],{"class":51293},[118,54020,51300],{"class":128},[118,54022,54023,54025,54027,54029,54031,54033,54036,54038],{"class":120,"line":1218},[118,54024,52137],{"class":128},[118,54026,51604],{"class":51293},[118,54028,53944],{"class":1967},[118,54030,174],{"class":128},[118,54032,3752],{"class":233},[118,54034,54035],{"class":128},">5\u003C\u002F",[118,54037,51604],{"class":51293},[118,54039,51300],{"class":128},[118,54041,54042,54044,54046],{"class":120,"line":1224},[118,54043,52137],{"class":128},[118,54045,51806],{"class":51293},[118,54047,51300],{"class":128},[118,54049,54050],{"class":120,"line":1315},[118,54051,54052],{"class":128},"    const one = document.querySelector('div')\n",[118,54054,54055],{"class":120,"line":1321},[118,54056,54057],{"class":128},"    console.log(one.dataset)\n",[118,54059,54060],{"class":120,"line":1333},[118,54061,54062],{"class":128},"    console.log(one.dataset.id)\n",[118,54064,54065],{"class":120,"line":1616},[118,54066,54067],{"class":128},"    console.log(one.dataset.spm)\n",[118,54069,54070,54072,54074],{"class":120,"line":1621},[118,54071,52410],{"class":128},[118,54073,51806],{"class":51293},[118,54075,51300],{"class":128},[118,54077,54078,54080,54082],{"class":120,"line":1627},[118,54079,51778],{"class":128},[118,54081,51793],{"class":51293},[118,54083,51300],{"class":128},[15,54085,54086],{},[1466,54087],{"alt":39,"src":54088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[15,54090,54091],{},"document.querySelector选择的是第一个对象（元素）",[89,54093,54095],{"id":54094},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[15,54097,54098],{},[1466,54099],{"alt":39,"src":54100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[15,54102,54103],{},[1466,54104],{"alt":39,"src":54105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[15,54107,54108],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51806,54110,54111],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[15,54113,54114],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51806,54116,54117],{},"\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",[15,54119,54120],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[15,54122,54123],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[15,54125,54126],{},"单位为毫秒！！！",[15,54128,54129],{},"可以搭配匿名函数来用！！！",[15,54131,54132],{},"setInterval(function () {",[15,54134,54135],{},"alert('两秒执行一次')",[15,54137,54138],{},"}, 2000)",[15,54140,54141],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[15,54143,54144],{},"function fn() {",[15,54146,54147],{},"document.write(1)",[15,54149,1074],{},[15,54151,54152],{},"setInterval(fn, 1000)",[15,54154,54155],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[15,54157,54158],{},"setInterval('fn()', 1000)",[15,54160,54161],{},[1466,54162],{"alt":39,"src":54163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22003,54165,54167],{"id":54166},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[109,54169,54171],{"className":50626,"code":54170,"language":50628,"meta":39,"style":39},"\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",[115,54172,54173,54183,54197,54201,54209,54223,54243,54255,54263,54267,54275,54312,54317,54322,54327,54335,54343,54365,54373,54378,54400,54405,54410,54421,54426,54446,54454,54469,54484,54495,54500,54510,54520,54524,54533,54537,54545,54553,54557],{"__ignoreMap":39},[118,54174,54175,54177,54179,54181],{"class":120,"line":121},[118,54176,51290],{"class":128},[118,54178,51294],{"class":51293},[118,54180,51297],{"class":1967},[118,54182,51300],{"class":128},[118,54184,54185,54187,54189,54191,54193,54195],{"class":120,"line":40},[118,54186,1038],{"class":128},[118,54188,50628],{"class":51293},[118,54190,51309],{"class":1967},[118,54192,174],{"class":128},[118,54194,51314],{"class":233},[118,54196,51300],{"class":128},[118,54198,54199],{"class":120,"line":1183},[118,54200,2404],{"emptyLinePlaceholder":45},[118,54202,54203,54205,54207],{"class":120,"line":1198},[118,54204,1038],{"class":128},[118,54206,51327],{"class":51293},[118,54208,51300],{"class":128},[118,54210,54211,54213,54215,54217,54219,54221],{"class":120,"line":1204},[118,54212,52137],{"class":128},[118,54214,51337],{"class":51293},[118,54216,51340],{"class":1967},[118,54218,174],{"class":128},[118,54220,51345],{"class":233},[118,54222,51300],{"class":128},[118,54224,54225,54227,54229,54231,54233,54235,54237,54239,54241],{"class":120,"line":1218},[118,54226,52137],{"class":128},[118,54228,51337],{"class":51293},[118,54230,14925],{"class":1967},[118,54232,174],{"class":128},[118,54234,51384],{"class":233},[118,54236,51364],{"class":1967},[118,54238,174],{"class":128},[118,54240,51391],{"class":233},[118,54242,51300],{"class":128},[118,54244,54245,54247,54249,54251,54253],{"class":120,"line":1224},[118,54246,52137],{"class":128},[118,54248,51400],{"class":51293},[118,54250,51403],{"class":128},[118,54252,51400],{"class":51293},[118,54254,51300],{"class":128},[118,54256,54257,54259,54261],{"class":120,"line":1315},[118,54258,51778],{"class":128},[118,54260,51327],{"class":51293},[118,54262,51300],{"class":128},[118,54264,54265],{"class":120,"line":1321},[118,54266,2404],{"emptyLinePlaceholder":45},[118,54268,54269,54271,54273],{"class":120,"line":1333},[118,54270,1038],{"class":128},[118,54272,51793],{"class":51293},[118,54274,51300],{"class":128},[118,54276,54277,54279,54282,54284,54286,54288,54290,54292,54294,54297,54299,54302,54305,54307,54310],{"class":120,"line":1616},[118,54278,52137],{"class":128},[118,54280,54281],{"class":51293},"textarea",[118,54283,14925],{"class":1967},[118,54285,174],{"class":128},[118,54287,7657],{"class":233},[118,54289,14964],{"class":1967},[118,54291,174],{"class":128},[118,54293,7657],{"class":233},[118,54295,54296],{"class":1967}," cols",[118,54298,174],{"class":128},[118,54300,54301],{"class":233},"\"30\"",[118,54303,54304],{"class":1967}," rows",[118,54306,174],{"class":128},[118,54308,54309],{"class":233},"\"10\"",[118,54311,51300],{"class":128},[118,54313,54314],{"class":120,"line":1621},[118,54315,54316],{"class":128},"        用户注册协议\n",[118,54318,54319],{"class":120,"line":1627},[118,54320,54321],{"class":128},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[118,54323,54324],{"class":120,"line":1632},[118,54325,54326],{"class":128},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[118,54328,54329,54331,54333],{"class":120,"line":1646},[118,54330,51769],{"class":128},[118,54332,54281],{"class":51293},[118,54334,51300],{"class":128},[118,54336,54337,54339,54341],{"class":120,"line":1651},[118,54338,52137],{"class":128},[118,54340,53709],{"class":51293},[118,54342,51300],{"class":128},[118,54344,54345,54347,54349,54351,54353,54356,54358,54361,54363],{"class":120,"line":1657},[118,54346,52137],{"class":128},[118,54348,53880],{"class":51293},[118,54350,53479],{"class":1967},[118,54352,174],{"class":128},[118,54354,54355],{"class":233},"\"btn\"",[118,54357,53883],{"class":1967},[118,54359,54360],{"class":128},">我已经阅读用户协议(5)\u003C\u002F",[118,54362,53880],{"class":51293},[118,54364,51300],{"class":128},[118,54366,54367,54369,54371],{"class":120,"line":1678},[118,54368,52137],{"class":128},[118,54370,51806],{"class":51293},[118,54372,51300],{"class":128},[118,54374,54375],{"class":120,"line":1683},[118,54376,54377],{"class":187},"    \u002F\u002F 1. 获取元素\n",[118,54379,54380,54382,54385,54387,54390,54393,54395,54398],{"class":120,"line":1697},[118,54381,11226],{"class":124},[118,54383,54384],{"class":177}," btn",[118,54386,13569],{"class":124},[118,54388,54389],{"class":128}," document.",[118,54391,54392],{"class":1967},"querySelector",[118,54394,129],{"class":128},[118,54396,54397],{"class":233},"'.btn'",[118,54399,135],{"class":128},[118,54401,54402],{"class":120,"line":1702},[118,54403,54404],{"class":187},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[118,54406,54407],{"class":120,"line":1731},[118,54408,54409],{"class":187},"    \u002F\u002F 2. 倒计时\n",[118,54411,54412,54414,54416,54418],{"class":120,"line":1736},[118,54413,52212],{"class":124},[118,54415,9443],{"class":128},[118,54417,174],{"class":124},[118,54419,54420],{"class":177}," 5\n",[118,54422,54423],{"class":120,"line":1753},[118,54424,54425],{"class":187},"    \u002F\u002F 2.1 开启定时器\n",[118,54427,54428,54430,54433,54435,54438,54440,54443],{"class":120,"line":1758},[118,54429,52212],{"class":124},[118,54431,54432],{"class":128}," n ",[118,54434,174],{"class":124},[118,54436,54437],{"class":1967}," setInterval",[118,54439,129],{"class":128},[118,54441,54442],{"class":124},"function",[118,54444,54445],{"class":128}," () {\n",[118,54447,54448,54451],{"class":120,"line":1763},[118,54449,54450],{"class":128},"      i",[118,54452,54453],{"class":124},"--\n",[118,54455,54456,54459,54461,54464,54466],{"class":120,"line":1768},[118,54457,54458],{"class":128},"      btn.innerHTML ",[118,54460,174],{"class":124},[118,54462,54463],{"class":233}," `我已经阅读用户协议(${",[118,54465,569],{"class":128},[118,54467,54468],{"class":233},"})`\n",[118,54470,54471,54474,54477,54480,54482],{"class":120,"line":1782},[118,54472,54473],{"class":124},"      if",[118,54475,54476],{"class":128}," (i ",[118,54478,54479],{"class":124},"===",[118,54481,4097],{"class":177},[118,54483,12447],{"class":128},[118,54485,54486,54489,54492],{"class":120,"line":1787},[118,54487,54488],{"class":1967},"        clearInterval",[118,54490,54491],{"class":128},"(n)  ",[118,54493,54494],{"class":187},"\u002F\u002F 关闭定时器\n",[118,54496,54497],{"class":120,"line":2581},[118,54498,54499],{"class":187},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[118,54501,54502,54505,54507],{"class":120,"line":2595},[118,54503,54504],{"class":128},"        btn.disabled ",[118,54506,174],{"class":124},[118,54508,54509],{"class":177}," false\n",[118,54511,54512,54515,54517],{"class":120,"line":2603},[118,54513,54514],{"class":128},"        btn.innerHTML ",[118,54516,174],{"class":124},[118,54518,54519],{"class":233}," '同意'\n",[118,54521,54522],{"class":120,"line":2608},[118,54523,52391],{"class":128},[118,54525,54526,54529,54531],{"class":120,"line":2614},[118,54527,54528],{"class":128},"    }, ",[118,54530,6415],{"class":177},[118,54532,135],{"class":128},[118,54534,54535],{"class":120,"line":2620},[118,54536,2404],{"emptyLinePlaceholder":45},[118,54538,54539,54541,54543],{"class":120,"line":2625},[118,54540,52410],{"class":128},[118,54542,51806],{"class":51293},[118,54544,51300],{"class":128},[118,54546,54547,54549,54551],{"class":120,"line":7953},[118,54548,51778],{"class":128},[118,54550,51793],{"class":51293},[118,54552,51300],{"class":128},[118,54554,54555],{"class":120,"line":7977},[118,54556,2404],{"emptyLinePlaceholder":45},[118,54558,54559,54561,54563],{"class":120,"line":7982},[118,54560,51778],{"class":128},[118,54562,50628],{"class":51293},[118,54564,51300],{"class":128},[15,54566,54567],{},"不要一直想着用死循环,避免死循环",[15,54569,54570,54573],{},[115,54571,54572],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22003,54575,54577],{"id":54576},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[72,54579,54580],{},[75,54581,54582],{},"法1",[109,54584,54586],{"className":50626,"code":54585,"language":50628,"meta":39,"style":39},"\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",[115,54587,54588,54598,54612,54616,54624,54638,54658,54670,54678,54684,54695,54706,54710,54714,54721,54733,54737,54741,54748,54760,54774,54787,54801,54805,54809,54816,54827,54838,54849,54861,54873,54885,54889,54893,54901,54911,54924,54936,54949,54953,54957,54964,54974,54986,54998,55009,55020,55030,55042,55054,55058,55062,55071,55083,55095,55123,55136,55140,55144,55151,55162,55166,55174,55182,55186,55194,55208,55223,55247,55255,55270,55283,55291,55312,55324,55336,55348,55360,55372,55384,55396,55405,55413,55421,55429,55441,55464,55483,55502,55521,55540,55559,55578,55598,55602,55622,55641,55661,55682,55693,55710,55720,55730,55740,55745,55750,55755,55760,55785,55798,55802,55825,55829,55837,55845,55853,55857],{"__ignoreMap":39},[118,54589,54590,54592,54594,54596],{"class":120,"line":121},[118,54591,51290],{"class":128},[118,54593,51294],{"class":51293},[118,54595,51297],{"class":1967},[118,54597,51300],{"class":128},[118,54599,54600,54602,54604,54606,54608,54610],{"class":120,"line":40},[118,54601,1038],{"class":128},[118,54603,50628],{"class":51293},[118,54605,51309],{"class":1967},[118,54607,174],{"class":128},[118,54609,51314],{"class":233},[118,54611,51300],{"class":128},[118,54613,54614],{"class":120,"line":1183},[118,54615,2404],{"emptyLinePlaceholder":45},[118,54617,54618,54620,54622],{"class":120,"line":1198},[118,54619,1038],{"class":128},[118,54621,51327],{"class":51293},[118,54623,51300],{"class":128},[118,54625,54626,54628,54630,54632,54634,54636],{"class":120,"line":1204},[118,54627,52137],{"class":128},[118,54629,51337],{"class":51293},[118,54631,51340],{"class":1967},[118,54633,174],{"class":128},[118,54635,51345],{"class":233},[118,54637,51300],{"class":128},[118,54639,54640,54642,54644,54646,54648,54650,54652,54654,54656],{"class":120,"line":1218},[118,54641,52137],{"class":128},[118,54643,51337],{"class":51293},[118,54645,14925],{"class":1967},[118,54647,174],{"class":128},[118,54649,51384],{"class":233},[118,54651,51364],{"class":1967},[118,54653,174],{"class":128},[118,54655,51391],{"class":233},[118,54657,51300],{"class":128},[118,54659,54660,54662,54664,54666,54668],{"class":120,"line":1224},[118,54661,52137],{"class":128},[118,54663,51400],{"class":51293},[118,54665,51403],{"class":128},[118,54667,51400],{"class":51293},[118,54669,51300],{"class":128},[118,54671,54672,54674,54676],{"class":120,"line":1315},[118,54673,52137],{"class":128},[118,54675,5131],{"class":51293},[118,54677,51300],{"class":128},[118,54679,54680,54682],{"class":120,"line":1321},[118,54681,6408],{"class":51293},[118,54683,15577],{"class":128},[118,54685,54686,54689,54691,54693],{"class":120,"line":1333},[118,54687,54688],{"class":177},"      padding",[118,54690,51430],{"class":128},[118,54692,320],{"class":177},[118,54694,1294],{"class":128},[118,54696,54697,54700,54702,54704],{"class":120,"line":1616},[118,54698,54699],{"class":177},"      margin",[118,54701,51430],{"class":128},[118,54703,320],{"class":177},[118,54705,1294],{"class":128},[118,54707,54708],{"class":120,"line":1621},[118,54709,2191],{"class":128},[118,54711,54712],{"class":120,"line":1627},[118,54713,2404],{"emptyLinePlaceholder":45},[118,54715,54716,54719],{"class":120,"line":1632},[118,54717,54718],{"class":51293},"    li",[118,54720,15577],{"class":128},[118,54722,54723,54726,54728,54731],{"class":120,"line":1646},[118,54724,54725],{"class":177},"      list-style",[118,54727,51430],{"class":128},[118,54729,54730],{"class":177},"none",[118,54732,1294],{"class":128},[118,54734,54735],{"class":120,"line":1651},[118,54736,2191],{"class":128},[118,54738,54739],{"class":120,"line":1657},[118,54740,2404],{"emptyLinePlaceholder":45},[118,54742,54743,54746],{"class":120,"line":1678},[118,54744,54745],{"class":1967},"    .box",[118,54747,15577],{"class":128},[118,54749,54750,54753,54755,54758],{"class":120,"line":1683},[118,54751,54752],{"class":177},"      position",[118,54754,51430],{"class":128},[118,54756,54757],{"class":177},"relative",[118,54759,1294],{"class":128},[118,54761,54762,54765,54767,54770,54772],{"class":120,"line":1697},[118,54763,54764],{"class":177},"      width",[118,54766,51430],{"class":128},[118,54768,54769],{"class":177},"976",[118,54771,51485],{"class":124},[118,54773,1294],{"class":128},[118,54775,54776,54779,54781,54783,54785],{"class":120,"line":1702},[118,54777,54778],{"class":177},"      height",[118,54780,51430],{"class":128},[118,54782,1543],{"class":177},[118,54784,51485],{"class":124},[118,54786,1294],{"class":128},[118,54788,54789,54791,54793,54795,54797,54799],{"class":120,"line":1731},[118,54790,54699],{"class":177},[118,54792,51430],{"class":128},[118,54794,439],{"class":177},[118,54796,51485],{"class":124},[118,54798,51549],{"class":177},[118,54800,1294],{"class":128},[118,54802,54803],{"class":120,"line":1736},[118,54804,2191],{"class":128},[118,54806,54807],{"class":120,"line":1753},[118,54808,2404],{"emptyLinePlaceholder":45},[118,54810,54811,54814],{"class":120,"line":1758},[118,54812,54813],{"class":1967},"    .slider-footer",[118,54815,15577],{"class":128},[118,54817,54818,54820,54822,54825],{"class":120,"line":1763},[118,54819,54752],{"class":177},[118,54821,51430],{"class":128},[118,54823,54824],{"class":177},"absolute",[118,54826,1294],{"class":128},[118,54828,54829,54832,54834,54836],{"class":120,"line":1768},[118,54830,54831],{"class":177},"      left",[118,54833,51430],{"class":128},[118,54835,320],{"class":177},[118,54837,1294],{"class":128},[118,54839,54840,54843,54845,54847],{"class":120,"line":1782},[118,54841,54842],{"class":177},"      bottom",[118,54844,51430],{"class":128},[118,54846,320],{"class":177},[118,54848,1294],{"class":128},[118,54850,54851,54853,54855,54857,54859],{"class":120,"line":1787},[118,54852,54764],{"class":177},[118,54854,51430],{"class":128},[118,54856,439],{"class":177},[118,54858,456],{"class":124},[118,54860,1294],{"class":128},[118,54862,54863,54865,54867,54869,54871],{"class":120,"line":2581},[118,54864,54778],{"class":177},[118,54866,51430],{"class":128},[118,54868,703],{"class":177},[118,54870,456],{"class":124},[118,54872,1294],{"class":128},[118,54874,54875,54878,54880,54883],{"class":120,"line":2595},[118,54876,54877],{"class":177},"      background-color",[118,54879,51430],{"class":128},[118,54881,54882],{"class":177},"skyblue",[118,54884,1294],{"class":128},[118,54886,54887],{"class":120,"line":2603},[118,54888,2191],{"class":128},[118,54890,54891],{"class":120,"line":2608},[118,54892,2404],{"emptyLinePlaceholder":45},[118,54894,54895,54897,54899],{"class":120,"line":2614},[118,54896,54813],{"class":1967},[118,54898,6830],{"class":51293},[118,54900,15577],{"class":128},[118,54902,54903,54905,54907,54909],{"class":120,"line":2620},[118,54904,54752],{"class":177},[118,54906,51430],{"class":128},[118,54908,54824],{"class":177},[118,54910,1294],{"class":128},[118,54912,54913,54916,54918,54920,54922],{"class":120,"line":2625},[118,54914,54915],{"class":177},"      font-size",[118,54917,51430],{"class":128},[118,54919,1029],{"class":177},[118,54921,51485],{"class":124},[118,54923,1294],{"class":128},[118,54925,54926,54928,54930,54932,54934],{"class":120,"line":7953},[118,54927,54831],{"class":177},[118,54929,51430],{"class":128},[118,54931,828],{"class":177},[118,54933,51485],{"class":124},[118,54935,1294],{"class":128},[118,54937,54938,54941,54943,54945,54947],{"class":120,"line":7977},[118,54939,54940],{"class":177},"      top",[118,54942,51430],{"class":128},[118,54944,447],{"class":177},[118,54946,51485],{"class":124},[118,54948,1294],{"class":128},[118,54950,54951],{"class":120,"line":7982},[118,54952,2191],{"class":128},[118,54954,54955],{"class":120,"line":7988},[118,54956,2404],{"emptyLinePlaceholder":45},[118,54958,54959,54962],{"class":120,"line":8015},[118,54960,54961],{"class":51293},"    ul",[118,54963,15577],{"class":128},[118,54965,54966,54968,54970,54972],{"class":120,"line":8020},[118,54967,54752],{"class":177},[118,54969,51430],{"class":128},[118,54971,54824],{"class":177},[118,54973,1294],{"class":128},[118,54975,54976,54978,54980,54982,54984],{"class":120,"line":8026},[118,54977,54940],{"class":177},[118,54979,51430],{"class":128},[118,54981,909],{"class":177},[118,54983,51485],{"class":124},[118,54985,1294],{"class":128},[118,54987,54988,54990,54992,54994,54996],{"class":120,"line":8038},[118,54989,54831],{"class":177},[118,54991,51430],{"class":128},[118,54993,828],{"class":177},[118,54995,51485],{"class":124},[118,54997,1294],{"class":128},[118,54999,55000,55003,55005,55007],{"class":120,"line":8050},[118,55001,55002],{"class":177},"      display",[118,55004,51430],{"class":128},[118,55006,51470],{"class":177},[118,55008,1294],{"class":128},[118,55010,55011,55014,55016,55018],{"class":120,"line":8062},[118,55012,55013],{"class":177},"      justify-content",[118,55015,51430],{"class":128},[118,55017,51661],{"class":177},[118,55019,1294],{"class":128},[118,55021,55022,55024,55026,55028],{"class":120,"line":9721},[118,55023,54752],{"class":177},[118,55025,51430],{"class":128},[118,55027,54824],{"class":177},[118,55029,1294],{"class":128},[118,55031,55032,55034,55036,55038,55040],{"class":120,"line":9746},[118,55033,54764],{"class":177},[118,55035,51430],{"class":128},[118,55037,3996],{"class":177},[118,55039,51485],{"class":124},[118,55041,1294],{"class":128},[118,55043,55044,55046,55048,55050,55052],{"class":120,"line":9769},[118,55045,54778],{"class":177},[118,55047,51430],{"class":128},[118,55049,828],{"class":177},[118,55051,51485],{"class":124},[118,55053,1294],{"class":128},[118,55055,55056],{"class":120,"line":9793},[118,55057,2191],{"class":128},[118,55059,55060],{"class":120,"line":9798},[118,55061,2404],{"emptyLinePlaceholder":45},[118,55063,55064,55066,55069],{"class":120,"line":9803},[118,55065,54961],{"class":51293},[118,55067,55068],{"class":51293}," li",[118,55070,15577],{"class":128},[118,55072,55073,55075,55077,55079,55081],{"class":120,"line":9808},[118,55074,54764],{"class":177},[118,55076,51430],{"class":128},[118,55078,828],{"class":177},[118,55080,51485],{"class":124},[118,55082,1294],{"class":128},[118,55084,55085,55087,55089,55091,55093],{"class":120,"line":9817},[118,55086,54778],{"class":177},[118,55088,51430],{"class":128},[118,55090,828],{"class":177},[118,55092,51485],{"class":124},[118,55094,1294],{"class":128},[118,55096,55097,55099,55101,55104,55106,55108,55110,55112,55114,55116,55118,55121],{"class":120,"line":9822},[118,55098,54877],{"class":177},[118,55100,51430],{"class":128},[118,55102,55103],{"class":177},"rgba",[118,55105,129],{"class":128},[118,55107,320],{"class":177},[118,55109,12440],{"class":128},[118,55111,320],{"class":177},[118,55113,12440],{"class":128},[118,55115,320],{"class":177},[118,55117,12440],{"class":128},[118,55119,55120],{"class":177},".4",[118,55122,2723],{"class":128},[118,55124,55125,55128,55130,55132,55134],{"class":120,"line":9828},[118,55126,55127],{"class":177},"      border-radius",[118,55129,51430],{"class":128},[118,55131,574],{"class":177},[118,55133,51485],{"class":124},[118,55135,1294],{"class":128},[118,55137,55138],{"class":120,"line":9849},[118,55139,2191],{"class":128},[118,55141,55142],{"class":120,"line":9855},[118,55143,2404],{"emptyLinePlaceholder":45},[118,55145,55146,55149],{"class":120,"line":9869},[118,55147,55148],{"class":1967},"    .activate",[118,55150,15577],{"class":128},[118,55152,55153,55155,55157,55160],{"class":120,"line":9875},[118,55154,54877],{"class":177},[118,55156,51430],{"class":128},[118,55158,55159],{"class":177},"#f7f7f7",[118,55161,1294],{"class":128},[118,55163,55164],{"class":120,"line":9902},[118,55165,2191],{"class":128},[118,55167,55168,55170,55172],{"class":120,"line":9911},[118,55169,52410],{"class":128},[118,55171,5131],{"class":51293},[118,55173,51300],{"class":128},[118,55175,55176,55178,55180],{"class":120,"line":9917},[118,55177,51778],{"class":128},[118,55179,51327],{"class":51293},[118,55181,51300],{"class":128},[118,55183,55184],{"class":120,"line":9925},[118,55185,2404],{"emptyLinePlaceholder":45},[118,55187,55188,55190,55192],{"class":120,"line":9930},[118,55189,1038],{"class":128},[118,55191,51793],{"class":51293},[118,55193,51300],{"class":128},[118,55195,55196,55198,55200,55202,55204,55206],{"class":120,"line":16609},[118,55197,52137],{"class":128},[118,55199,51604],{"class":51293},[118,55201,53479],{"class":1967},[118,55203,174],{"class":128},[118,55205,53484],{"class":233},[118,55207,51300],{"class":128},[118,55209,55210,55212,55214,55216,55218,55221],{"class":120,"line":16615},[118,55211,51334],{"class":128},[118,55213,51604],{"class":51293},[118,55215,53479],{"class":1967},[118,55217,174],{"class":128},[118,55219,55220],{"class":233},"\"slider-wrapper\"",[118,55222,51300],{"class":128},[118,55224,55225,55228,55230,55233,55235,55238,55241,55243,55245],{"class":120,"line":16638},[118,55226,55227],{"class":128},"      \u003C",[118,55229,1466],{"class":51293},[118,55231,55232],{"class":1967}," src",[118,55234,174],{"class":128},[118,55236,55237],{"class":233},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[118,55239,55240],{"class":1967}," alt",[118,55242,174],{"class":128},[118,55244,7657],{"class":233},[118,55246,51300],{"class":128},[118,55248,55249,55251,55253],{"class":120,"line":16644},[118,55250,51769],{"class":128},[118,55252,51604],{"class":51293},[118,55254,51300],{"class":128},[118,55256,55257,55259,55261,55263,55265,55268],{"class":120,"line":16667},[118,55258,51334],{"class":128},[118,55260,51604],{"class":51293},[118,55262,53479],{"class":1967},[118,55264,174],{"class":128},[118,55266,55267],{"class":233},"\"slider-footer\"",[118,55269,51300],{"class":128},[118,55271,55272,55274,55276,55279,55281],{"class":120,"line":16681},[118,55273,55227],{"class":128},[118,55275,15],{"class":51293},[118,55277,55278],{"class":128},">对人类来说会不会太超前了?\u003C\u002F",[118,55280,15],{"class":51293},[118,55282,51300],{"class":128},[118,55284,55285,55287,55289],{"class":120,"line":16701},[118,55286,55227],{"class":128},[118,55288,1135],{"class":51293},[118,55290,51300],{"class":128},[118,55292,55293,55296,55298,55300,55302,55305,55308,55310],{"class":120,"line":16707},[118,55294,55295],{"class":128},"        \u003C",[118,55297,75],{"class":51293},[118,55299,53479],{"class":1967},[118,55301,174],{"class":128},[118,55303,55304],{"class":233},"\"activate\"",[118,55306,55307],{"class":128},">\u003C\u002F",[118,55309,75],{"class":51293},[118,55311,51300],{"class":128},[118,55313,55314,55316,55318,55320,55322],{"class":120,"line":16718},[118,55315,55295],{"class":128},[118,55317,75],{"class":51293},[118,55319,55307],{"class":128},[118,55321,75],{"class":51293},[118,55323,51300],{"class":128},[118,55325,55326,55328,55330,55332,55334],{"class":120,"line":16741},[118,55327,55295],{"class":128},[118,55329,75],{"class":51293},[118,55331,55307],{"class":128},[118,55333,75],{"class":51293},[118,55335,51300],{"class":128},[118,55337,55338,55340,55342,55344,55346],{"class":120,"line":16763},[118,55339,55295],{"class":128},[118,55341,75],{"class":51293},[118,55343,55307],{"class":128},[118,55345,75],{"class":51293},[118,55347,51300],{"class":128},[118,55349,55350,55352,55354,55356,55358],{"class":120,"line":16768},[118,55351,55295],{"class":128},[118,55353,75],{"class":51293},[118,55355,55307],{"class":128},[118,55357,75],{"class":51293},[118,55359,51300],{"class":128},[118,55361,55362,55364,55366,55368,55370],{"class":120,"line":16774},[118,55363,55295],{"class":128},[118,55365,75],{"class":51293},[118,55367,55307],{"class":128},[118,55369,75],{"class":51293},[118,55371,51300],{"class":128},[118,55373,55374,55376,55378,55380,55382],{"class":120,"line":16788},[118,55375,55295],{"class":128},[118,55377,75],{"class":51293},[118,55379,55307],{"class":128},[118,55381,75],{"class":51293},[118,55383,51300],{"class":128},[118,55385,55386,55388,55390,55392,55394],{"class":120,"line":16801},[118,55387,55295],{"class":128},[118,55389,75],{"class":51293},[118,55391,55307],{"class":128},[118,55393,75],{"class":51293},[118,55395,51300],{"class":128},[118,55397,55398,55401,55403],{"class":120,"line":16806},[118,55399,55400],{"class":128},"      \u003C\u002F",[118,55402,1135],{"class":51293},[118,55404,51300],{"class":128},[118,55406,55407,55409,55411],{"class":120,"line":16820},[118,55408,51769],{"class":128},[118,55410,51604],{"class":51293},[118,55412,51300],{"class":128},[118,55414,55415,55417,55419],{"class":120,"line":16825},[118,55416,52410],{"class":128},[118,55418,51604],{"class":51293},[118,55420,51300],{"class":128},[118,55422,55423,55425,55427],{"class":120,"line":16831},[118,55424,52137],{"class":128},[118,55426,51806],{"class":51293},[118,55428,51300],{"class":128},[118,55430,55431,55433,55436,55438],{"class":120,"line":16836},[118,55432,11226],{"class":124},[118,55434,55435],{"class":177}," arrImage",[118,55437,13569],{"class":124},[118,55439,55440],{"class":128}," [\n",[118,55442,55443,55446,55449,55452,55455,55458,55461],{"class":120,"line":16850},[118,55444,55445],{"class":128},"      { url: ",[118,55447,55448],{"class":233},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[118,55450,55451],{"class":128},", title: ",[118,55453,55454],{"class":233},"'对人类来说会不会太超前了?'",[118,55456,55457],{"class":128},", color: ",[118,55459,55460],{"class":233},"'rgba(100,67,68)'",[118,55462,55463],{"class":128}," },\n",[118,55465,55466,55468,55471,55473,55476,55478,55481],{"class":120,"line":16855},[118,55467,55445],{"class":128},[118,55469,55470],{"class":233},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[118,55472,55451],{"class":128},[118,55474,55475],{"class":233},"'开启剑与雪的黑暗传说!'",[118,55477,55457],{"class":128},[118,55479,55480],{"class":233},"'rgba(43,35,26)'",[118,55482,55463],{"class":128},[118,55484,55485,55487,55490,55492,55495,55497,55500],{"class":120,"line":16860},[118,55486,55445],{"class":128},[118,55488,55489],{"class":233},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[118,55491,55451],{"class":128},[118,55493,55494],{"class":233},"'真正的jo厨出现了!'",[118,55496,55457],{"class":128},[118,55498,55499],{"class":233},"'rgba(36,31,33)'",[118,55501,55463],{"class":128},[118,55503,55504,55506,55509,55511,55514,55516,55519],{"class":120,"line":16874},[118,55505,55445],{"class":128},[118,55507,55508],{"class":233},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[118,55510,55451],{"class":128},[118,55512,55513],{"class":233},"'李玉刚:让世界通过b站看到东方大国文化'",[118,55515,55457],{"class":128},[118,55517,55518],{"class":233},"'rgba(139,98,66)'",[118,55520,55463],{"class":128},[118,55522,55523,55525,55528,55530,55533,55535,55538],{"class":120,"line":16886},[118,55524,55445],{"class":128},[118,55526,55527],{"class":233},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[118,55529,55451],{"class":128},[118,55531,55532],{"class":233},"'快来分享你的寒假日常吧'",[118,55534,55457],{"class":128},[118,55536,55537],{"class":233},"'rgba(67,90,92)'",[118,55539,55463],{"class":128},[118,55541,55542,55544,55547,55549,55552,55554,55557],{"class":120,"line":16891},[118,55543,55445],{"class":128},[118,55545,55546],{"class":233},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[118,55548,55451],{"class":128},[118,55550,55551],{"class":233},"'哔哩哔哩小年YEAR'",[118,55553,55457],{"class":128},[118,55555,55556],{"class":233},"'rgba(166,131,143)'",[118,55558,55463],{"class":128},[118,55560,55561,55563,55566,55568,55571,55573,55576],{"class":120,"line":16904},[118,55562,55445],{"class":128},[118,55564,55565],{"class":233},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[118,55567,55451],{"class":128},[118,55569,55570],{"class":233},"'一站式解决你的电脑配置问题'",[118,55572,55457],{"class":128},[118,55574,55575],{"class":233},"'rgba(53,29,25)'",[118,55577,55463],{"class":128},[118,55579,55580,55582,55585,55587,55590,55592,55595],{"class":120,"line":16909},[118,55581,55445],{"class":128},[118,55583,55584],{"class":233},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[118,55586,55451],{"class":128},[118,55588,55589],{"class":233},"'谁不想和小猫咪贴贴呢?'",[118,55591,55457],{"class":128},[118,55593,55594],{"class":233},"'rgba(99,72,114)'",[118,55596,55597],{"class":128}," }\n",[118,55599,55600],{"class":120,"line":16914},[118,55601,53102],{"class":128},[118,55603,55604,55606,55609,55611,55613,55615,55617,55620],{"class":120,"line":16919},[118,55605,11226],{"class":124},[118,55607,55608],{"class":177}," img",[118,55610,13569],{"class":124},[118,55612,54389],{"class":128},[118,55614,54392],{"class":1967},[118,55616,129],{"class":128},[118,55618,55619],{"class":233},"'.slider-wrapper img'",[118,55621,135],{"class":128},[118,55623,55624,55626,55628,55630,55632,55634,55636,55639],{"class":120,"line":16932},[118,55625,11226],{"class":124},[118,55627,6830],{"class":177},[118,55629,13569],{"class":124},[118,55631,54389],{"class":128},[118,55633,54392],{"class":1967},[118,55635,129],{"class":128},[118,55637,55638],{"class":233},"'.slider-footer p'",[118,55640,135],{"class":128},[118,55642,55643,55645,55648,55650,55652,55654,55656,55659],{"class":120,"line":16937},[118,55644,11226],{"class":124},[118,55646,55647],{"class":177}," color",[118,55649,13569],{"class":124},[118,55651,54389],{"class":128},[118,55653,54392],{"class":1967},[118,55655,129],{"class":128},[118,55657,55658],{"class":233},"'.slider-footer'",[118,55660,135],{"class":128},[118,55662,55663,55665,55668,55670,55672,55675,55677,55680],{"class":120,"line":32626},[118,55664,11226],{"class":124},[118,55666,55667],{"class":177}," lis",[118,55669,13569],{"class":124},[118,55671,54389],{"class":128},[118,55673,55674],{"class":1967},"querySelectorAll",[118,55676,129],{"class":128},[118,55678,55679],{"class":233},"'.slider-footer ul li'",[118,55681,135],{"class":128},[118,55683,55684,55686,55688,55690],{"class":120,"line":32632},[118,55685,52212],{"class":124},[118,55687,9443],{"class":128},[118,55689,174],{"class":124},[118,55691,55692],{"class":177}," 1\n",[118,55694,55695,55697,55700,55702,55704,55706,55708],{"class":120,"line":32638},[118,55696,52212],{"class":124},[118,55698,55699],{"class":128}," timer ",[118,55701,174],{"class":124},[118,55703,54437],{"class":1967},[118,55705,129],{"class":128},[118,55707,54442],{"class":124},[118,55709,54445],{"class":128},[118,55711,55712,55715,55717],{"class":120,"line":32644},[118,55713,55714],{"class":128},"      img.src ",[118,55716,174],{"class":124},[118,55718,55719],{"class":128}," arrImage[i].url\n",[118,55721,55722,55725,55727],{"class":120,"line":32650},[118,55723,55724],{"class":128},"      p.innerHTML ",[118,55726,174],{"class":124},[118,55728,55729],{"class":128}," arrImage[i].title\n",[118,55731,55732,55735,55737],{"class":120,"line":32661},[118,55733,55734],{"class":128},"      color.style.backgroundColor ",[118,55736,174],{"class":124},[118,55738,55739],{"class":128}," arrImage[i].color\n",[118,55741,55742],{"class":120,"line":32667},[118,55743,55744],{"class":187},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[118,55746,55747],{"class":120,"line":32687},[118,55748,55749],{"class":187},"      \u002F\u002F li.classList.add('activate')\n",[118,55751,55752],{"class":120,"line":32693},[118,55753,55754],{"class":187},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[118,55756,55757],{"class":120,"line":32704},[118,55758,55759],{"class":187},"      \u002F\u002F lis[i].classList.remove('activate')\n",[118,55761,55762,55765,55767,55769,55772,55775,55778,55780,55783],{"class":120,"line":32710},[118,55763,55764],{"class":128},"      document.",[118,55766,54392],{"class":1967},[118,55768,129],{"class":128},[118,55770,55771],{"class":233},"'.activate'",[118,55773,55774],{"class":128},")?.classList.",[118,55776,55777],{"class":1967},"toggle",[118,55779,129],{"class":128},[118,55781,55782],{"class":233},"'activate'",[118,55784,135],{"class":128},[118,55786,55787,55790,55792,55794,55796],{"class":120,"line":32716},[118,55788,55789],{"class":128},"      lis[i].classList.",[118,55791,5339],{"class":1967},[118,55793,129],{"class":128},[118,55795,55782],{"class":233},[118,55797,135],{"class":128},[118,55799,55800],{"class":120,"line":32722},[118,55801,2404],{"emptyLinePlaceholder":45},[118,55803,55804,55807,55809,55811,55813,55815,55817,55819,55822],{"class":120,"line":32728},[118,55805,55806],{"class":128},"      i ",[118,55808,174],{"class":124},[118,55810,54476],{"class":128},[118,55812,609],{"class":124},[118,55814,25123],{"class":177},[118,55816,13719],{"class":128},[118,55818,456],{"class":124},[118,55820,55821],{"class":128}," arrImage.",[118,55823,55824],{"class":177},"length\n",[118,55826,55827],{"class":120,"line":32734},[118,55828,2404],{"emptyLinePlaceholder":45},[118,55830,55831,55833,55835],{"class":120,"line":32740},[118,55832,54528],{"class":128},[118,55834,6415],{"class":177},[118,55836,135],{"class":128},[118,55838,55839,55841,55843],{"class":120,"line":32746},[118,55840,52410],{"class":128},[118,55842,51806],{"class":51293},[118,55844,51300],{"class":128},[118,55846,55847,55849,55851],{"class":120,"line":32766},[118,55848,51778],{"class":128},[118,55850,51793],{"class":51293},[118,55852,51300],{"class":128},[118,55854,55855],{"class":120,"line":32772},[118,55856,2404],{"emptyLinePlaceholder":45},[118,55858,55859,55861,55863],{"class":120,"line":32788},[118,55860,51778],{"class":128},[118,55862,50628],{"class":51293},[118,55864,51300],{"class":128},[15,55866,55867],{},[1466,55868],{"alt":39,"src":55869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[15,55871,55872],{},"?.就是短路保护,确保输出正常进行",[15,55874,55875],{},"不要忘记取余%,有时候可以用",[15,55877,55878],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[72,55880,55881],{"start":40},[75,55882,55883],{},"法2",[109,55885,55887],{"className":50626,"code":55886,"language":50628,"meta":39,"style":39},"\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",[115,55888,55889,55899,55913,55917,55925,55939,55959,55971,55979,55985,55995,56005,56009,56013,56019,56029,56033,56037,56043,56053,56065,56077,56091,56095,56099,56105,56115,56125,56135,56147,56159,56169,56173,56177,56185,56195,56207,56219,56231,56235,56239,56245,56255,56267,56279,56289,56299,56309,56321,56333,56337,56341,56349,56361,56373,56399,56411,56415,56419,56425,56435,56439,56447,56455,56459,56467,56481,56495,56515,56523,56537,56549,56557,56575,56587,56599,56611,56623,56635,56647,56659,56667,56675,56683,56691,56702,56718,56734,56750,56766,56782,56798,56814,56830,56834,56839,56857,56875,56885,56890,56895,56906,56912,56927,56936,56940,56945,56954,56959,56968,56973,56978,56983,57006,57036,57040,57048,57052,57060,57068,57072],{"__ignoreMap":39},[118,55890,55891,55893,55895,55897],{"class":120,"line":121},[118,55892,51290],{"class":128},[118,55894,51294],{"class":51293},[118,55896,51297],{"class":1967},[118,55898,51300],{"class":128},[118,55900,55901,55903,55905,55907,55909,55911],{"class":120,"line":40},[118,55902,1038],{"class":128},[118,55904,50628],{"class":51293},[118,55906,51309],{"class":1967},[118,55908,174],{"class":128},[118,55910,51314],{"class":233},[118,55912,51300],{"class":128},[118,55914,55915],{"class":120,"line":1183},[118,55916,2404],{"emptyLinePlaceholder":45},[118,55918,55919,55921,55923],{"class":120,"line":1198},[118,55920,1038],{"class":128},[118,55922,51327],{"class":51293},[118,55924,51300],{"class":128},[118,55926,55927,55929,55931,55933,55935,55937],{"class":120,"line":1204},[118,55928,52137],{"class":128},[118,55930,51337],{"class":51293},[118,55932,51340],{"class":1967},[118,55934,174],{"class":128},[118,55936,51345],{"class":233},[118,55938,51300],{"class":128},[118,55940,55941,55943,55945,55947,55949,55951,55953,55955,55957],{"class":120,"line":1218},[118,55942,52137],{"class":128},[118,55944,51337],{"class":51293},[118,55946,14925],{"class":1967},[118,55948,174],{"class":128},[118,55950,51384],{"class":233},[118,55952,51364],{"class":1967},[118,55954,174],{"class":128},[118,55956,51391],{"class":233},[118,55958,51300],{"class":128},[118,55960,55961,55963,55965,55967,55969],{"class":120,"line":1224},[118,55962,52137],{"class":128},[118,55964,51400],{"class":51293},[118,55966,51403],{"class":128},[118,55968,51400],{"class":51293},[118,55970,51300],{"class":128},[118,55972,55973,55975,55977],{"class":120,"line":1315},[118,55974,52137],{"class":128},[118,55976,5131],{"class":51293},[118,55978,51300],{"class":128},[118,55980,55981,55983],{"class":120,"line":1321},[118,55982,6408],{"class":51293},[118,55984,15577],{"class":128},[118,55986,55987,55989,55991,55993],{"class":120,"line":1333},[118,55988,54688],{"class":177},[118,55990,51430],{"class":128},[118,55992,320],{"class":177},[118,55994,1294],{"class":128},[118,55996,55997,55999,56001,56003],{"class":120,"line":1616},[118,55998,54699],{"class":177},[118,56000,51430],{"class":128},[118,56002,320],{"class":177},[118,56004,1294],{"class":128},[118,56006,56007],{"class":120,"line":1621},[118,56008,2191],{"class":128},[118,56010,56011],{"class":120,"line":1627},[118,56012,2404],{"emptyLinePlaceholder":45},[118,56014,56015,56017],{"class":120,"line":1632},[118,56016,54718],{"class":51293},[118,56018,15577],{"class":128},[118,56020,56021,56023,56025,56027],{"class":120,"line":1646},[118,56022,54725],{"class":177},[118,56024,51430],{"class":128},[118,56026,54730],{"class":177},[118,56028,1294],{"class":128},[118,56030,56031],{"class":120,"line":1651},[118,56032,2191],{"class":128},[118,56034,56035],{"class":120,"line":1657},[118,56036,2404],{"emptyLinePlaceholder":45},[118,56038,56039,56041],{"class":120,"line":1678},[118,56040,54745],{"class":1967},[118,56042,15577],{"class":128},[118,56044,56045,56047,56049,56051],{"class":120,"line":1683},[118,56046,54752],{"class":177},[118,56048,51430],{"class":128},[118,56050,54757],{"class":177},[118,56052,1294],{"class":128},[118,56054,56055,56057,56059,56061,56063],{"class":120,"line":1697},[118,56056,54764],{"class":177},[118,56058,51430],{"class":128},[118,56060,54769],{"class":177},[118,56062,51485],{"class":124},[118,56064,1294],{"class":128},[118,56066,56067,56069,56071,56073,56075],{"class":120,"line":1702},[118,56068,54778],{"class":177},[118,56070,51430],{"class":128},[118,56072,1543],{"class":177},[118,56074,51485],{"class":124},[118,56076,1294],{"class":128},[118,56078,56079,56081,56083,56085,56087,56089],{"class":120,"line":1731},[118,56080,54699],{"class":177},[118,56082,51430],{"class":128},[118,56084,439],{"class":177},[118,56086,51485],{"class":124},[118,56088,51549],{"class":177},[118,56090,1294],{"class":128},[118,56092,56093],{"class":120,"line":1736},[118,56094,2191],{"class":128},[118,56096,56097],{"class":120,"line":1753},[118,56098,2404],{"emptyLinePlaceholder":45},[118,56100,56101,56103],{"class":120,"line":1758},[118,56102,54813],{"class":1967},[118,56104,15577],{"class":128},[118,56106,56107,56109,56111,56113],{"class":120,"line":1763},[118,56108,54752],{"class":177},[118,56110,51430],{"class":128},[118,56112,54824],{"class":177},[118,56114,1294],{"class":128},[118,56116,56117,56119,56121,56123],{"class":120,"line":1768},[118,56118,54831],{"class":177},[118,56120,51430],{"class":128},[118,56122,320],{"class":177},[118,56124,1294],{"class":128},[118,56126,56127,56129,56131,56133],{"class":120,"line":1782},[118,56128,54842],{"class":177},[118,56130,51430],{"class":128},[118,56132,320],{"class":177},[118,56134,1294],{"class":128},[118,56136,56137,56139,56141,56143,56145],{"class":120,"line":1787},[118,56138,54764],{"class":177},[118,56140,51430],{"class":128},[118,56142,439],{"class":177},[118,56144,456],{"class":124},[118,56146,1294],{"class":128},[118,56148,56149,56151,56153,56155,56157],{"class":120,"line":2581},[118,56150,54778],{"class":177},[118,56152,51430],{"class":128},[118,56154,703],{"class":177},[118,56156,456],{"class":124},[118,56158,1294],{"class":128},[118,56160,56161,56163,56165,56167],{"class":120,"line":2595},[118,56162,54877],{"class":177},[118,56164,51430],{"class":128},[118,56166,54882],{"class":177},[118,56168,1294],{"class":128},[118,56170,56171],{"class":120,"line":2603},[118,56172,2191],{"class":128},[118,56174,56175],{"class":120,"line":2608},[118,56176,2404],{"emptyLinePlaceholder":45},[118,56178,56179,56181,56183],{"class":120,"line":2614},[118,56180,54813],{"class":1967},[118,56182,6830],{"class":51293},[118,56184,15577],{"class":128},[118,56186,56187,56189,56191,56193],{"class":120,"line":2620},[118,56188,54752],{"class":177},[118,56190,51430],{"class":128},[118,56192,54824],{"class":177},[118,56194,1294],{"class":128},[118,56196,56197,56199,56201,56203,56205],{"class":120,"line":2625},[118,56198,54915],{"class":177},[118,56200,51430],{"class":128},[118,56202,1029],{"class":177},[118,56204,51485],{"class":124},[118,56206,1294],{"class":128},[118,56208,56209,56211,56213,56215,56217],{"class":120,"line":7953},[118,56210,54831],{"class":177},[118,56212,51430],{"class":128},[118,56214,828],{"class":177},[118,56216,51485],{"class":124},[118,56218,1294],{"class":128},[118,56220,56221,56223,56225,56227,56229],{"class":120,"line":7977},[118,56222,54940],{"class":177},[118,56224,51430],{"class":128},[118,56226,447],{"class":177},[118,56228,51485],{"class":124},[118,56230,1294],{"class":128},[118,56232,56233],{"class":120,"line":7982},[118,56234,2191],{"class":128},[118,56236,56237],{"class":120,"line":7988},[118,56238,2404],{"emptyLinePlaceholder":45},[118,56240,56241,56243],{"class":120,"line":8015},[118,56242,54961],{"class":51293},[118,56244,15577],{"class":128},[118,56246,56247,56249,56251,56253],{"class":120,"line":8020},[118,56248,54752],{"class":177},[118,56250,51430],{"class":128},[118,56252,54824],{"class":177},[118,56254,1294],{"class":128},[118,56256,56257,56259,56261,56263,56265],{"class":120,"line":8026},[118,56258,54940],{"class":177},[118,56260,51430],{"class":128},[118,56262,909],{"class":177},[118,56264,51485],{"class":124},[118,56266,1294],{"class":128},[118,56268,56269,56271,56273,56275,56277],{"class":120,"line":8038},[118,56270,54831],{"class":177},[118,56272,51430],{"class":128},[118,56274,828],{"class":177},[118,56276,51485],{"class":124},[118,56278,1294],{"class":128},[118,56280,56281,56283,56285,56287],{"class":120,"line":8050},[118,56282,55002],{"class":177},[118,56284,51430],{"class":128},[118,56286,51470],{"class":177},[118,56288,1294],{"class":128},[118,56290,56291,56293,56295,56297],{"class":120,"line":8062},[118,56292,55013],{"class":177},[118,56294,51430],{"class":128},[118,56296,51661],{"class":177},[118,56298,1294],{"class":128},[118,56300,56301,56303,56305,56307],{"class":120,"line":9721},[118,56302,54752],{"class":177},[118,56304,51430],{"class":128},[118,56306,54824],{"class":177},[118,56308,1294],{"class":128},[118,56310,56311,56313,56315,56317,56319],{"class":120,"line":9746},[118,56312,54764],{"class":177},[118,56314,51430],{"class":128},[118,56316,3996],{"class":177},[118,56318,51485],{"class":124},[118,56320,1294],{"class":128},[118,56322,56323,56325,56327,56329,56331],{"class":120,"line":9769},[118,56324,54778],{"class":177},[118,56326,51430],{"class":128},[118,56328,828],{"class":177},[118,56330,51485],{"class":124},[118,56332,1294],{"class":128},[118,56334,56335],{"class":120,"line":9793},[118,56336,2191],{"class":128},[118,56338,56339],{"class":120,"line":9798},[118,56340,2404],{"emptyLinePlaceholder":45},[118,56342,56343,56345,56347],{"class":120,"line":9803},[118,56344,54961],{"class":51293},[118,56346,55068],{"class":51293},[118,56348,15577],{"class":128},[118,56350,56351,56353,56355,56357,56359],{"class":120,"line":9808},[118,56352,54764],{"class":177},[118,56354,51430],{"class":128},[118,56356,828],{"class":177},[118,56358,51485],{"class":124},[118,56360,1294],{"class":128},[118,56362,56363,56365,56367,56369,56371],{"class":120,"line":9817},[118,56364,54778],{"class":177},[118,56366,51430],{"class":128},[118,56368,828],{"class":177},[118,56370,51485],{"class":124},[118,56372,1294],{"class":128},[118,56374,56375,56377,56379,56381,56383,56385,56387,56389,56391,56393,56395,56397],{"class":120,"line":9822},[118,56376,54877],{"class":177},[118,56378,51430],{"class":128},[118,56380,55103],{"class":177},[118,56382,129],{"class":128},[118,56384,320],{"class":177},[118,56386,12440],{"class":128},[118,56388,320],{"class":177},[118,56390,12440],{"class":128},[118,56392,320],{"class":177},[118,56394,12440],{"class":128},[118,56396,55120],{"class":177},[118,56398,2723],{"class":128},[118,56400,56401,56403,56405,56407,56409],{"class":120,"line":9828},[118,56402,55127],{"class":177},[118,56404,51430],{"class":128},[118,56406,574],{"class":177},[118,56408,51485],{"class":124},[118,56410,1294],{"class":128},[118,56412,56413],{"class":120,"line":9849},[118,56414,2191],{"class":128},[118,56416,56417],{"class":120,"line":9855},[118,56418,2404],{"emptyLinePlaceholder":45},[118,56420,56421,56423],{"class":120,"line":9869},[118,56422,55148],{"class":1967},[118,56424,15577],{"class":128},[118,56426,56427,56429,56431,56433],{"class":120,"line":9875},[118,56428,54877],{"class":177},[118,56430,51430],{"class":128},[118,56432,55159],{"class":177},[118,56434,1294],{"class":128},[118,56436,56437],{"class":120,"line":9902},[118,56438,2191],{"class":128},[118,56440,56441,56443,56445],{"class":120,"line":9911},[118,56442,52410],{"class":128},[118,56444,5131],{"class":51293},[118,56446,51300],{"class":128},[118,56448,56449,56451,56453],{"class":120,"line":9917},[118,56450,51778],{"class":128},[118,56452,51327],{"class":51293},[118,56454,51300],{"class":128},[118,56456,56457],{"class":120,"line":9925},[118,56458,2404],{"emptyLinePlaceholder":45},[118,56460,56461,56463,56465],{"class":120,"line":9930},[118,56462,1038],{"class":128},[118,56464,51793],{"class":51293},[118,56466,51300],{"class":128},[118,56468,56469,56471,56473,56475,56477,56479],{"class":120,"line":16609},[118,56470,52137],{"class":128},[118,56472,51604],{"class":51293},[118,56474,53479],{"class":1967},[118,56476,174],{"class":128},[118,56478,53484],{"class":233},[118,56480,51300],{"class":128},[118,56482,56483,56485,56487,56489,56491,56493],{"class":120,"line":16615},[118,56484,51334],{"class":128},[118,56486,51604],{"class":51293},[118,56488,53479],{"class":1967},[118,56490,174],{"class":128},[118,56492,55220],{"class":233},[118,56494,51300],{"class":128},[118,56496,56497,56499,56501,56503,56505,56507,56509,56511,56513],{"class":120,"line":16638},[118,56498,55227],{"class":128},[118,56500,1466],{"class":51293},[118,56502,55232],{"class":1967},[118,56504,174],{"class":128},[118,56506,55237],{"class":233},[118,56508,55240],{"class":1967},[118,56510,174],{"class":128},[118,56512,7657],{"class":233},[118,56514,51300],{"class":128},[118,56516,56517,56519,56521],{"class":120,"line":16644},[118,56518,51769],{"class":128},[118,56520,51604],{"class":51293},[118,56522,51300],{"class":128},[118,56524,56525,56527,56529,56531,56533,56535],{"class":120,"line":16667},[118,56526,51334],{"class":128},[118,56528,51604],{"class":51293},[118,56530,53479],{"class":1967},[118,56532,174],{"class":128},[118,56534,55267],{"class":233},[118,56536,51300],{"class":128},[118,56538,56539,56541,56543,56545,56547],{"class":120,"line":16681},[118,56540,55227],{"class":128},[118,56542,15],{"class":51293},[118,56544,55278],{"class":128},[118,56546,15],{"class":51293},[118,56548,51300],{"class":128},[118,56550,56551,56553,56555],{"class":120,"line":16701},[118,56552,55227],{"class":128},[118,56554,1135],{"class":51293},[118,56556,51300],{"class":128},[118,56558,56559,56561,56563,56565,56567,56569,56571,56573],{"class":120,"line":16707},[118,56560,55295],{"class":128},[118,56562,75],{"class":51293},[118,56564,53479],{"class":1967},[118,56566,174],{"class":128},[118,56568,55304],{"class":233},[118,56570,55307],{"class":128},[118,56572,75],{"class":51293},[118,56574,51300],{"class":128},[118,56576,56577,56579,56581,56583,56585],{"class":120,"line":16718},[118,56578,55295],{"class":128},[118,56580,75],{"class":51293},[118,56582,55307],{"class":128},[118,56584,75],{"class":51293},[118,56586,51300],{"class":128},[118,56588,56589,56591,56593,56595,56597],{"class":120,"line":16741},[118,56590,55295],{"class":128},[118,56592,75],{"class":51293},[118,56594,55307],{"class":128},[118,56596,75],{"class":51293},[118,56598,51300],{"class":128},[118,56600,56601,56603,56605,56607,56609],{"class":120,"line":16763},[118,56602,55295],{"class":128},[118,56604,75],{"class":51293},[118,56606,55307],{"class":128},[118,56608,75],{"class":51293},[118,56610,51300],{"class":128},[118,56612,56613,56615,56617,56619,56621],{"class":120,"line":16768},[118,56614,55295],{"class":128},[118,56616,75],{"class":51293},[118,56618,55307],{"class":128},[118,56620,75],{"class":51293},[118,56622,51300],{"class":128},[118,56624,56625,56627,56629,56631,56633],{"class":120,"line":16774},[118,56626,55295],{"class":128},[118,56628,75],{"class":51293},[118,56630,55307],{"class":128},[118,56632,75],{"class":51293},[118,56634,51300],{"class":128},[118,56636,56637,56639,56641,56643,56645],{"class":120,"line":16788},[118,56638,55295],{"class":128},[118,56640,75],{"class":51293},[118,56642,55307],{"class":128},[118,56644,75],{"class":51293},[118,56646,51300],{"class":128},[118,56648,56649,56651,56653,56655,56657],{"class":120,"line":16801},[118,56650,55295],{"class":128},[118,56652,75],{"class":51293},[118,56654,55307],{"class":128},[118,56656,75],{"class":51293},[118,56658,51300],{"class":128},[118,56660,56661,56663,56665],{"class":120,"line":16806},[118,56662,55400],{"class":128},[118,56664,1135],{"class":51293},[118,56666,51300],{"class":128},[118,56668,56669,56671,56673],{"class":120,"line":16820},[118,56670,51769],{"class":128},[118,56672,51604],{"class":51293},[118,56674,51300],{"class":128},[118,56676,56677,56679,56681],{"class":120,"line":16825},[118,56678,52410],{"class":128},[118,56680,51604],{"class":51293},[118,56682,51300],{"class":128},[118,56684,56685,56687,56689],{"class":120,"line":16831},[118,56686,52137],{"class":128},[118,56688,51806],{"class":51293},[118,56690,51300],{"class":128},[118,56692,56693,56695,56698,56700],{"class":120,"line":16836},[118,56694,11226],{"class":124},[118,56696,56697],{"class":177}," sliderData",[118,56699,13569],{"class":124},[118,56701,55440],{"class":128},[118,56703,56704,56706,56708,56710,56712,56714,56716],{"class":120,"line":16850},[118,56705,55445],{"class":128},[118,56707,55448],{"class":233},[118,56709,55451],{"class":128},[118,56711,55454],{"class":233},[118,56713,55457],{"class":128},[118,56715,55460],{"class":233},[118,56717,55463],{"class":128},[118,56719,56720,56722,56724,56726,56728,56730,56732],{"class":120,"line":16855},[118,56721,55445],{"class":128},[118,56723,55470],{"class":233},[118,56725,55451],{"class":128},[118,56727,55475],{"class":233},[118,56729,55457],{"class":128},[118,56731,55480],{"class":233},[118,56733,55463],{"class":128},[118,56735,56736,56738,56740,56742,56744,56746,56748],{"class":120,"line":16860},[118,56737,55445],{"class":128},[118,56739,55489],{"class":233},[118,56741,55451],{"class":128},[118,56743,55494],{"class":233},[118,56745,55457],{"class":128},[118,56747,55499],{"class":233},[118,56749,55463],{"class":128},[118,56751,56752,56754,56756,56758,56760,56762,56764],{"class":120,"line":16874},[118,56753,55445],{"class":128},[118,56755,55508],{"class":233},[118,56757,55451],{"class":128},[118,56759,55513],{"class":233},[118,56761,55457],{"class":128},[118,56763,55518],{"class":233},[118,56765,55463],{"class":128},[118,56767,56768,56770,56772,56774,56776,56778,56780],{"class":120,"line":16886},[118,56769,55445],{"class":128},[118,56771,55527],{"class":233},[118,56773,55451],{"class":128},[118,56775,55532],{"class":233},[118,56777,55457],{"class":128},[118,56779,55537],{"class":233},[118,56781,55463],{"class":128},[118,56783,56784,56786,56788,56790,56792,56794,56796],{"class":120,"line":16891},[118,56785,55445],{"class":128},[118,56787,55546],{"class":233},[118,56789,55451],{"class":128},[118,56791,55551],{"class":233},[118,56793,55457],{"class":128},[118,56795,55556],{"class":233},[118,56797,55463],{"class":128},[118,56799,56800,56802,56804,56806,56808,56810,56812],{"class":120,"line":16904},[118,56801,55445],{"class":128},[118,56803,55565],{"class":233},[118,56805,55451],{"class":128},[118,56807,55570],{"class":233},[118,56809,55457],{"class":128},[118,56811,55575],{"class":233},[118,56813,55463],{"class":128},[118,56815,56816,56818,56820,56822,56824,56826,56828],{"class":120,"line":16909},[118,56817,55445],{"class":128},[118,56819,55584],{"class":233},[118,56821,55451],{"class":128},[118,56823,55589],{"class":233},[118,56825,55457],{"class":128},[118,56827,55594],{"class":233},[118,56829,55597],{"class":128},[118,56831,56832],{"class":120,"line":16914},[118,56833,53102],{"class":128},[118,56835,56836],{"class":120,"line":16919},[118,56837,56838],{"class":187},"    \u002F\u002F 1.获取元素\n",[118,56840,56841,56843,56845,56847,56849,56851,56853,56855],{"class":120,"line":16932},[118,56842,11226],{"class":124},[118,56844,55608],{"class":177},[118,56846,13569],{"class":124},[118,56848,54389],{"class":128},[118,56850,54392],{"class":1967},[118,56852,129],{"class":128},[118,56854,55619],{"class":233},[118,56856,135],{"class":128},[118,56858,56859,56861,56863,56865,56867,56869,56871,56873],{"class":120,"line":16937},[118,56860,11226],{"class":124},[118,56862,6830],{"class":177},[118,56864,13569],{"class":124},[118,56866,54389],{"class":128},[118,56868,54392],{"class":1967},[118,56870,129],{"class":128},[118,56872,55638],{"class":233},[118,56874,135],{"class":128},[118,56876,56877,56879,56881,56883],{"class":120,"line":32626},[118,56878,52212],{"class":124},[118,56880,9443],{"class":128},[118,56882,174],{"class":124},[118,56884,47326],{"class":177},[118,56886,56887],{"class":120,"line":32632},[118,56888,56889],{"class":187},"    \u002F\u002F 2.开启定时器\n",[118,56891,56892],{"class":120,"line":32638},[118,56893,56894],{"class":187},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[118,56896,56897,56900,56902,56904],{"class":120,"line":32644},[118,56898,56899],{"class":1967},"    setInterval",[118,56901,129],{"class":128},[118,56903,54442],{"class":124},[118,56905,54445],{"class":128},[118,56907,56908,56910],{"class":120,"line":32650},[118,56909,54450],{"class":128},[118,56911,2706],{"class":124},[118,56913,56914,56916,56918,56920,56923,56925],{"class":120,"line":32661},[118,56915,54473],{"class":124},[118,56917,54476],{"class":128},[118,56919,1714],{"class":124},[118,56921,56922],{"class":128}," sliderData.",[118,56924,51961],{"class":177},[118,56926,12447],{"class":128},[118,56928,56929,56932,56934],{"class":120,"line":32667},[118,56930,56931],{"class":128},"        i ",[118,56933,174],{"class":124},[118,56935,47326],{"class":177},[118,56937,56938],{"class":120,"line":32687},[118,56939,52391],{"class":128},[118,56941,56942],{"class":120,"line":32693},[118,56943,56944],{"class":187},"      \u002F\u002F 更换图片路径\n",[118,56946,56947,56949,56951],{"class":120,"line":32704},[118,56948,55714],{"class":128},[118,56950,174],{"class":124},[118,56952,56953],{"class":128}," sliderData[i].url\n",[118,56955,56956],{"class":120,"line":32710},[118,56957,56958],{"class":187},"      \u002F\u002F 把文字写到p里面\n",[118,56960,56961,56963,56965],{"class":120,"line":32716},[118,56962,55724],{"class":128},[118,56964,174],{"class":124},[118,56966,56967],{"class":128}," sliderData[i].title\n",[118,56969,56970],{"class":120,"line":32722},[118,56971,56972],{"class":187},"      \u002F\u002F 小圆点\n",[118,56974,56975],{"class":120,"line":32728},[118,56976,56977],{"class":187},"      \u002F\u002F 先删除以前的active\n",[118,56979,56980],{"class":120,"line":32734},[118,56981,56982],{"class":187},"      \u002F\u002F 只让当前li添加active\n",[118,56984,56985,56987,56989,56991,56994,56997,57000,57002,57004],{"class":120,"line":32740},[118,56986,55764],{"class":128},[118,56988,54392],{"class":1967},[118,56990,129],{"class":128},[118,56992,56993],{"class":233},"'.slider-footer .activate'",[118,56995,56996],{"class":128},").classList.",[118,56998,56999],{"class":1967},"remove",[118,57001,129],{"class":128},[118,57003,55782],{"class":233},[118,57005,135],{"class":128},[118,57007,57008,57010,57012,57014,57017,57019,57021,57023,57026,57028,57030,57032,57034],{"class":120,"line":32746},[118,57009,55764],{"class":128},[118,57011,54392],{"class":1967},[118,57013,129],{"class":128},[118,57015,57016],{"class":233},"`.slider-footer ul li:nth-child(${",[118,57018,569],{"class":128},[118,57020,45559],{"class":124},[118,57022,25123],{"class":177},[118,57024,57025],{"class":233},"})`",[118,57027,56996],{"class":128},[118,57029,5339],{"class":1967},[118,57031,129],{"class":128},[118,57033,55782],{"class":233},[118,57035,135],{"class":128},[118,57037,57038],{"class":120,"line":32766},[118,57039,2404],{"emptyLinePlaceholder":45},[118,57041,57042,57044,57046],{"class":120,"line":32772},[118,57043,54528],{"class":128},[118,57045,6415],{"class":177},[118,57047,135],{"class":128},[118,57049,57050],{"class":120,"line":32788},[118,57051,2404],{"emptyLinePlaceholder":45},[118,57053,57054,57056,57058],{"class":120,"line":32794},[118,57055,52410],{"class":128},[118,57057,51806],{"class":51293},[118,57059,51300],{"class":128},[118,57061,57062,57064,57066],{"class":120,"line":32808},[118,57063,51778],{"class":128},[118,57065,51793],{"class":51293},[118,57067,51300],{"class":128},[118,57069,57070],{"class":120,"line":32814},[118,57071,2404],{"emptyLinePlaceholder":45},[118,57073,57074,57076,57078],{"class":120,"line":32829},[118,57075,51778],{"class":128},[118,57077,50628],{"class":51293},[118,57079,51300],{"class":128},[89,57081,57083],{"id":57082},"_317-重要知识点","3.1.7 重要知识点",[15,57085,57086,57087],{},"浏览器在渲染文本时， ",[278,57088,57089],{},"没有空格或换行符就没有“断行点”",[15,57091,57092],{},[1466,57093],{"alt":39,"src":57094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[15,57096,57097],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[15,57099,57100],{},[1466,57101],{"alt":39,"src":57102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[15,57104,57105],{},[1466,57106],{"alt":39,"src":57107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[60,57109,57111],{"id":57110},"_32-dom事件基础","3.2 DOM事件基础",[89,57113,57115],{"id":57114},"_321-事件监听","3.2.1 事件监听",[15,57117,57118],{},[1466,57119],{"alt":39,"src":57120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[15,57122,57123],{},"事件监听有响应的发生",[15,57125,57126],{},[1466,57127],{"alt":39,"src":57128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[15,57130,57131],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[15,57133,57134],{},"对于有名函数,要执行的函数名后边不要加()",[89,57136,57138],{"id":57137},"_322-随机点名案例","3.2.2 随机点名案例",[109,57140,57142],{"className":50626,"code":57141,"language":50628,"meta":39,"style":39},"\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",[115,57143,57144,57154,57168,57172,57180,57194,57214,57226,57234,57240,57250,57260,57264,57268,57275,57286,57290,57294,57300,57312,57326,57336,57348,57361,57365,57369,57376,57380,57393,57405,57417,57421,57425,57429,57436,57446,57450,57454,57463,57475,57487,57502,57506,57514,57522,57526,57534,57547,57561,57574,57594,57602,57617,57637,57657,57665,57669,57677,57682,57718,57738,57743,57762,57767,57778,57783,57794,57799,57818,57833,57838,57864,57874,57883,57888,57904,57909,57914,57919,57934,57938,57942,57947,57966,57983,57991,57996,58011,58015,58019,58027,58035,58039],{"__ignoreMap":39},[118,57145,57146,57148,57150,57152],{"class":120,"line":121},[118,57147,51290],{"class":128},[118,57149,51294],{"class":51293},[118,57151,51297],{"class":1967},[118,57153,51300],{"class":128},[118,57155,57156,57158,57160,57162,57164,57166],{"class":120,"line":40},[118,57157,1038],{"class":128},[118,57159,50628],{"class":51293},[118,57161,51309],{"class":1967},[118,57163,174],{"class":128},[118,57165,51314],{"class":233},[118,57167,51300],{"class":128},[118,57169,57170],{"class":120,"line":1183},[118,57171,2404],{"emptyLinePlaceholder":45},[118,57173,57174,57176,57178],{"class":120,"line":1198},[118,57175,1038],{"class":128},[118,57177,51327],{"class":51293},[118,57179,51300],{"class":128},[118,57181,57182,57184,57186,57188,57190,57192],{"class":120,"line":1204},[118,57183,52137],{"class":128},[118,57185,51337],{"class":51293},[118,57187,51340],{"class":1967},[118,57189,174],{"class":128},[118,57191,51345],{"class":233},[118,57193,51300],{"class":128},[118,57195,57196,57198,57200,57202,57204,57206,57208,57210,57212],{"class":120,"line":1218},[118,57197,52137],{"class":128},[118,57199,51337],{"class":51293},[118,57201,14925],{"class":1967},[118,57203,174],{"class":128},[118,57205,51384],{"class":233},[118,57207,51364],{"class":1967},[118,57209,174],{"class":128},[118,57211,51391],{"class":233},[118,57213,51300],{"class":128},[118,57215,57216,57218,57220,57222,57224],{"class":120,"line":1224},[118,57217,52137],{"class":128},[118,57219,51400],{"class":51293},[118,57221,51403],{"class":128},[118,57223,51400],{"class":51293},[118,57225,51300],{"class":128},[118,57227,57228,57230,57232],{"class":120,"line":1315},[118,57229,52137],{"class":128},[118,57231,5131],{"class":51293},[118,57233,51300],{"class":128},[118,57235,57236,57238],{"class":120,"line":1321},[118,57237,6408],{"class":51293},[118,57239,15577],{"class":128},[118,57241,57242,57244,57246,57248],{"class":120,"line":1333},[118,57243,54699],{"class":177},[118,57245,51430],{"class":128},[118,57247,320],{"class":177},[118,57249,1294],{"class":128},[118,57251,57252,57254,57256,57258],{"class":120,"line":1616},[118,57253,54688],{"class":177},[118,57255,51430],{"class":128},[118,57257,320],{"class":177},[118,57259,1294],{"class":128},[118,57261,57262],{"class":120,"line":1621},[118,57263,2191],{"class":128},[118,57265,57266],{"class":120,"line":1627},[118,57267,2404],{"emptyLinePlaceholder":45},[118,57269,57270,57273],{"class":120,"line":1632},[118,57271,57272],{"class":51293},"    h2",[118,57274,15577],{"class":128},[118,57276,57277,57280,57282,57284],{"class":120,"line":1646},[118,57278,57279],{"class":177},"      text-align",[118,57281,51430],{"class":128},[118,57283,51585],{"class":177},[118,57285,1294],{"class":128},[118,57287,57288],{"class":120,"line":1651},[118,57289,2191],{"class":128},[118,57291,57292],{"class":120,"line":1657},[118,57293,2404],{"emptyLinePlaceholder":45},[118,57295,57296,57298],{"class":120,"line":1678},[118,57297,54745],{"class":1967},[118,57299,15577],{"class":128},[118,57301,57302,57304,57306,57308,57310],{"class":120,"line":1683},[118,57303,54764],{"class":177},[118,57305,51430],{"class":128},[118,57307,1543],{"class":177},[118,57309,51485],{"class":124},[118,57311,1294],{"class":128},[118,57313,57314,57316,57318,57320,57322,57324],{"class":120,"line":1697},[118,57315,54699],{"class":177},[118,57317,51430],{"class":128},[118,57319,784],{"class":177},[118,57321,51485],{"class":124},[118,57323,51549],{"class":177},[118,57325,1294],{"class":128},[118,57327,57328,57330,57332,57334],{"class":120,"line":1702},[118,57329,55002],{"class":177},[118,57331,51430],{"class":128},[118,57333,51470],{"class":177},[118,57335,1294],{"class":128},[118,57337,57338,57340,57342,57344,57346],{"class":120,"line":1731},[118,57339,54915],{"class":177},[118,57341,51430],{"class":128},[118,57343,953],{"class":177},[118,57345,51485],{"class":124},[118,57347,1294],{"class":128},[118,57349,57350,57353,57355,57357,57359],{"class":120,"line":1736},[118,57351,57352],{"class":177},"      line-height",[118,57354,51430],{"class":128},[118,57356,529],{"class":177},[118,57358,51485],{"class":124},[118,57360,1294],{"class":128},[118,57362,57363],{"class":120,"line":1753},[118,57364,2191],{"class":128},[118,57366,57367],{"class":120,"line":1758},[118,57368,2404],{"emptyLinePlaceholder":45},[118,57370,57371,57374],{"class":120,"line":1763},[118,57372,57373],{"class":1967},"    .qs",[118,57375,15577],{"class":128},[118,57377,57378],{"class":120,"line":1768},[118,57379,2404],{"emptyLinePlaceholder":45},[118,57381,57382,57384,57386,57389,57391],{"class":120,"line":1782},[118,57383,54764],{"class":177},[118,57385,51430],{"class":128},[118,57387,57388],{"class":177},"450",[118,57390,51485],{"class":124},[118,57392,1294],{"class":128},[118,57394,57395,57397,57399,57401,57403],{"class":120,"line":1787},[118,57396,54778],{"class":177},[118,57398,51430],{"class":128},[118,57400,529],{"class":177},[118,57402,51485],{"class":124},[118,57404,1294],{"class":128},[118,57406,57407,57410,57412,57415],{"class":120,"line":2581},[118,57408,57409],{"class":177},"      color",[118,57411,51430],{"class":128},[118,57413,57414],{"class":177},"red",[118,57416,1294],{"class":128},[118,57418,57419],{"class":120,"line":2595},[118,57420,2404],{"emptyLinePlaceholder":45},[118,57422,57423],{"class":120,"line":2603},[118,57424,2191],{"class":128},[118,57426,57427],{"class":120,"line":2608},[118,57428,2404],{"emptyLinePlaceholder":45},[118,57430,57431,57434],{"class":120,"line":2614},[118,57432,57433],{"class":1967},"    .btns",[118,57435,15577],{"class":128},[118,57437,57438,57440,57442,57444],{"class":120,"line":2620},[118,57439,57279],{"class":177},[118,57441,51430],{"class":128},[118,57443,51585],{"class":177},[118,57445,1294],{"class":128},[118,57447,57448],{"class":120,"line":2625},[118,57449,2191],{"class":128},[118,57451,57452],{"class":120,"line":7953},[118,57453,2404],{"emptyLinePlaceholder":45},[118,57455,57456,57458,57461],{"class":120,"line":7977},[118,57457,57433],{"class":1967},[118,57459,57460],{"class":51293}," button",[118,57462,15577],{"class":128},[118,57464,57465,57467,57469,57471,57473],{"class":120,"line":7982},[118,57466,54764],{"class":177},[118,57468,51430],{"class":128},[118,57470,945],{"class":177},[118,57472,51485],{"class":124},[118,57474,1294],{"class":128},[118,57476,57477,57479,57481,57483,57485],{"class":120,"line":7988},[118,57478,54778],{"class":177},[118,57480,51430],{"class":128},[118,57482,401],{"class":177},[118,57484,51485],{"class":124},[118,57486,1294],{"class":128},[118,57488,57489,57491,57493,57495,57498,57500],{"class":120,"line":8015},[118,57490,54699],{"class":177},[118,57492,51430],{"class":128},[118,57494,320],{"class":177},[118,57496,57497],{"class":177}," 50",[118,57499,51485],{"class":124},[118,57501,1294],{"class":128},[118,57503,57504],{"class":120,"line":8020},[118,57505,2191],{"class":128},[118,57507,57508,57510,57512],{"class":120,"line":8026},[118,57509,52410],{"class":128},[118,57511,5131],{"class":51293},[118,57513,51300],{"class":128},[118,57515,57516,57518,57520],{"class":120,"line":8038},[118,57517,51778],{"class":128},[118,57519,51327],{"class":51293},[118,57521,51300],{"class":128},[118,57523,57524],{"class":120,"line":8050},[118,57525,2404],{"emptyLinePlaceholder":45},[118,57527,57528,57530,57532],{"class":120,"line":8062},[118,57529,1038],{"class":128},[118,57531,51793],{"class":51293},[118,57533,51300],{"class":128},[118,57535,57536,57538,57540,57543,57545],{"class":120,"line":9721},[118,57537,52137],{"class":128},[118,57539,60],{"class":51293},[118,57541,57542],{"class":128},">随机点名\u003C\u002F",[118,57544,60],{"class":51293},[118,57546,51300],{"class":128},[118,57548,57549,57551,57553,57555,57557,57559],{"class":120,"line":9746},[118,57550,52137],{"class":128},[118,57552,51604],{"class":51293},[118,57554,53479],{"class":1967},[118,57556,174],{"class":128},[118,57558,53484],{"class":233},[118,57560,51300],{"class":128},[118,57562,57563,57565,57567,57570,57572],{"class":120,"line":9769},[118,57564,51334],{"class":128},[118,57566,118],{"class":51293},[118,57568,57569],{"class":128},">名字是：\u003C\u002F",[118,57571,118],{"class":51293},[118,57573,51300],{"class":128},[118,57575,57576,57578,57580,57582,57584,57587,57590,57592],{"class":120,"line":9793},[118,57577,51334],{"class":128},[118,57579,51604],{"class":51293},[118,57581,53479],{"class":1967},[118,57583,174],{"class":128},[118,57585,57586],{"class":233},"\"qs\"",[118,57588,57589],{"class":128},">这里显示姓名\u003C\u002F",[118,57591,51604],{"class":51293},[118,57593,51300],{"class":128},[118,57595,57596,57598,57600],{"class":120,"line":9798},[118,57597,52410],{"class":128},[118,57599,51604],{"class":51293},[118,57601,51300],{"class":128},[118,57603,57604,57606,57608,57610,57612,57615],{"class":120,"line":9803},[118,57605,52137],{"class":128},[118,57607,51604],{"class":51293},[118,57609,53479],{"class":1967},[118,57611,174],{"class":128},[118,57613,57614],{"class":233},"\"btns\"",[118,57616,51300],{"class":128},[118,57618,57619,57621,57623,57625,57627,57630,57633,57635],{"class":120,"line":9808},[118,57620,51334],{"class":128},[118,57622,53880],{"class":51293},[118,57624,53479],{"class":1967},[118,57626,174],{"class":128},[118,57628,57629],{"class":233},"\"start\"",[118,57631,57632],{"class":128},">开始\u003C\u002F",[118,57634,53880],{"class":51293},[118,57636,51300],{"class":128},[118,57638,57639,57641,57643,57645,57647,57650,57653,57655],{"class":120,"line":9817},[118,57640,51334],{"class":128},[118,57642,53880],{"class":51293},[118,57644,53479],{"class":1967},[118,57646,174],{"class":128},[118,57648,57649],{"class":233},"\"end\"",[118,57651,57652],{"class":128},">结束\u003C\u002F",[118,57654,53880],{"class":51293},[118,57656,51300],{"class":128},[118,57658,57659,57661,57663],{"class":120,"line":9822},[118,57660,52410],{"class":128},[118,57662,51604],{"class":51293},[118,57664,51300],{"class":128},[118,57666,57667],{"class":120,"line":9828},[118,57668,2404],{"emptyLinePlaceholder":45},[118,57670,57671,57673,57675],{"class":120,"line":9849},[118,57672,52137],{"class":128},[118,57674,51806],{"class":51293},[118,57676,51300],{"class":128},[118,57678,57679],{"class":120,"line":9855},[118,57680,57681],{"class":187},"    \u002F\u002F 数据数组\n",[118,57683,57684,57686,57689,57691,57693,57696,57698,57701,57703,57706,57708,57711,57713,57716],{"class":120,"line":9869},[118,57685,11226],{"class":124},[118,57687,57688],{"class":177}," arr",[118,57690,13569],{"class":124},[118,57692,52219],{"class":128},[118,57694,57695],{"class":233},"'马超'",[118,57697,12440],{"class":128},[118,57699,57700],{"class":233},"'黄忠'",[118,57702,12440],{"class":128},[118,57704,57705],{"class":233},"'赵云'",[118,57707,12440],{"class":128},[118,57709,57710],{"class":233},"'关羽'",[118,57712,12440],{"class":128},[118,57714,57715],{"class":233},"'张飞'",[118,57717,33239],{"class":128},[118,57719,57720,57722,57725,57727,57729,57731,57733,57736],{"class":120,"line":9875},[118,57721,11226],{"class":124},[118,57723,57724],{"class":177}," qs",[118,57726,13569],{"class":124},[118,57728,54389],{"class":128},[118,57730,54392],{"class":1967},[118,57732,129],{"class":128},[118,57734,57735],{"class":233},"'.qs'",[118,57737,135],{"class":128},[118,57739,57740],{"class":120,"line":9902},[118,57741,57742],{"class":187},"    \u002F\u002F 1.业务1.开始按钮模块\n",[118,57744,57745,57747,57749,57751,57753,57755,57757,57760],{"class":120,"line":9911},[118,57746,11226],{"class":124},[118,57748,4188],{"class":177},[118,57750,13569],{"class":124},[118,57752,54389],{"class":128},[118,57754,54392],{"class":1967},[118,57756,129],{"class":128},[118,57758,57759],{"class":233},"'.start'",[118,57761,135],{"class":128},[118,57763,57764],{"class":120,"line":9917},[118,57765,57766],{"class":187},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[118,57768,57769,57771,57774,57776],{"class":120,"line":9925},[118,57770,52212],{"class":124},[118,57772,57773],{"class":128}," timerId ",[118,57775,174],{"class":124},[118,57777,47326],{"class":177},[118,57779,57780],{"class":120,"line":9930},[118,57781,57782],{"class":187},"    \u002F\u002F 随机号要全局变量\n",[118,57784,57785,57787,57790,57792],{"class":120,"line":16609},[118,57786,52212],{"class":124},[118,57788,57789],{"class":128}," random ",[118,57791,174],{"class":124},[118,57793,47326],{"class":177},[118,57795,57796],{"class":120,"line":16615},[118,57797,57798],{"class":187},"    \u002F\u002F 1.1 添加点击事件\n",[118,57800,57801,57804,57807,57809,57812,57814,57816],{"class":120,"line":16638},[118,57802,57803],{"class":128},"    start.",[118,57805,57806],{"class":1967},"addEventListener",[118,57808,129],{"class":128},[118,57810,57811],{"class":233},"'click'",[118,57813,12440],{"class":128},[118,57815,54442],{"class":124},[118,57817,54445],{"class":128},[118,57819,57820,57823,57825,57827,57829,57831],{"class":120,"line":16644},[118,57821,57822],{"class":128},"      timerId ",[118,57824,174],{"class":124},[118,57826,54437],{"class":1967},[118,57828,129],{"class":128},[118,57830,54442],{"class":124},[118,57832,54445],{"class":128},[118,57834,57835],{"class":120,"line":16667},[118,57836,57837],{"class":187},"        \u002F\u002F 随机数\n",[118,57839,57840,57843,57845,57848,57851,57854,57856,57858,57860,57862],{"class":120,"line":16681},[118,57841,57842],{"class":128},"        random ",[118,57844,174],{"class":124},[118,57846,57847],{"class":1967}," parseInt",[118,57849,57850],{"class":128},"(Math.",[118,57852,57853],{"class":1967},"random",[118,57855,13055],{"class":128},[118,57857,583],{"class":124},[118,57859,51958],{"class":128},[118,57861,51961],{"class":177},[118,57863,135],{"class":128},[118,57865,57866,57869,57871],{"class":120,"line":16701},[118,57867,57868],{"class":128},"        qs.innerHTML ",[118,57870,174],{"class":124},[118,57872,57873],{"class":128}," arr[random]\n",[118,57875,57876,57879,57881],{"class":120,"line":16707},[118,57877,57878],{"class":128},"      }, ",[118,57880,401],{"class":177},[118,57882,135],{"class":128},[118,57884,57885],{"class":120,"line":16718},[118,57886,57887],{"class":187},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[118,57889,57890,57892,57895,57897,57900,57902],{"class":120,"line":16741},[118,57891,54473],{"class":124},[118,57893,57894],{"class":128}," (arr.",[118,57896,51961],{"class":177},[118,57898,57899],{"class":124}," ===",[118,57901,25123],{"class":177},[118,57903,12447],{"class":128},[118,57905,57906],{"class":120,"line":16763},[118,57907,57908],{"class":187},"        \u002F\u002F start.disabled = true\n",[118,57910,57911],{"class":120,"line":16768},[118,57912,57913],{"class":187},"        \u002F\u002F end.disabled = true\n",[118,57915,57916],{"class":120,"line":16774},[118,57917,57918],{"class":187},"        \u002F\u002F 可以合起来写\n",[118,57920,57921,57924,57926,57929,57931],{"class":120,"line":16788},[118,57922,57923],{"class":128},"        start.disabled ",[118,57925,174],{"class":124},[118,57927,57928],{"class":128}," end.disabled ",[118,57930,174],{"class":124},[118,57932,57933],{"class":177}," true\n",[118,57935,57936],{"class":120,"line":16801},[118,57937,52391],{"class":128},[118,57939,57940],{"class":120,"line":16806},[118,57941,33454],{"class":128},[118,57943,57944],{"class":120,"line":16820},[118,57945,57946],{"class":187},"    \u002F\u002F 1.2 关闭按钮模块\n",[118,57948,57949,57951,57953,57955,57957,57959,57961,57964],{"class":120,"line":16825},[118,57950,11226],{"class":124},[118,57952,4204],{"class":177},[118,57954,13569],{"class":124},[118,57956,54389],{"class":128},[118,57958,54392],{"class":1967},[118,57960,129],{"class":128},[118,57962,57963],{"class":233},"'.end'",[118,57965,135],{"class":128},[118,57967,57968,57971,57973,57975,57977,57979,57981],{"class":120,"line":16831},[118,57969,57970],{"class":128},"    end.",[118,57972,57806],{"class":1967},[118,57974,129],{"class":128},[118,57976,57811],{"class":233},[118,57978,12440],{"class":128},[118,57980,54442],{"class":124},[118,57982,54445],{"class":128},[118,57984,57985,57988],{"class":120,"line":16836},[118,57986,57987],{"class":1967},"      clearInterval",[118,57989,57990],{"class":128},"(timerId)\n",[118,57992,57993],{"class":120,"line":16850},[118,57994,57995],{"class":187},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[118,57997,57998,58001,58004,58007,58009],{"class":120,"line":16855},[118,57999,58000],{"class":128},"      arr.",[118,58002,58003],{"class":1967},"splice",[118,58005,58006],{"class":128},"(random, ",[118,58008,346],{"class":177},[118,58010,135],{"class":128},[118,58012,58013],{"class":120,"line":16860},[118,58014,33454],{"class":128},[118,58016,58017],{"class":120,"line":16874},[118,58018,2404],{"emptyLinePlaceholder":45},[118,58020,58021,58023,58025],{"class":120,"line":16886},[118,58022,52410],{"class":128},[118,58024,51806],{"class":51293},[118,58026,51300],{"class":128},[118,58028,58029,58031,58033],{"class":120,"line":16891},[118,58030,51778],{"class":128},[118,58032,51793],{"class":51293},[118,58034,51300],{"class":128},[118,58036,58037],{"class":120,"line":16904},[118,58038,2404],{"emptyLinePlaceholder":45},[118,58040,58041,58043,58045],{"class":120,"line":16909},[118,58042,51778],{"class":128},[118,58044,50628],{"class":51293},[118,58046,51300],{"class":128},[15,58048,58049],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[89,58051,58053],{"id":58052},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[109,58055,58057],{"className":50626,"code":58056,"language":50628,"meta":39,"style":39},"\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",[115,58058,58059,58069,58083,58087,58095,58109,58129,58141,58149,58153,58161,58173,58181,58200,58217,58233,58243,58247,58255,58263,58267],{"__ignoreMap":39},[118,58060,58061,58063,58065,58067],{"class":120,"line":121},[118,58062,51290],{"class":128},[118,58064,51294],{"class":51293},[118,58066,51297],{"class":1967},[118,58068,51300],{"class":128},[118,58070,58071,58073,58075,58077,58079,58081],{"class":120,"line":40},[118,58072,1038],{"class":128},[118,58074,50628],{"class":51293},[118,58076,51309],{"class":1967},[118,58078,174],{"class":128},[118,58080,51314],{"class":233},[118,58082,51300],{"class":128},[118,58084,58085],{"class":120,"line":1183},[118,58086,2404],{"emptyLinePlaceholder":45},[118,58088,58089,58091,58093],{"class":120,"line":1198},[118,58090,1038],{"class":128},[118,58092,51327],{"class":51293},[118,58094,51300],{"class":128},[118,58096,58097,58099,58101,58103,58105,58107],{"class":120,"line":1204},[118,58098,52137],{"class":128},[118,58100,51337],{"class":51293},[118,58102,51340],{"class":1967},[118,58104,174],{"class":128},[118,58106,51345],{"class":233},[118,58108,51300],{"class":128},[118,58110,58111,58113,58115,58117,58119,58121,58123,58125,58127],{"class":120,"line":1218},[118,58112,52137],{"class":128},[118,58114,51337],{"class":51293},[118,58116,14925],{"class":1967},[118,58118,174],{"class":128},[118,58120,51384],{"class":233},[118,58122,51364],{"class":1967},[118,58124,174],{"class":128},[118,58126,51391],{"class":233},[118,58128,51300],{"class":128},[118,58130,58131,58133,58135,58137,58139],{"class":120,"line":1224},[118,58132,52137],{"class":128},[118,58134,51400],{"class":51293},[118,58136,51403],{"class":128},[118,58138,51400],{"class":51293},[118,58140,51300],{"class":128},[118,58142,58143,58145,58147],{"class":120,"line":1315},[118,58144,51778],{"class":128},[118,58146,51327],{"class":51293},[118,58148,51300],{"class":128},[118,58150,58151],{"class":120,"line":1321},[118,58152,2404],{"emptyLinePlaceholder":45},[118,58154,58155,58157,58159],{"class":120,"line":1333},[118,58156,1038],{"class":128},[118,58158,51793],{"class":51293},[118,58160,51300],{"class":128},[118,58162,58163,58165,58167,58169,58171],{"class":120,"line":1616},[118,58164,52137],{"class":128},[118,58166,53880],{"class":51293},[118,58168,53886],{"class":128},[118,58170,53880],{"class":51293},[118,58172,51300],{"class":128},[118,58174,58175,58177,58179],{"class":120,"line":1621},[118,58176,52137],{"class":128},[118,58178,51806],{"class":51293},[118,58180,51300],{"class":128},[118,58182,58183,58185,58187,58189,58191,58193,58195,58198],{"class":120,"line":1627},[118,58184,11226],{"class":124},[118,58186,54384],{"class":177},[118,58188,13569],{"class":124},[118,58190,54389],{"class":128},[118,58192,54392],{"class":1967},[118,58194,129],{"class":128},[118,58196,58197],{"class":233},"'button'",[118,58199,135],{"class":128},[118,58201,58202,58205,58207,58209,58211,58213,58215],{"class":120,"line":1632},[118,58203,58204],{"class":128},"    btn.",[118,58206,57806],{"class":1967},[118,58208,129],{"class":128},[118,58210,57811],{"class":233},[118,58212,12440],{"class":128},[118,58214,54442],{"class":124},[118,58216,54445],{"class":128},[118,58218,58219,58222,58224,58226,58229,58231],{"class":120,"line":1646},[118,58220,58221],{"class":124},"      const",[118,58223,2244],{"class":177},[118,58225,13569],{"class":124},[118,58227,58228],{"class":128}," Math.",[118,58230,57853],{"class":1967},[118,58232,1980],{"class":128},[118,58234,58235,58238,58241],{"class":120,"line":1651},[118,58236,58237],{"class":128},"      console.",[118,58239,58240],{"class":1967},"log",[118,58242,142],{"class":128},[118,58244,58245],{"class":120,"line":1657},[118,58246,33454],{"class":128},[118,58248,58249,58251,58253],{"class":120,"line":1678},[118,58250,52410],{"class":128},[118,58252,51806],{"class":51293},[118,58254,51300],{"class":128},[118,58256,58257,58259,58261],{"class":120,"line":1683},[118,58258,51778],{"class":128},[118,58260,51793],{"class":51293},[118,58262,51300],{"class":128},[118,58264,58265],{"class":120,"line":1697},[118,58266,2404],{"emptyLinePlaceholder":45},[118,58268,58269,58271,58273],{"class":120,"line":1702},[118,58270,51778],{"class":128},[118,58272,50628],{"class":51293},[118,58274,51300],{"class":128},[15,58276,58277],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[15,58279,58280],{},"常量不可以重新赋值",[15,58282,58283],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[109,58285,58287],{"className":50626,"code":58286,"language":50628,"meta":39,"style":39},"\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",[115,58288,58289,58299,58313,58317,58325,58339,58359,58371,58379,58383,58391,58403,58411,58422,58440,58456,58470,58478,58482,58490,58498,58502],{"__ignoreMap":39},[118,58290,58291,58293,58295,58297],{"class":120,"line":121},[118,58292,51290],{"class":128},[118,58294,51294],{"class":51293},[118,58296,51297],{"class":1967},[118,58298,51300],{"class":128},[118,58300,58301,58303,58305,58307,58309,58311],{"class":120,"line":40},[118,58302,1038],{"class":128},[118,58304,50628],{"class":51293},[118,58306,51309],{"class":1967},[118,58308,174],{"class":128},[118,58310,51314],{"class":233},[118,58312,51300],{"class":128},[118,58314,58315],{"class":120,"line":1183},[118,58316,2404],{"emptyLinePlaceholder":45},[118,58318,58319,58321,58323],{"class":120,"line":1198},[118,58320,1038],{"class":128},[118,58322,51327],{"class":51293},[118,58324,51300],{"class":128},[118,58326,58327,58329,58331,58333,58335,58337],{"class":120,"line":1204},[118,58328,52137],{"class":128},[118,58330,51337],{"class":51293},[118,58332,51340],{"class":1967},[118,58334,174],{"class":128},[118,58336,51345],{"class":233},[118,58338,51300],{"class":128},[118,58340,58341,58343,58345,58347,58349,58351,58353,58355,58357],{"class":120,"line":1218},[118,58342,52137],{"class":128},[118,58344,51337],{"class":51293},[118,58346,14925],{"class":1967},[118,58348,174],{"class":128},[118,58350,51384],{"class":233},[118,58352,51364],{"class":1967},[118,58354,174],{"class":128},[118,58356,51391],{"class":233},[118,58358,51300],{"class":128},[118,58360,58361,58363,58365,58367,58369],{"class":120,"line":1224},[118,58362,52137],{"class":128},[118,58364,51400],{"class":51293},[118,58366,51403],{"class":128},[118,58368,51400],{"class":51293},[118,58370,51300],{"class":128},[118,58372,58373,58375,58377],{"class":120,"line":1315},[118,58374,51778],{"class":128},[118,58376,51327],{"class":51293},[118,58378,51300],{"class":128},[118,58380,58381],{"class":120,"line":1321},[118,58382,2404],{"emptyLinePlaceholder":45},[118,58384,58385,58387,58389],{"class":120,"line":1333},[118,58386,1038],{"class":128},[118,58388,51793],{"class":51293},[118,58390,51300],{"class":128},[118,58392,58393,58395,58397,58399,58401],{"class":120,"line":1616},[118,58394,52137],{"class":128},[118,58396,53880],{"class":51293},[118,58398,53886],{"class":128},[118,58400,53880],{"class":51293},[118,58402,51300],{"class":128},[118,58404,58405,58407,58409],{"class":120,"line":1621},[118,58406,52137],{"class":128},[118,58408,51806],{"class":51293},[118,58410,51300],{"class":128},[118,58412,58413,58415,58417,58419],{"class":120,"line":1627},[118,58414,11226],{"class":124},[118,58416,2244],{"class":177},[118,58418,13569],{"class":124},[118,58420,58421],{"class":177}," 10\n",[118,58423,58424,58426,58428,58430,58432,58434,58436,58438],{"class":120,"line":1632},[118,58425,11226],{"class":124},[118,58427,54384],{"class":177},[118,58429,13569],{"class":124},[118,58431,54389],{"class":128},[118,58433,54392],{"class":1967},[118,58435,129],{"class":128},[118,58437,58197],{"class":233},[118,58439,135],{"class":128},[118,58441,58442,58444,58446,58448,58450,58452,58454],{"class":120,"line":1646},[118,58443,58204],{"class":128},[118,58445,57806],{"class":1967},[118,58447,129],{"class":128},[118,58449,57811],{"class":233},[118,58451,12440],{"class":128},[118,58453,54442],{"class":124},[118,58455,54445],{"class":128},[118,58457,58458,58460,58462,58464,58466,58468],{"class":120,"line":1651},[118,58459,58221],{"class":124},[118,58461,2244],{"class":177},[118,58463,13569],{"class":124},[118,58465,58228],{"class":128},[118,58467,57853],{"class":1967},[118,58469,1980],{"class":128},[118,58471,58472,58474,58476],{"class":120,"line":1657},[118,58473,58237],{"class":128},[118,58475,58240],{"class":1967},[118,58477,142],{"class":128},[118,58479,58480],{"class":120,"line":1678},[118,58481,33454],{"class":128},[118,58483,58484,58486,58488],{"class":120,"line":1683},[118,58485,52410],{"class":128},[118,58487,51806],{"class":51293},[118,58489,51300],{"class":128},[118,58491,58492,58494,58496],{"class":120,"line":1697},[118,58493,51778],{"class":128},[118,58495,51793],{"class":51293},[118,58497,51300],{"class":128},[118,58499,58500],{"class":120,"line":1702},[118,58501,2404],{"emptyLinePlaceholder":45},[118,58503,58504,58506,58508],{"class":120,"line":1731},[118,58505,51778],{"class":128},[118,58507,50628],{"class":51293},[118,58509,51300],{"class":128},[15,58511,58512],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[109,58514,58516],{"className":50626,"code":58515,"language":50628,"meta":39,"style":39},"\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",[115,58517,58518,58528,58542,58546,58554,58568,58588,58600,58608,58612,58620,58632,58640,58650,58668,58684,58697,58705,58709,58717,58725,58729],{"__ignoreMap":39},[118,58519,58520,58522,58524,58526],{"class":120,"line":121},[118,58521,51290],{"class":128},[118,58523,51294],{"class":51293},[118,58525,51297],{"class":1967},[118,58527,51300],{"class":128},[118,58529,58530,58532,58534,58536,58538,58540],{"class":120,"line":40},[118,58531,1038],{"class":128},[118,58533,50628],{"class":51293},[118,58535,51309],{"class":1967},[118,58537,174],{"class":128},[118,58539,51314],{"class":233},[118,58541,51300],{"class":128},[118,58543,58544],{"class":120,"line":1183},[118,58545,2404],{"emptyLinePlaceholder":45},[118,58547,58548,58550,58552],{"class":120,"line":1198},[118,58549,1038],{"class":128},[118,58551,51327],{"class":51293},[118,58553,51300],{"class":128},[118,58555,58556,58558,58560,58562,58564,58566],{"class":120,"line":1204},[118,58557,52137],{"class":128},[118,58559,51337],{"class":51293},[118,58561,51340],{"class":1967},[118,58563,174],{"class":128},[118,58565,51345],{"class":233},[118,58567,51300],{"class":128},[118,58569,58570,58572,58574,58576,58578,58580,58582,58584,58586],{"class":120,"line":1218},[118,58571,52137],{"class":128},[118,58573,51337],{"class":51293},[118,58575,14925],{"class":1967},[118,58577,174],{"class":128},[118,58579,51384],{"class":233},[118,58581,51364],{"class":1967},[118,58583,174],{"class":128},[118,58585,51391],{"class":233},[118,58587,51300],{"class":128},[118,58589,58590,58592,58594,58596,58598],{"class":120,"line":1224},[118,58591,52137],{"class":128},[118,58593,51400],{"class":51293},[118,58595,51403],{"class":128},[118,58597,51400],{"class":51293},[118,58599,51300],{"class":128},[118,58601,58602,58604,58606],{"class":120,"line":1315},[118,58603,51778],{"class":128},[118,58605,51327],{"class":51293},[118,58607,51300],{"class":128},[118,58609,58610],{"class":120,"line":1321},[118,58611,2404],{"emptyLinePlaceholder":45},[118,58613,58614,58616,58618],{"class":120,"line":1333},[118,58615,1038],{"class":128},[118,58617,51793],{"class":51293},[118,58619,51300],{"class":128},[118,58621,58622,58624,58626,58628,58630],{"class":120,"line":1616},[118,58623,52137],{"class":128},[118,58625,53880],{"class":51293},[118,58627,53886],{"class":128},[118,58629,53880],{"class":51293},[118,58631,51300],{"class":128},[118,58633,58634,58636,58638],{"class":120,"line":1621},[118,58635,52137],{"class":128},[118,58637,51806],{"class":51293},[118,58639,51300],{"class":128},[118,58641,58642,58644,58646,58648],{"class":120,"line":1627},[118,58643,11226],{"class":124},[118,58645,2244],{"class":177},[118,58647,13569],{"class":124},[118,58649,58421],{"class":177},[118,58651,58652,58654,58656,58658,58660,58662,58664,58666],{"class":120,"line":1632},[118,58653,11226],{"class":124},[118,58655,54384],{"class":177},[118,58657,13569],{"class":124},[118,58659,54389],{"class":128},[118,58661,54392],{"class":1967},[118,58663,129],{"class":128},[118,58665,58197],{"class":233},[118,58667,135],{"class":128},[118,58669,58670,58672,58674,58676,58678,58680,58682],{"class":120,"line":1646},[118,58671,58204],{"class":128},[118,58673,57806],{"class":1967},[118,58675,129],{"class":128},[118,58677,57811],{"class":233},[118,58679,12440],{"class":128},[118,58681,54442],{"class":124},[118,58683,54445],{"class":128},[118,58685,58686,58689,58691,58693,58695],{"class":120,"line":1651},[118,58687,58688],{"class":128},"      num ",[118,58690,174],{"class":124},[118,58692,58228],{"class":128},[118,58694,57853],{"class":1967},[118,58696,1980],{"class":128},[118,58698,58699,58701,58703],{"class":120,"line":1657},[118,58700,58237],{"class":128},[118,58702,58240],{"class":1967},[118,58704,142],{"class":128},[118,58706,58707],{"class":120,"line":1678},[118,58708,33454],{"class":128},[118,58710,58711,58713,58715],{"class":120,"line":1683},[118,58712,52410],{"class":128},[118,58714,51806],{"class":51293},[118,58716,51300],{"class":128},[118,58718,58719,58721,58723],{"class":120,"line":1697},[118,58720,51778],{"class":128},[118,58722,51793],{"class":51293},[118,58724,51300],{"class":128},[118,58726,58727],{"class":120,"line":1702},[118,58728,2404],{"emptyLinePlaceholder":45},[118,58730,58731,58733,58735],{"class":120,"line":1731},[118,58732,51778],{"class":128},[118,58734,50628],{"class":51293},[118,58736,51300],{"class":128},[15,58738,58739],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[89,58741,58743],{"id":58742},"_324-事件监听版本","3.2.4 事件监听版本",[15,58745,58746],{},[1466,58747],{"alt":39,"src":58748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[15,58750,58751],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[15,58753,58754],{},"这种方式会覆盖前边的事件监听:",[109,58756,58758],{"className":50626,"code":58757,"language":50628,"meta":39,"style":39},"\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",[115,58759,58760,58770,58784,58788,58796,58810,58830,58842,58850,58854,58862,58874,58882,58900,58914,58925,58929,58941,58951,58955,58963,58971,58975],{"__ignoreMap":39},[118,58761,58762,58764,58766,58768],{"class":120,"line":121},[118,58763,51290],{"class":128},[118,58765,51294],{"class":51293},[118,58767,51297],{"class":1967},[118,58769,51300],{"class":128},[118,58771,58772,58774,58776,58778,58780,58782],{"class":120,"line":40},[118,58773,1038],{"class":128},[118,58775,50628],{"class":51293},[118,58777,51309],{"class":1967},[118,58779,174],{"class":128},[118,58781,51314],{"class":233},[118,58783,51300],{"class":128},[118,58785,58786],{"class":120,"line":1183},[118,58787,2404],{"emptyLinePlaceholder":45},[118,58789,58790,58792,58794],{"class":120,"line":1198},[118,58791,1038],{"class":128},[118,58793,51327],{"class":51293},[118,58795,51300],{"class":128},[118,58797,58798,58800,58802,58804,58806,58808],{"class":120,"line":1204},[118,58799,52137],{"class":128},[118,58801,51337],{"class":51293},[118,58803,51340],{"class":1967},[118,58805,174],{"class":128},[118,58807,51345],{"class":233},[118,58809,51300],{"class":128},[118,58811,58812,58814,58816,58818,58820,58822,58824,58826,58828],{"class":120,"line":1218},[118,58813,52137],{"class":128},[118,58815,51337],{"class":51293},[118,58817,14925],{"class":1967},[118,58819,174],{"class":128},[118,58821,51384],{"class":233},[118,58823,51364],{"class":1967},[118,58825,174],{"class":128},[118,58827,51391],{"class":233},[118,58829,51300],{"class":128},[118,58831,58832,58834,58836,58838,58840],{"class":120,"line":1224},[118,58833,52137],{"class":128},[118,58835,51400],{"class":51293},[118,58837,51403],{"class":128},[118,58839,51400],{"class":51293},[118,58841,51300],{"class":128},[118,58843,58844,58846,58848],{"class":120,"line":1315},[118,58845,51778],{"class":128},[118,58847,51327],{"class":51293},[118,58849,51300],{"class":128},[118,58851,58852],{"class":120,"line":1321},[118,58853,2404],{"emptyLinePlaceholder":45},[118,58855,58856,58858,58860],{"class":120,"line":1333},[118,58857,1038],{"class":128},[118,58859,51793],{"class":51293},[118,58861,51300],{"class":128},[118,58863,58864,58866,58868,58870,58872],{"class":120,"line":1616},[118,58865,52137],{"class":128},[118,58867,53880],{"class":51293},[118,58869,53886],{"class":128},[118,58871,53880],{"class":51293},[118,58873,51300],{"class":128},[118,58875,58876,58878,58880],{"class":120,"line":1621},[118,58877,52137],{"class":128},[118,58879,51806],{"class":51293},[118,58881,51300],{"class":128},[118,58883,58884,58886,58888,58890,58892,58894,58896,58898],{"class":120,"line":1627},[118,58885,11226],{"class":124},[118,58887,54384],{"class":177},[118,58889,13569],{"class":124},[118,58891,54389],{"class":128},[118,58893,54392],{"class":1967},[118,58895,129],{"class":128},[118,58897,58197],{"class":233},[118,58899,135],{"class":128},[118,58901,58902,58904,58907,58909,58912],{"class":120,"line":1632},[118,58903,58204],{"class":128},[118,58905,58906],{"class":1967},"onclick",[118,58908,13569],{"class":124},[118,58910,58911],{"class":124}," function",[118,58913,54445],{"class":128},[118,58915,58916,58919,58921,58923],{"class":120,"line":1646},[118,58917,58918],{"class":1967},"      alert",[118,58920,129],{"class":128},[118,58922,600],{"class":177},[118,58924,135],{"class":128},[118,58926,58927],{"class":120,"line":1651},[118,58928,2191],{"class":128},[118,58930,58931,58933,58935,58937,58939],{"class":120,"line":1657},[118,58932,58204],{"class":128},[118,58934,58906],{"class":1967},[118,58936,13569],{"class":124},[118,58938,58911],{"class":124},[118,58940,54445],{"class":128},[118,58942,58943,58945,58947,58949],{"class":120,"line":1678},[118,58944,58918],{"class":1967},[118,58946,129],{"class":128},[118,58948,878],{"class":177},[118,58950,135],{"class":128},[118,58952,58953],{"class":120,"line":1683},[118,58954,2191],{"class":128},[118,58956,58957,58959,58961],{"class":120,"line":1697},[118,58958,52410],{"class":128},[118,58960,51806],{"class":51293},[118,58962,51300],{"class":128},[118,58964,58965,58967,58969],{"class":120,"line":1702},[118,58966,51778],{"class":128},[118,58968,51793],{"class":51293},[118,58970,51300],{"class":128},[118,58972,58973],{"class":120,"line":1731},[118,58974,2404],{"emptyLinePlaceholder":45},[118,58976,58977,58979,58981],{"class":120,"line":1736},[118,58978,51778],{"class":128},[118,58980,50628],{"class":51293},[118,58982,51300],{"class":128},[15,58984,58985],{},"只要点击就输出结果为22,前边11被覆盖了",[109,58987,58989],{"className":50626,"code":58988,"language":50628,"meta":39,"style":39},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[115,58990,58991,58996,59001,59005,59010,59015],{"__ignoreMap":39},[118,58992,58993],{"class":120,"line":121},[118,58994,58995],{"class":128},"  btn.addEventListener('click', function () {\n",[118,58997,58998],{"class":120,"line":40},[118,58999,59000],{"class":128},"      alert(11)\n",[118,59002,59003],{"class":120,"line":1183},[118,59004,33454],{"class":128},[118,59006,59007],{"class":120,"line":1198},[118,59008,59009],{"class":128},"    btn.addEventListener('click', function () {\n",[118,59011,59012],{"class":120,"line":1204},[118,59013,59014],{"class":128},"      alert(22)\n",[118,59016,59017],{"class":120,"line":1218},[118,59018,33454],{"class":128},[15,59020,59021],{},"点击第一次输出11,第二次点击为22",[89,59023,59025],{"id":59024},"_325-事件类型","3.2.5 事件类型",[15,59027,59028],{},[1466,59029],{"alt":39,"src":59030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22003,59032,59034],{"id":59033},"_3251-鼠标事件","3.2.5.1 鼠标事件",[15,59036,59037],{},"补充知识:",[15,59039,59040],{},"轮播图自动播放模块,可以使用",[15,59042,59043],{},"let timerId = setInterval(function () {",[15,59045,59046],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[15,59048,59049],{},"用js方法模拟进行点击事件,click必须加()",[15,59051,59052],{},"next.click()",[15,59054,59055],{},"}, 1000)",[15,59057,59058],{},[1466,59059],{"alt":39,"src":59060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[109,59062,59064],{"className":53060,"code":59063,"language":53062,"meta":39,"style":39},"\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",[115,59065,59066,59070,59080,59094,59098,59106,59121,59141,59161,59174,59182,59187,59192,59196,59200,59205,59210,59215,59220,59224,59228,59233,59238,59243,59247,59251,59256,59260,59265,59270,59274,59278,59283,59288,59293,59298,59303,59307,59311,59316,59321,59326,59331,59336,59340,59344,59349,59354,59359,59364,59369,59374,59379,59384,59389,59394,59398,59402,59407,59412,59416,59420,59425,59430,59434,59439,59444,59448,59452,59457,59461,59466,59471,59475,59480,59484,59488,59493,59498,59503,59508,59513,59518,59523,59527,59531,59535,59540,59545,59550,59555,59559,59567,59575,59579,59587,59602,59616,59637,59645,59659,59672,59687,59706,59718,59730,59742,59754,59766,59778,59790,59798,59813,59837,59861,59869,59877,59885,59893,59898,59903,59908,59913,59918,59923,59928,59933,59938,59943,59947,59952,59957,59962,59967,59972,59977,59982,59987,59992,59996,60001,60006,60011,60016,60021,60026,60031,60036,60041,60046,60051,60056,60060,60064,60069,60074,60079,60083,60088,60093,60098,60103,60108,60112,60117,60121,60125,60129,60133,60137,60141,60146,60151,60156,60161,60166,60171,60176,60181,60186,60190,60194,60199,60204,60209,60214,60219,60223,60228,60233,60238,60243,60248,60253,60257,60261,60266,60270,60275,60279,60284,60289,60294,60299,60304,60309,60313,60321,60329,60333],{"__ignoreMap":39},[118,59067,59068],{"class":120,"line":121},[118,59069,2404],{"emptyLinePlaceholder":45},[118,59071,59072,59074,59076,59078],{"class":120,"line":40},[118,59073,51290],{"class":128},[118,59075,51294],{"class":124},[118,59077,51297],{"class":177},[118,59079,51300],{"class":128},[118,59081,59082,59084,59086,59088,59090,59092],{"class":120,"line":1183},[118,59083,1038],{"class":128},[118,59085,50628],{"class":51293},[118,59087,51309],{"class":1967},[118,59089,174],{"class":128},[118,59091,51314],{"class":233},[118,59093,51300],{"class":128},[118,59095,59096],{"class":120,"line":1198},[118,59097,2404],{"emptyLinePlaceholder":45},[118,59099,59100,59102,59104],{"class":120,"line":1204},[118,59101,1038],{"class":128},[118,59103,51327],{"class":51293},[118,59105,51300],{"class":128},[118,59107,59108,59110,59112,59114,59116,59118],{"class":120,"line":1218},[118,59109,52137],{"class":128},[118,59111,51337],{"class":51293},[118,59113,51340],{"class":1967},[118,59115,174],{"class":128},[118,59117,51345],{"class":233},[118,59119,59120],{"class":128}," \u002F>\n",[118,59122,59123,59125,59127,59129,59131,59133,59135,59137,59139],{"class":120,"line":1224},[118,59124,52137],{"class":128},[118,59126,51337],{"class":51293},[118,59128,51356],{"class":1967},[118,59130,174],{"class":128},[118,59132,51361],{"class":233},[118,59134,51364],{"class":1967},[118,59136,174],{"class":128},[118,59138,51369],{"class":233},[118,59140,59120],{"class":128},[118,59142,59143,59145,59147,59149,59151,59153,59155,59157,59159],{"class":120,"line":1315},[118,59144,52137],{"class":128},[118,59146,51337],{"class":51293},[118,59148,14925],{"class":1967},[118,59150,174],{"class":128},[118,59152,51384],{"class":233},[118,59154,51364],{"class":1967},[118,59156,174],{"class":128},[118,59158,51391],{"class":233},[118,59160,59120],{"class":128},[118,59162,59163,59165,59167,59170,59172],{"class":120,"line":1321},[118,59164,52137],{"class":128},[118,59166,51400],{"class":51293},[118,59168,59169],{"class":128},">轮播图点击切换\u003C\u002F",[118,59171,51400],{"class":51293},[118,59173,51300],{"class":128},[118,59175,59176,59178,59180],{"class":120,"line":1333},[118,59177,52137],{"class":128},[118,59179,5131],{"class":51293},[118,59181,51300],{"class":128},[118,59183,59184],{"class":120,"line":1616},[118,59185,59186],{"class":128},"    * {\n",[118,59188,59189],{"class":120,"line":1621},[118,59190,59191],{"class":128},"      box-sizing: border-box;\n",[118,59193,59194],{"class":120,"line":1627},[118,59195,2191],{"class":128},[118,59197,59198],{"class":120,"line":1632},[118,59199,2404],{"emptyLinePlaceholder":45},[118,59201,59202],{"class":120,"line":1646},[118,59203,59204],{"class":128},"    .slider {\n",[118,59206,59207],{"class":120,"line":1651},[118,59208,59209],{"class":128},"      width: 560px;\n",[118,59211,59212],{"class":120,"line":1657},[118,59213,59214],{"class":128},"      height: 400px;\n",[118,59216,59217],{"class":120,"line":1678},[118,59218,59219],{"class":128},"      overflow: hidden;\n",[118,59221,59222],{"class":120,"line":1683},[118,59223,2191],{"class":128},[118,59225,59226],{"class":120,"line":1697},[118,59227,2404],{"emptyLinePlaceholder":45},[118,59229,59230],{"class":120,"line":1702},[118,59231,59232],{"class":128},"    .slider-wrapper {\n",[118,59234,59235],{"class":120,"line":1731},[118,59236,59237],{"class":128},"      width: 100%;\n",[118,59239,59240],{"class":120,"line":1736},[118,59241,59242],{"class":128},"      height: 320px;\n",[118,59244,59245],{"class":120,"line":1753},[118,59246,2191],{"class":128},[118,59248,59249],{"class":120,"line":1758},[118,59250,2404],{"emptyLinePlaceholder":45},[118,59252,59253],{"class":120,"line":1763},[118,59254,59255],{"class":128},"    .slider-wrapper img {\n",[118,59257,59258],{"class":120,"line":1768},[118,59259,59237],{"class":128},[118,59261,59262],{"class":120,"line":1782},[118,59263,59264],{"class":128},"      height: 100%;\n",[118,59266,59267],{"class":120,"line":1787},[118,59268,59269],{"class":128},"      display: block;\n",[118,59271,59272],{"class":120,"line":2581},[118,59273,2191],{"class":128},[118,59275,59276],{"class":120,"line":2595},[118,59277,2404],{"emptyLinePlaceholder":45},[118,59279,59280],{"class":120,"line":2603},[118,59281,59282],{"class":128},"    .slider-footer {\n",[118,59284,59285],{"class":120,"line":2608},[118,59286,59287],{"class":128},"      height: 80px;\n",[118,59289,59290],{"class":120,"line":2614},[118,59291,59292],{"class":128},"      background-color: rgb(100, 67, 68);\n",[118,59294,59295],{"class":120,"line":2620},[118,59296,59297],{"class":128},"      padding: 12px 12px 0 12px;\n",[118,59299,59300],{"class":120,"line":2625},[118,59301,59302],{"class":128},"      position: relative;\n",[118,59304,59305],{"class":120,"line":7953},[118,59306,2191],{"class":128},[118,59308,59309],{"class":120,"line":7977},[118,59310,2404],{"emptyLinePlaceholder":45},[118,59312,59313],{"class":120,"line":7982},[118,59314,59315],{"class":128},"    .slider-footer .toggle {\n",[118,59317,59318],{"class":120,"line":7988},[118,59319,59320],{"class":128},"      position: absolute;\n",[118,59322,59323],{"class":120,"line":8015},[118,59324,59325],{"class":128},"      right: 0;\n",[118,59327,59328],{"class":120,"line":8020},[118,59329,59330],{"class":128},"      top: 12px;\n",[118,59332,59333],{"class":120,"line":8026},[118,59334,59335],{"class":128},"      display: flex;\n",[118,59337,59338],{"class":120,"line":8038},[118,59339,2191],{"class":128},[118,59341,59342],{"class":120,"line":8050},[118,59343,2404],{"emptyLinePlaceholder":45},[118,59345,59346],{"class":120,"line":8062},[118,59347,59348],{"class":128},"    .slider-footer .toggle button {\n",[118,59350,59351],{"class":120,"line":9721},[118,59352,59353],{"class":128},"      margin-right: 12px;\n",[118,59355,59356],{"class":120,"line":9746},[118,59357,59358],{"class":128},"      width: 28px;\n",[118,59360,59361],{"class":120,"line":9769},[118,59362,59363],{"class":128},"      height: 28px;\n",[118,59365,59366],{"class":120,"line":9793},[118,59367,59368],{"class":128},"      appearance: none;\n",[118,59370,59371],{"class":120,"line":9798},[118,59372,59373],{"class":128},"      border: none;\n",[118,59375,59376],{"class":120,"line":9803},[118,59377,59378],{"class":128},"      background: rgba(255, 255, 255, 0.1);\n",[118,59380,59381],{"class":120,"line":9808},[118,59382,59383],{"class":128},"      color: #fff;\n",[118,59385,59386],{"class":120,"line":9817},[118,59387,59388],{"class":128},"      border-radius: 4px;\n",[118,59390,59391],{"class":120,"line":9822},[118,59392,59393],{"class":128},"      cursor: pointer;\n",[118,59395,59396],{"class":120,"line":9828},[118,59397,2191],{"class":128},[118,59399,59400],{"class":120,"line":9849},[118,59401,2404],{"emptyLinePlaceholder":45},[118,59403,59404],{"class":120,"line":9855},[118,59405,59406],{"class":128},"    .slider-footer .toggle button:hover {\n",[118,59408,59409],{"class":120,"line":9869},[118,59410,59411],{"class":128},"      background: rgba(255, 255, 255, 0.2);\n",[118,59413,59414],{"class":120,"line":9875},[118,59415,2191],{"class":128},[118,59417,59418],{"class":120,"line":9902},[118,59419,2404],{"emptyLinePlaceholder":45},[118,59421,59422],{"class":120,"line":9911},[118,59423,59424],{"class":128},"    .slider-footer p {\n",[118,59426,59427],{"class":120,"line":9917},[118,59428,59429],{"class":128},"      margin: 0;\n",[118,59431,59432],{"class":120,"line":9925},[118,59433,59383],{"class":128},[118,59435,59436],{"class":120,"line":9930},[118,59437,59438],{"class":128},"      font-size: 18px;\n",[118,59440,59441],{"class":120,"line":16609},[118,59442,59443],{"class":128},"      margin-bottom: 10px;\n",[118,59445,59446],{"class":120,"line":16615},[118,59447,2191],{"class":128},[118,59449,59450],{"class":120,"line":16638},[118,59451,2404],{"emptyLinePlaceholder":45},[118,59453,59454],{"class":120,"line":16644},[118,59455,59456],{"class":128},"    .slider-indicator {\n",[118,59458,59459],{"class":120,"line":16667},[118,59460,59429],{"class":128},[118,59462,59463],{"class":120,"line":16681},[118,59464,59465],{"class":128},"      padding: 0;\n",[118,59467,59468],{"class":120,"line":16701},[118,59469,59470],{"class":128},"      list-style: none;\n",[118,59472,59473],{"class":120,"line":16707},[118,59474,59335],{"class":128},[118,59476,59477],{"class":120,"line":16718},[118,59478,59479],{"class":128},"      align-items: center;\n",[118,59481,59482],{"class":120,"line":16741},[118,59483,2191],{"class":128},[118,59485,59486],{"class":120,"line":16763},[118,59487,2404],{"emptyLinePlaceholder":45},[118,59489,59490],{"class":120,"line":16768},[118,59491,59492],{"class":128},"    .slider-indicator li {\n",[118,59494,59495],{"class":120,"line":16774},[118,59496,59497],{"class":128},"      width: 8px;\n",[118,59499,59500],{"class":120,"line":16788},[118,59501,59502],{"class":128},"      height: 8px;\n",[118,59504,59505],{"class":120,"line":16801},[118,59506,59507],{"class":128},"      margin: 4px;\n",[118,59509,59510],{"class":120,"line":16806},[118,59511,59512],{"class":128},"      border-radius: 50%;\n",[118,59514,59515],{"class":120,"line":16820},[118,59516,59517],{"class":128},"      background: #fff;\n",[118,59519,59520],{"class":120,"line":16825},[118,59521,59522],{"class":128},"      opacity: 0.4;\n",[118,59524,59525],{"class":120,"line":16831},[118,59526,59393],{"class":128},[118,59528,59529],{"class":120,"line":16836},[118,59530,2191],{"class":128},[118,59532,59533],{"class":120,"line":16850},[118,59534,2404],{"emptyLinePlaceholder":45},[118,59536,59537],{"class":120,"line":16855},[118,59538,59539],{"class":128},"    .slider-indicator li.active {\n",[118,59541,59542],{"class":120,"line":16860},[118,59543,59544],{"class":128},"      width: 12px;\n",[118,59546,59547],{"class":120,"line":16874},[118,59548,59549],{"class":128},"      height: 12px;\n",[118,59551,59552],{"class":120,"line":16886},[118,59553,59554],{"class":128},"      opacity: 1;\n",[118,59556,59557],{"class":120,"line":16891},[118,59558,2191],{"class":128},[118,59560,59561,59563,59565],{"class":120,"line":16904},[118,59562,52410],{"class":128},[118,59564,5131],{"class":51293},[118,59566,51300],{"class":128},[118,59568,59569,59571,59573],{"class":120,"line":16909},[118,59570,51778],{"class":128},[118,59572,51327],{"class":51293},[118,59574,51300],{"class":128},[118,59576,59577],{"class":120,"line":16914},[118,59578,2404],{"emptyLinePlaceholder":45},[118,59580,59581,59583,59585],{"class":120,"line":16919},[118,59582,1038],{"class":128},[118,59584,51793],{"class":51293},[118,59586,51300],{"class":128},[118,59588,59589,59591,59593,59595,59597,59600],{"class":120,"line":16932},[118,59590,52137],{"class":128},[118,59592,51604],{"class":51293},[118,59594,53479],{"class":1967},[118,59596,174],{"class":128},[118,59598,59599],{"class":233},"\"slider\"",[118,59601,51300],{"class":128},[118,59603,59604,59606,59608,59610,59612,59614],{"class":120,"line":16937},[118,59605,51334],{"class":128},[118,59607,51604],{"class":51293},[118,59609,53479],{"class":1967},[118,59611,174],{"class":128},[118,59613,55220],{"class":233},[118,59615,51300],{"class":128},[118,59617,59618,59620,59622,59624,59626,59629,59631,59633,59635],{"class":120,"line":32626},[118,59619,55227],{"class":128},[118,59621,1466],{"class":51293},[118,59623,55232],{"class":1967},[118,59625,174],{"class":128},[118,59627,59628],{"class":233},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[118,59630,55240],{"class":1967},[118,59632,174],{"class":128},[118,59634,7657],{"class":233},[118,59636,59120],{"class":128},[118,59638,59639,59641,59643],{"class":120,"line":32632},[118,59640,51769],{"class":128},[118,59642,51604],{"class":51293},[118,59644,51300],{"class":128},[118,59646,59647,59649,59651,59653,59655,59657],{"class":120,"line":32638},[118,59648,51334],{"class":128},[118,59650,51604],{"class":51293},[118,59652,53479],{"class":1967},[118,59654,174],{"class":128},[118,59656,55267],{"class":233},[118,59658,51300],{"class":128},[118,59660,59661,59663,59665,59668,59670],{"class":120,"line":32644},[118,59662,55227],{"class":128},[118,59664,15],{"class":51293},[118,59666,59667],{"class":128},">对人类来说会不会太超前了？\u003C\u002F",[118,59669,15],{"class":51293},[118,59671,51300],{"class":128},[118,59673,59674,59676,59678,59680,59682,59685],{"class":120,"line":32650},[118,59675,55227],{"class":128},[118,59677,1135],{"class":51293},[118,59679,53479],{"class":1967},[118,59681,174],{"class":128},[118,59683,59684],{"class":233},"\"slider-indicator\"",[118,59686,51300],{"class":128},[118,59688,59689,59691,59693,59695,59697,59700,59702,59704],{"class":120,"line":32661},[118,59690,55295],{"class":128},[118,59692,75],{"class":51293},[118,59694,53479],{"class":1967},[118,59696,174],{"class":128},[118,59698,59699],{"class":233},"\"active\"",[118,59701,55307],{"class":128},[118,59703,75],{"class":51293},[118,59705,51300],{"class":128},[118,59707,59708,59710,59712,59714,59716],{"class":120,"line":32667},[118,59709,55295],{"class":128},[118,59711,75],{"class":51293},[118,59713,55307],{"class":128},[118,59715,75],{"class":51293},[118,59717,51300],{"class":128},[118,59719,59720,59722,59724,59726,59728],{"class":120,"line":32687},[118,59721,55295],{"class":128},[118,59723,75],{"class":51293},[118,59725,55307],{"class":128},[118,59727,75],{"class":51293},[118,59729,51300],{"class":128},[118,59731,59732,59734,59736,59738,59740],{"class":120,"line":32693},[118,59733,55295],{"class":128},[118,59735,75],{"class":51293},[118,59737,55307],{"class":128},[118,59739,75],{"class":51293},[118,59741,51300],{"class":128},[118,59743,59744,59746,59748,59750,59752],{"class":120,"line":32704},[118,59745,55295],{"class":128},[118,59747,75],{"class":51293},[118,59749,55307],{"class":128},[118,59751,75],{"class":51293},[118,59753,51300],{"class":128},[118,59755,59756,59758,59760,59762,59764],{"class":120,"line":32710},[118,59757,55295],{"class":128},[118,59759,75],{"class":51293},[118,59761,55307],{"class":128},[118,59763,75],{"class":51293},[118,59765,51300],{"class":128},[118,59767,59768,59770,59772,59774,59776],{"class":120,"line":32716},[118,59769,55295],{"class":128},[118,59771,75],{"class":51293},[118,59773,55307],{"class":128},[118,59775,75],{"class":51293},[118,59777,51300],{"class":128},[118,59779,59780,59782,59784,59786,59788],{"class":120,"line":32722},[118,59781,55295],{"class":128},[118,59783,75],{"class":51293},[118,59785,55307],{"class":128},[118,59787,75],{"class":51293},[118,59789,51300],{"class":128},[118,59791,59792,59794,59796],{"class":120,"line":32728},[118,59793,55400],{"class":128},[118,59795,1135],{"class":51293},[118,59797,51300],{"class":128},[118,59799,59800,59802,59804,59806,59808,59811],{"class":120,"line":32734},[118,59801,55227],{"class":128},[118,59803,51604],{"class":51293},[118,59805,53479],{"class":1967},[118,59807,174],{"class":128},[118,59809,59810],{"class":233},"\"toggle\"",[118,59812,51300],{"class":128},[118,59814,59815,59817,59819,59821,59823,59826,59828,59831,59833,59835],{"class":120,"line":32740},[118,59816,55295],{"class":128},[118,59818,53880],{"class":51293},[118,59820,53479],{"class":1967},[118,59822,174],{"class":128},[118,59824,59825],{"class":233},"\"prev\"",[118,59827,1088],{"class":128},[118,59829,59830],{"class":177},"&lt;",[118,59832,51778],{"class":128},[118,59834,53880],{"class":51293},[118,59836,51300],{"class":128},[118,59838,59839,59841,59843,59845,59847,59850,59852,59855,59857,59859],{"class":120,"line":32746},[118,59840,55295],{"class":128},[118,59842,53880],{"class":51293},[118,59844,53479],{"class":1967},[118,59846,174],{"class":128},[118,59848,59849],{"class":233},"\"next\"",[118,59851,1088],{"class":128},[118,59853,59854],{"class":177},"&gt;",[118,59856,51778],{"class":128},[118,59858,53880],{"class":51293},[118,59860,51300],{"class":128},[118,59862,59863,59865,59867],{"class":120,"line":32766},[118,59864,55400],{"class":128},[118,59866,51604],{"class":51293},[118,59868,51300],{"class":128},[118,59870,59871,59873,59875],{"class":120,"line":32772},[118,59872,51769],{"class":128},[118,59874,51604],{"class":51293},[118,59876,51300],{"class":128},[118,59878,59879,59881,59883],{"class":120,"line":32788},[118,59880,52410],{"class":128},[118,59882,51604],{"class":51293},[118,59884,51300],{"class":128},[118,59886,59887,59889,59891],{"class":120,"line":32794},[118,59888,52137],{"class":128},[118,59890,51806],{"class":51293},[118,59892,51300],{"class":128},[118,59894,59895],{"class":120,"line":32808},[118,59896,59897],{"class":128},"    \u002F\u002F 1. 初始数据\n",[118,59899,59900],{"class":120,"line":32814},[118,59901,59902],{"class":128},"    const data = [\n",[118,59904,59905],{"class":120,"line":32829},[118,59906,59907],{"class":128},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[118,59909,59910],{"class":120,"line":32835},[118,59911,59912],{"class":128},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[118,59914,59915],{"class":120,"line":32844},[118,59916,59917],{"class":128},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[118,59919,59920],{"class":120,"line":32850},[118,59921,59922],{"class":128},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[118,59924,59925],{"class":120,"line":32859},[118,59926,59927],{"class":128},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[118,59929,59930],{"class":120,"line":32865},[118,59931,59932],{"class":128},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[118,59934,59935],{"class":120,"line":32871},[118,59936,59937],{"class":128},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[118,59939,59940],{"class":120,"line":32880},[118,59941,59942],{"class":128},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[118,59944,59945],{"class":120,"line":32886},[118,59946,53102],{"class":128},[118,59948,59949],{"class":120,"line":32897},[118,59950,59951],{"class":128},"    \u002F\u002F 获取元素\n",[118,59953,59954],{"class":120,"line":32903},[118,59955,59956],{"class":128},"    const img = document.querySelector('.slider-wrapper img')\n",[118,59958,59959],{"class":120,"line":32922},[118,59960,59961],{"class":128},"    const p = document.querySelector('.slider-footer p')\n",[118,59963,59964],{"class":120,"line":32928},[118,59965,59966],{"class":128},"    const footer = document.querySelector('.slider-footer')\n",[118,59968,59969],{"class":120,"line":32939},[118,59970,59971],{"class":128},"    \u002F\u002F 1. 右按钮业务\n",[118,59973,59974],{"class":120,"line":32945},[118,59975,59976],{"class":128},"    \u002F\u002F 1.1 获取右侧按钮 \n",[118,59978,59979],{"class":120,"line":32965},[118,59980,59981],{"class":128},"    const next = document.querySelector('.next')\n",[118,59983,59984],{"class":120,"line":32981},[118,59985,59986],{"class":128},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[118,59988,59989],{"class":120,"line":32987},[118,59990,59991],{"class":128},"    \u002F\u002F 1.2 注册点击事件\n",[118,59993,59994],{"class":120,"line":33001},[118,59995,2404],{"emptyLinePlaceholder":45},[118,59997,59998],{"class":120,"line":33007},[118,59999,60000],{"class":128},"    next.addEventListener('click', function () {\n",[118,60002,60003],{"class":120,"line":33013},[118,60004,60005],{"class":128},"      \u002F\u002F console.log(11)\n",[118,60007,60008],{"class":120,"line":33024},[118,60009,60010],{"class":128},"      i++\n",[118,60012,60013],{"class":120,"line":33030},[118,60014,60015],{"class":128},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[118,60017,60018],{"class":120,"line":33036},[118,60019,60020],{"class":128},"      \u002F\u002F if (i >= 8) {\n",[118,60022,60023],{"class":120,"line":33046},[118,60024,60025],{"class":128},"      \u002F\u002F   i = 0\n",[118,60027,60028],{"class":120,"line":33052},[118,60029,60030],{"class":128},"      \u002F\u002F }\n",[118,60032,60033],{"class":120,"line":33063},[118,60034,60035],{"class":128},"      i = i >= data.length ? 0 : i\n",[118,60037,60038],{"class":120,"line":33069},[118,60039,60040],{"class":128},"      \u002F\u002F 1.3 得到对应的对象\n",[118,60042,60043],{"class":120,"line":33079},[118,60044,60045],{"class":128},"      \u002F\u002F console.log(data[i])\n",[118,60047,60048],{"class":120,"line":33084},[118,60049,60050],{"class":128},"      \u002F\u002F 调用函数\n",[118,60052,60053],{"class":120,"line":33090},[118,60054,60055],{"class":128},"      toggle()\n",[118,60057,60058],{"class":120,"line":33139},[118,60059,33454],{"class":128},[118,60061,60062],{"class":120,"line":33186},[118,60063,2404],{"emptyLinePlaceholder":45},[118,60065,60066],{"class":120,"line":33191},[118,60067,60068],{"class":128},"    \u002F\u002F 2. 左侧按钮业务\n",[118,60070,60071],{"class":120,"line":33197},[118,60072,60073],{"class":128},"    \u002F\u002F 2.1 获取左侧按钮 \n",[118,60075,60076],{"class":120,"line":33216},[118,60077,60078],{"class":128},"    const prev = document.querySelector('.prev')\n",[118,60080,60081],{"class":120,"line":33222},[118,60082,59991],{"class":128},[118,60084,60085],{"class":120,"line":33242},[118,60086,60087],{"class":128},"    prev.addEventListener('click', function () {\n",[118,60089,60090],{"class":120,"line":33248},[118,60091,60092],{"class":128},"      i--\n",[118,60094,60095],{"class":120,"line":33254},[118,60096,60097],{"class":128},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[118,60099,60100],{"class":120,"line":33264},[118,60101,60102],{"class":128},"      \u002F\u002F if (i \u003C 0) {\n",[118,60104,60105],{"class":120,"line":33269},[118,60106,60107],{"class":128},"      \u002F\u002F   i = 7\n",[118,60109,60110],{"class":120,"line":33275},[118,60111,60030],{"class":128},[118,60113,60114],{"class":120,"line":33291},[118,60115,60116],{"class":128},"      i = i \u003C 0 ? data.length - 1 : i\n",[118,60118,60119],{"class":120,"line":33336},[118,60120,60040],{"class":128},[118,60122,60123],{"class":120,"line":33342},[118,60124,60045],{"class":128},[118,60126,60127],{"class":120,"line":33348},[118,60128,60050],{"class":128},[118,60130,60131],{"class":120,"line":33354},[118,60132,60055],{"class":128},[118,60134,60135],{"class":120,"line":33365},[118,60136,33454],{"class":128},[118,60138,60139],{"class":120,"line":33371},[118,60140,2404],{"emptyLinePlaceholder":45},[118,60142,60143],{"class":120,"line":33377},[118,60144,60145],{"class":128},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[118,60147,60148],{"class":120,"line":33383},[118,60149,60150],{"class":128},"    function toggle() {\n",[118,60152,60153],{"class":120,"line":33401},[118,60154,60155],{"class":128},"      \u002F\u002F 1.4 渲染对应的数据\n",[118,60157,60158],{"class":120,"line":33415},[118,60159,60160],{"class":128},"      img.src = data[i].url\n",[118,60162,60163],{"class":120,"line":33424},[118,60164,60165],{"class":128},"      p.innerHTML = data[i].title\n",[118,60167,60168],{"class":120,"line":33433},[118,60169,60170],{"class":128},"      footer.style.backgroundColor = data[i].color\n",[118,60172,60173],{"class":120,"line":33442},[118,60174,60175],{"class":128},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[118,60177,60178],{"class":120,"line":33451},[118,60179,60180],{"class":128},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[118,60182,60183],{"class":120,"line":33457},[118,60184,60185],{"class":128},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[118,60187,60188],{"class":120,"line":33463},[118,60189,2191],{"class":128},[118,60191,60192],{"class":120,"line":33471},[118,60193,2404],{"emptyLinePlaceholder":45},[118,60195,60196],{"class":120,"line":33476},[118,60197,60198],{"class":128},"    \u002F\u002F 3. 自动播放模块\n",[118,60200,60201],{"class":120,"line":33482},[118,60202,60203],{"class":128},"    let timerId = setInterval(function () {\n",[118,60205,60206],{"class":120,"line":33493},[118,60207,60208],{"class":128},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[118,60210,60211],{"class":120,"line":33499},[118,60212,60213],{"class":128},"      next.click()\n",[118,60215,60216],{"class":120,"line":33519},[118,60217,60218],{"class":128},"    }, 1000)\n",[118,60220,60221],{"class":120,"line":33525},[118,60222,2404],{"emptyLinePlaceholder":45},[118,60224,60225],{"class":120,"line":33531},[118,60226,60227],{"class":128},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[118,60229,60230],{"class":120,"line":33537},[118,60231,60232],{"class":128},"    const slider = document.querySelector('.slider')\n",[118,60234,60235],{"class":120,"line":33554},[118,60236,60237],{"class":128},"    \u002F\u002F 注册事件\n",[118,60239,60240],{"class":120,"line":33560},[118,60241,60242],{"class":128},"    slider.addEventListener('mouseenter', function () {\n",[118,60244,60245],{"class":120,"line":33566},[118,60246,60247],{"class":128},"      \u002F\u002F 停止定时器\n",[118,60249,60250],{"class":120,"line":33572},[118,60251,60252],{"class":128},"      clearInterval(timerId)\n",[118,60254,60255],{"class":120,"line":33578},[118,60256,33454],{"class":128},[118,60258,60259],{"class":120,"line":33584},[118,60260,2404],{"emptyLinePlaceholder":45},[118,60262,60263],{"class":120,"line":33611},[118,60264,60265],{"class":128},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[118,60267,60268],{"class":120,"line":33635},[118,60269,60237],{"class":128},[118,60271,60272],{"class":120,"line":33641},[118,60273,60274],{"class":128},"    slider.addEventListener('mouseleave', function () {\n",[118,60276,60277],{"class":120,"line":33647},[118,60278,60247],{"class":128},[118,60280,60281],{"class":120,"line":33653},[118,60282,60283],{"class":128},"      if (timerId) clearInterval(timerId)\n",[118,60285,60286],{"class":120,"line":33664},[118,60287,60288],{"class":128},"      \u002F\u002F 开启定时器\n",[118,60290,60291],{"class":120,"line":33675},[118,60292,60293],{"class":128},"      timerId = setInterval(function () {\n",[118,60295,60296],{"class":120,"line":33681},[118,60297,60298],{"class":128},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[118,60300,60301],{"class":120,"line":33698},[118,60302,60303],{"class":128},"        next.click()\n",[118,60305,60306],{"class":120,"line":33721},[118,60307,60308],{"class":128},"      }, 1000)\n",[118,60310,60311],{"class":120,"line":33744},[118,60312,33454],{"class":128},[118,60314,60315,60317,60319],{"class":120,"line":33750},[118,60316,52410],{"class":128},[118,60318,51806],{"class":51293},[118,60320,51300],{"class":128},[118,60322,60323,60325,60327],{"class":120,"line":33755},[118,60324,51778],{"class":128},[118,60326,51793],{"class":51293},[118,60328,51300],{"class":128},[118,60330,60331],{"class":120,"line":33764},[118,60332,2404],{"emptyLinePlaceholder":45},[118,60334,60335,60337,60339],{"class":120,"line":33774},[118,60336,51778],{"class":128},[118,60338,50628],{"class":51293},[118,60340,51300],{"class":128},[22003,60342,60344],{"id":60343},"_3252-焦点事件","3.2.5.2 焦点事件",[15,60346,60347],{},"小米搜索框案例：",[109,60349,60351],{"className":50626,"code":60350,"language":50628,"meta":39,"style":39},"\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",[115,60352,60353,60363,60377,60381,60389,60403,60423,60443,60455,60463,60469,60479,60489,60501,60505,60509,60516,60520,60531,60535,60539,60546,60557,60570,60584,60588,60592,60601,60613,60625,60639,60652,60665,60683,60694,60698,60702,60711,60728,60732,60736,60743,60753,60763,60774,60787,60799,60815,60826,60838,60842,60846,60854,60865,60882,60894,60906,60917,60921,60925,60936,60947,60951,60959,60963,60971,60975,60983,60998,61021,61036,61067,61094,61121,61148,61175,61202,61229,61238,61246,61254,61259,61279,61299,61304,61309,61327,61332,61342,61347,61361,61366,61371,61388,61397,61409,61413,61421,61429,61433],{"__ignoreMap":39},[118,60354,60355,60357,60359,60361],{"class":120,"line":121},[118,60356,51290],{"class":128},[118,60358,51294],{"class":51293},[118,60360,51297],{"class":1967},[118,60362,51300],{"class":128},[118,60364,60365,60367,60369,60371,60373,60375],{"class":120,"line":40},[118,60366,1038],{"class":128},[118,60368,50628],{"class":51293},[118,60370,51309],{"class":1967},[118,60372,174],{"class":128},[118,60374,51314],{"class":233},[118,60376,51300],{"class":128},[118,60378,60379],{"class":120,"line":1183},[118,60380,2404],{"emptyLinePlaceholder":45},[118,60382,60383,60385,60387],{"class":120,"line":1198},[118,60384,1038],{"class":128},[118,60386,51327],{"class":51293},[118,60388,51300],{"class":128},[118,60390,60391,60393,60395,60397,60399,60401],{"class":120,"line":1204},[118,60392,51334],{"class":128},[118,60394,51337],{"class":51293},[118,60396,51340],{"class":1967},[118,60398,174],{"class":128},[118,60400,51345],{"class":233},[118,60402,51300],{"class":128},[118,60404,60405,60407,60409,60411,60413,60415,60417,60419,60421],{"class":120,"line":1218},[118,60406,51334],{"class":128},[118,60408,51337],{"class":51293},[118,60410,51356],{"class":1967},[118,60412,174],{"class":128},[118,60414,51361],{"class":233},[118,60416,51364],{"class":1967},[118,60418,174],{"class":128},[118,60420,51369],{"class":233},[118,60422,51300],{"class":128},[118,60424,60425,60427,60429,60431,60433,60435,60437,60439,60441],{"class":120,"line":1224},[118,60426,51334],{"class":128},[118,60428,51337],{"class":51293},[118,60430,14925],{"class":1967},[118,60432,174],{"class":128},[118,60434,51384],{"class":233},[118,60436,51364],{"class":1967},[118,60438,174],{"class":128},[118,60440,51391],{"class":233},[118,60442,51300],{"class":128},[118,60444,60445,60447,60449,60451,60453],{"class":120,"line":1315},[118,60446,51334],{"class":128},[118,60448,51400],{"class":51293},[118,60450,51403],{"class":128},[118,60452,51400],{"class":51293},[118,60454,51300],{"class":128},[118,60456,60457,60459,60461],{"class":120,"line":1321},[118,60458,51334],{"class":128},[118,60460,5131],{"class":51293},[118,60462,51300],{"class":128},[118,60464,60465,60467],{"class":120,"line":1333},[118,60466,51420],{"class":51293},[118,60468,15577],{"class":128},[118,60470,60471,60473,60475,60477],{"class":120,"line":1616},[118,60472,51427],{"class":177},[118,60474,51430],{"class":128},[118,60476,320],{"class":177},[118,60478,1294],{"class":128},[118,60480,60481,60483,60485,60487],{"class":120,"line":1621},[118,60482,51439],{"class":177},[118,60484,51430],{"class":128},[118,60486,320],{"class":177},[118,60488,1294],{"class":128},[118,60490,60491,60494,60496,60499],{"class":120,"line":1627},[118,60492,60493],{"class":177},"            box-sizing",[118,60495,51430],{"class":128},[118,60497,60498],{"class":177},"border-box",[118,60500,1294],{"class":128},[118,60502,60503],{"class":120,"line":1632},[118,60504,2533],{"class":128},[118,60506,60507],{"class":120,"line":1646},[118,60508,2404],{"emptyLinePlaceholder":45},[118,60510,60511,60514],{"class":120,"line":1651},[118,60512,60513],{"class":51293},"        ul",[118,60515,15577],{"class":128},[118,60517,60518],{"class":120,"line":1657},[118,60519,2404],{"emptyLinePlaceholder":45},[118,60521,60522,60525,60527,60529],{"class":120,"line":1678},[118,60523,60524],{"class":177},"            list-style",[118,60526,51430],{"class":128},[118,60528,54730],{"class":177},[118,60530,1294],{"class":128},[118,60532,60533],{"class":120,"line":1683},[118,60534,2533],{"class":128},[118,60536,60537],{"class":120,"line":1697},[118,60538,2404],{"emptyLinePlaceholder":45},[118,60540,60541,60544],{"class":120,"line":1702},[118,60542,60543],{"class":1967},"        .mi",[118,60545,15577],{"class":128},[118,60547,60548,60551,60553,60555],{"class":120,"line":1731},[118,60549,60550],{"class":177},"            position",[118,60552,51430],{"class":128},[118,60554,54757],{"class":177},[118,60556,1294],{"class":128},[118,60558,60559,60561,60563,60566,60568],{"class":120,"line":1736},[118,60560,51477],{"class":177},[118,60562,51430],{"class":128},[118,60564,60565],{"class":177},"223",[118,60567,51485],{"class":124},[118,60569,1294],{"class":128},[118,60571,60572,60574,60576,60578,60580,60582],{"class":120,"line":1753},[118,60573,51427],{"class":177},[118,60575,51430],{"class":128},[118,60577,439],{"class":177},[118,60579,51485],{"class":124},[118,60581,51549],{"class":177},[118,60583,1294],{"class":128},[118,60585,60586],{"class":120,"line":1758},[118,60587,2533],{"class":128},[118,60589,60590],{"class":120,"line":1763},[118,60591,2404],{"emptyLinePlaceholder":45},[118,60593,60594,60596,60599],{"class":120,"line":1768},[118,60595,60543],{"class":1967},[118,60597,60598],{"class":51293}," input",[118,60600,15577],{"class":128},[118,60602,60603,60605,60607,60609,60611],{"class":120,"line":1782},[118,60604,51477],{"class":177},[118,60606,51430],{"class":128},[118,60608,60565],{"class":177},[118,60610,51485],{"class":124},[118,60612,1294],{"class":128},[118,60614,60615,60617,60619,60621,60623],{"class":120,"line":1787},[118,60616,51492],{"class":177},[118,60618,51430],{"class":128},[118,60620,735],{"class":177},[118,60622,51485],{"class":124},[118,60624,1294],{"class":128},[118,60626,60627,60629,60631,60633,60635,60637],{"class":120,"line":2581},[118,60628,51439],{"class":177},[118,60630,51430],{"class":128},[118,60632,320],{"class":177},[118,60634,2042],{"class":177},[118,60636,51485],{"class":124},[118,60638,1294],{"class":128},[118,60640,60641,60644,60646,60648,60650],{"class":120,"line":2595},[118,60642,60643],{"class":177},"            font-size",[118,60645,51430],{"class":128},[118,60647,677],{"class":177},[118,60649,51485],{"class":124},[118,60651,1294],{"class":128},[118,60653,60654,60657,60659,60661,60663],{"class":120,"line":2603},[118,60655,60656],{"class":177},"            line-height",[118,60658,51430],{"class":128},[118,60660,735],{"class":177},[118,60662,51485],{"class":124},[118,60664,1294],{"class":128},[118,60666,60667,60670,60672,60674,60676,60678,60681],{"class":120,"line":2608},[118,60668,60669],{"class":177},"            border",[118,60671,51430],{"class":128},[118,60673,346],{"class":177},[118,60675,51485],{"class":124},[118,60677,51514],{"class":177},[118,60679,60680],{"class":177}," #e0e0e0",[118,60682,1294],{"class":128},[118,60684,60685,60688,60690,60692],{"class":120,"line":2614},[118,60686,60687],{"class":177},"            outline",[118,60689,51430],{"class":128},[118,60691,54730],{"class":177},[118,60693,1294],{"class":128},[118,60695,60696],{"class":120,"line":2620},[118,60697,2533],{"class":128},[118,60699,60700],{"class":120,"line":2625},[118,60701,2404],{"emptyLinePlaceholder":45},[118,60703,60704,60706,60709],{"class":120,"line":7953},[118,60705,60543],{"class":1967},[118,60707,60708],{"class":1967}," .search",[118,60710,15577],{"class":128},[118,60712,60713,60715,60717,60719,60721,60723,60726],{"class":120,"line":7977},[118,60714,60669],{"class":177},[118,60716,51430],{"class":128},[118,60718,346],{"class":177},[118,60720,51485],{"class":124},[118,60722,51514],{"class":177},[118,60724,60725],{"class":177}," #ff6700",[118,60727,1294],{"class":128},[118,60729,60730],{"class":120,"line":7982},[118,60731,2533],{"class":128},[118,60733,60734],{"class":120,"line":7988},[118,60735,2404],{"emptyLinePlaceholder":45},[118,60737,60738,60741],{"class":120,"line":8015},[118,60739,60740],{"class":1967},"        .result-list",[118,60742,15577],{"class":128},[118,60744,60745,60747,60749,60751],{"class":120,"line":8020},[118,60746,51465],{"class":177},[118,60748,51430],{"class":128},[118,60750,54730],{"class":177},[118,60752,1294],{"class":128},[118,60754,60755,60757,60759,60761],{"class":120,"line":8026},[118,60756,60550],{"class":177},[118,60758,51430],{"class":128},[118,60760,54824],{"class":177},[118,60762,1294],{"class":128},[118,60764,60765,60768,60770,60772],{"class":120,"line":8038},[118,60766,60767],{"class":177},"            left",[118,60769,51430],{"class":128},[118,60771,320],{"class":177},[118,60773,1294],{"class":128},[118,60775,60776,60779,60781,60783,60785],{"class":120,"line":8050},[118,60777,60778],{"class":177},"            top",[118,60780,51430],{"class":128},[118,60782,735],{"class":177},[118,60784,51485],{"class":124},[118,60786,1294],{"class":128},[118,60788,60789,60791,60793,60795,60797],{"class":120,"line":8062},[118,60790,51477],{"class":177},[118,60792,51430],{"class":128},[118,60794,60565],{"class":177},[118,60796,51485],{"class":124},[118,60798,1294],{"class":128},[118,60800,60801,60803,60805,60807,60809,60811,60813],{"class":120,"line":9721},[118,60802,60669],{"class":177},[118,60804,51430],{"class":128},[118,60806,346],{"class":177},[118,60808,51485],{"class":124},[118,60810,51514],{"class":177},[118,60812,60725],{"class":177},[118,60814,1294],{"class":128},[118,60816,60817,60820,60822,60824],{"class":120,"line":9746},[118,60818,60819],{"class":177},"            border-top",[118,60821,51430],{"class":128},[118,60823,320],{"class":177},[118,60825,1294],{"class":128},[118,60827,60828,60831,60833,60836],{"class":120,"line":9769},[118,60829,60830],{"class":177},"            background",[118,60832,51430],{"class":128},[118,60834,60835],{"class":177},"#fff",[118,60837,1294],{"class":128},[118,60839,60840],{"class":120,"line":9793},[118,60841,2533],{"class":128},[118,60843,60844],{"class":120,"line":9798},[118,60845,2404],{"emptyLinePlaceholder":45},[118,60847,60848,60850,60852],{"class":120,"line":9803},[118,60849,60740],{"class":1967},[118,60851,1402],{"class":51293},[118,60853,15577],{"class":128},[118,60855,60856,60858,60860,60863],{"class":120,"line":9808},[118,60857,51465],{"class":177},[118,60859,51430],{"class":128},[118,60861,60862],{"class":177},"block",[118,60864,1294],{"class":128},[118,60866,60867,60869,60871,60873,60875,60878,60880],{"class":120,"line":9817},[118,60868,51439],{"class":177},[118,60870,51430],{"class":128},[118,60872,472],{"class":177},[118,60874,51485],{"class":124},[118,60876,60877],{"class":177}," 15",[118,60879,51485],{"class":124},[118,60881,1294],{"class":128},[118,60883,60884,60886,60888,60890,60892],{"class":120,"line":9822},[118,60885,60643],{"class":177},[118,60887,51430],{"class":128},[118,60889,626],{"class":177},[118,60891,51485],{"class":124},[118,60893,1294],{"class":128},[118,60895,60896,60899,60901,60904],{"class":120,"line":9828},[118,60897,60898],{"class":177},"            color",[118,60900,51430],{"class":128},[118,60902,60903],{"class":177},"#424242",[118,60905,1294],{"class":128},[118,60907,60908,60911,60913,60915],{"class":120,"line":9849},[118,60909,60910],{"class":177},"            text-decoration",[118,60912,51430],{"class":128},[118,60914,54730],{"class":177},[118,60916,1294],{"class":128},[118,60918,60919],{"class":120,"line":9855},[118,60920,2533],{"class":128},[118,60922,60923],{"class":120,"line":9869},[118,60924,2404],{"emptyLinePlaceholder":45},[118,60926,60927,60929,60931,60934],{"class":120,"line":9875},[118,60928,60740],{"class":1967},[118,60930,1402],{"class":51293},[118,60932,60933],{"class":1967},":hover",[118,60935,15577],{"class":128},[118,60937,60938,60940,60942,60945],{"class":120,"line":9902},[118,60939,51633],{"class":177},[118,60941,51430],{"class":128},[118,60943,60944],{"class":177},"#eee",[118,60946,1294],{"class":128},[118,60948,60949],{"class":120,"line":9911},[118,60950,2533],{"class":128},[118,60952,60953,60955,60957],{"class":120,"line":9917},[118,60954,51769],{"class":128},[118,60956,5131],{"class":51293},[118,60958,51300],{"class":128},[118,60960,60961],{"class":120,"line":9925},[118,60962,2404],{"emptyLinePlaceholder":45},[118,60964,60965,60967,60969],{"class":120,"line":9930},[118,60966,51778],{"class":128},[118,60968,51327],{"class":51293},[118,60970,51300],{"class":128},[118,60972,60973],{"class":120,"line":16609},[118,60974,2404],{"emptyLinePlaceholder":45},[118,60976,60977,60979,60981],{"class":120,"line":16615},[118,60978,1038],{"class":128},[118,60980,51793],{"class":51293},[118,60982,51300],{"class":128},[118,60984,60985,60987,60989,60991,60993,60996],{"class":120,"line":16638},[118,60986,51334],{"class":128},[118,60988,51604],{"class":51293},[118,60990,53479],{"class":1967},[118,60992,174],{"class":128},[118,60994,60995],{"class":233},"\"mi\"",[118,60997,51300],{"class":128},[118,60999,61000,61002,61004,61006,61008,61011,61014,61016,61019],{"class":120,"line":16644},[118,61001,55295],{"class":128},[118,61003,53814],{"class":51293},[118,61005,53817],{"class":1967},[118,61007,174],{"class":128},[118,61009,61010],{"class":233},"\"search\"",[118,61012,61013],{"class":1967}," placeholder",[118,61015,174],{"class":128},[118,61017,61018],{"class":233},"\"小米笔记本\"",[118,61020,51300],{"class":128},[118,61022,61023,61025,61027,61029,61031,61034],{"class":120,"line":16667},[118,61024,55295],{"class":128},[118,61026,1135],{"class":51293},[118,61028,53479],{"class":1967},[118,61030,174],{"class":128},[118,61032,61033],{"class":233},"\"result-list\"",[118,61035,51300],{"class":128},[118,61037,61038,61041,61043,61046,61048,61051,61053,61056,61059,61061,61063,61065],{"class":120,"line":16681},[118,61039,61040],{"class":128},"            \u003C",[118,61042,75],{"class":51293},[118,61044,61045],{"class":128},">\u003C",[118,61047,21],{"class":51293},[118,61049,61050],{"class":1967}," href",[118,61052,174],{"class":128},[118,61054,61055],{"class":233},"\"#\"",[118,61057,61058],{"class":128},">全部商品\u003C\u002F",[118,61060,21],{"class":51293},[118,61062,55307],{"class":128},[118,61064,75],{"class":51293},[118,61066,51300],{"class":128},[118,61068,61069,61071,61073,61075,61077,61079,61081,61083,61086,61088,61090,61092],{"class":120,"line":16701},[118,61070,61040],{"class":128},[118,61072,75],{"class":51293},[118,61074,61045],{"class":128},[118,61076,21],{"class":51293},[118,61078,61050],{"class":1967},[118,61080,174],{"class":128},[118,61082,61055],{"class":233},[118,61084,61085],{"class":128},">小米11\u003C\u002F",[118,61087,21],{"class":51293},[118,61089,55307],{"class":128},[118,61091,75],{"class":51293},[118,61093,51300],{"class":128},[118,61095,61096,61098,61100,61102,61104,61106,61108,61110,61113,61115,61117,61119],{"class":120,"line":16707},[118,61097,61040],{"class":128},[118,61099,75],{"class":51293},[118,61101,61045],{"class":128},[118,61103,21],{"class":51293},[118,61105,61050],{"class":1967},[118,61107,174],{"class":128},[118,61109,61055],{"class":233},[118,61111,61112],{"class":128},">小米10S\u003C\u002F",[118,61114,21],{"class":51293},[118,61116,55307],{"class":128},[118,61118,75],{"class":51293},[118,61120,51300],{"class":128},[118,61122,61123,61125,61127,61129,61131,61133,61135,61137,61140,61142,61144,61146],{"class":120,"line":16718},[118,61124,61040],{"class":128},[118,61126,75],{"class":51293},[118,61128,61045],{"class":128},[118,61130,21],{"class":51293},[118,61132,61050],{"class":1967},[118,61134,174],{"class":128},[118,61136,61055],{"class":233},[118,61138,61139],{"class":128},">小米笔记本\u003C\u002F",[118,61141,21],{"class":51293},[118,61143,55307],{"class":128},[118,61145,75],{"class":51293},[118,61147,51300],{"class":128},[118,61149,61150,61152,61154,61156,61158,61160,61162,61164,61167,61169,61171,61173],{"class":120,"line":16741},[118,61151,61040],{"class":128},[118,61153,75],{"class":51293},[118,61155,61045],{"class":128},[118,61157,21],{"class":51293},[118,61159,61050],{"class":1967},[118,61161,174],{"class":128},[118,61163,61055],{"class":233},[118,61165,61166],{"class":128},">小米手机\u003C\u002F",[118,61168,21],{"class":51293},[118,61170,55307],{"class":128},[118,61172,75],{"class":51293},[118,61174,51300],{"class":128},[118,61176,61177,61179,61181,61183,61185,61187,61189,61191,61194,61196,61198,61200],{"class":120,"line":16763},[118,61178,61040],{"class":128},[118,61180,75],{"class":51293},[118,61182,61045],{"class":128},[118,61184,21],{"class":51293},[118,61186,61050],{"class":1967},[118,61188,174],{"class":128},[118,61190,61055],{"class":233},[118,61192,61193],{"class":128},">黑鲨4\u003C\u002F",[118,61195,21],{"class":51293},[118,61197,55307],{"class":128},[118,61199,75],{"class":51293},[118,61201,51300],{"class":128},[118,61203,61204,61206,61208,61210,61212,61214,61216,61218,61221,61223,61225,61227],{"class":120,"line":16768},[118,61205,61040],{"class":128},[118,61207,75],{"class":51293},[118,61209,61045],{"class":128},[118,61211,21],{"class":51293},[118,61213,61050],{"class":1967},[118,61215,174],{"class":128},[118,61217,61055],{"class":233},[118,61219,61220],{"class":128},">空调\u003C\u002F",[118,61222,21],{"class":51293},[118,61224,55307],{"class":128},[118,61226,75],{"class":51293},[118,61228,51300],{"class":128},[118,61230,61231,61234,61236],{"class":120,"line":16774},[118,61232,61233],{"class":128},"        \u003C\u002F",[118,61235,1135],{"class":51293},[118,61237,51300],{"class":128},[118,61239,61240,61242,61244],{"class":120,"line":16788},[118,61241,51769],{"class":128},[118,61243,51604],{"class":51293},[118,61245,51300],{"class":128},[118,61247,61248,61250,61252],{"class":120,"line":16801},[118,61249,51334],{"class":128},[118,61251,51806],{"class":51293},[118,61253,51300],{"class":128},[118,61255,61256],{"class":120,"line":16806},[118,61257,61258],{"class":187},"        \u002F\u002F 1. 获取元素\n",[118,61260,61261,61264,61266,61268,61270,61272,61274,61277],{"class":120,"line":16820},[118,61262,61263],{"class":124},"        const",[118,61265,60598],{"class":177},[118,61267,13569],{"class":124},[118,61269,54389],{"class":128},[118,61271,54392],{"class":1967},[118,61273,129],{"class":128},[118,61275,61276],{"class":233},"'[type=search]'",[118,61278,135],{"class":128},[118,61280,61281,61283,61286,61288,61290,61292,61294,61297],{"class":120,"line":16825},[118,61282,61263],{"class":124},[118,61284,61285],{"class":177}," ul",[118,61287,13569],{"class":124},[118,61289,54389],{"class":128},[118,61291,54392],{"class":1967},[118,61293,129],{"class":128},[118,61295,61296],{"class":233},"'.result-list'",[118,61298,135],{"class":128},[118,61300,61301],{"class":120,"line":16831},[118,61302,61303],{"class":187},"        \u002F\u002F console.log(input)\n",[118,61305,61306],{"class":120,"line":16836},[118,61307,61308],{"class":187},"        \u002F\u002F 2. 监听事件 获得焦点\n",[118,61310,61311,61314,61316,61318,61321,61323,61325],{"class":120,"line":16850},[118,61312,61313],{"class":128},"        input.",[118,61315,57806],{"class":1967},[118,61317,129],{"class":128},[118,61319,61320],{"class":233},"'focus'",[118,61322,12440],{"class":128},[118,61324,54442],{"class":124},[118,61326,54445],{"class":128},[118,61328,61329],{"class":120,"line":16855},[118,61330,61331],{"class":187},"            \u002F\u002F ul显示\n",[118,61333,61334,61337,61339],{"class":120,"line":16860},[118,61335,61336],{"class":128},"            ul.style.display ",[118,61338,174],{"class":124},[118,61340,61341],{"class":233}," 'block'\n",[118,61343,61344],{"class":120,"line":16874},[118,61345,61346],{"class":187},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[118,61348,61349,61352,61354,61356,61359],{"class":120,"line":16886},[118,61350,61351],{"class":128},"            input.classList.",[118,61353,5339],{"class":1967},[118,61355,129],{"class":128},[118,61357,61358],{"class":233},"'search'",[118,61360,135],{"class":128},[118,61362,61363],{"class":120,"line":16891},[118,61364,61365],{"class":128},"        })\n",[118,61367,61368],{"class":120,"line":16904},[118,61369,61370],{"class":187},"        \u002F\u002F 3. 监听事件 失去焦点\n",[118,61372,61373,61375,61377,61379,61382,61384,61386],{"class":120,"line":16909},[118,61374,61313],{"class":128},[118,61376,57806],{"class":1967},[118,61378,129],{"class":128},[118,61380,61381],{"class":233},"'blur'",[118,61383,12440],{"class":128},[118,61385,54442],{"class":124},[118,61387,54445],{"class":128},[118,61389,61390,61392,61394],{"class":120,"line":16914},[118,61391,61336],{"class":128},[118,61393,174],{"class":124},[118,61395,61396],{"class":233}," 'none'\n",[118,61398,61399,61401,61403,61405,61407],{"class":120,"line":16919},[118,61400,61351],{"class":128},[118,61402,56999],{"class":1967},[118,61404,129],{"class":128},[118,61406,61358],{"class":233},[118,61408,135],{"class":128},[118,61410,61411],{"class":120,"line":16932},[118,61412,61365],{"class":128},[118,61414,61415,61417,61419],{"class":120,"line":16937},[118,61416,51769],{"class":128},[118,61418,51806],{"class":51293},[118,61420,51300],{"class":128},[118,61422,61423,61425,61427],{"class":120,"line":32626},[118,61424,51778],{"class":128},[118,61426,51793],{"class":51293},[118,61428,51300],{"class":128},[118,61430,61431],{"class":120,"line":32632},[118,61432,2404],{"emptyLinePlaceholder":45},[118,61434,61435,61437,61439],{"class":120,"line":32638},[118,61436,51778],{"class":128},[118,61438,50628],{"class":51293},[118,61440,51300],{"class":128},[22003,61442,61444],{"id":61443},"_3253-键盘事件","3.2.5.3 键盘事件",[15,61446,61447],{},"评论字数统计案例",[15,61449,61450],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[15,61452,61453],{},"牢记focus伪类选择器",[51337,61455],{"charSet":61456},"UTF-8",[51337,61458],{"name":61459,"content":61460},"viewport","width=device-width, initial-scale=1.0",[51400,61462,61463],{},"Document",[5131,61465,61466],{},"\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",[53814,61468],{"type":5192},[1135,61470,61471,61474],{},[75,61472,61473],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[75,61475,61476],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[109,61478,61480],{"className":50626,"code":61479,"language":50628,"meta":39,"style":39},"\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",[115,61481,61482,61492,61506,61510,61518,61532,61552,61572,61585,61593,61600,61613,61627,61637,61647,61651,61655,61662,61674,61686,61698,61710,61739,61752,61756,61760,61769,61780,61792,61803,61814,61826,61837,61849,61865,61877,61881,61885,61896,61907,61917,61929,61933,61937,61945,61956,61966,61977,61989,62002,62014,62026,62030,62034,62043,62055,62066,62079,62090,62104,62108,62112,62119,62131,62143,62153,62157,62161,62170,62182,62192,62196,62200,62211,62221,62240,62253,62257,62261,62271,62281,62285,62289,62300,62311,62323,62335,62339,62343,62354,62365,62379,62383,62387,62398,62408,62420,62424,62432,62440,62444,62452,62467,62486,62526,62539,62547,62561,62581,62589,62604,62627,62645,62660,62680,62700,62720,62728,62736,62744,62752,62772,62792,62797,62814,62823,62827,62832,62848,62856,62860,62865,62882,62887,62912,62916,62920,62925,62930,62938,62946,62950],{"__ignoreMap":39},[118,61483,61484,61486,61488,61490],{"class":120,"line":121},[118,61485,51290],{"class":128},[118,61487,51294],{"class":51293},[118,61489,51297],{"class":1967},[118,61491,51300],{"class":128},[118,61493,61494,61496,61498,61500,61502,61504],{"class":120,"line":40},[118,61495,1038],{"class":128},[118,61497,50628],{"class":51293},[118,61499,51309],{"class":1967},[118,61501,174],{"class":128},[118,61503,51314],{"class":233},[118,61505,51300],{"class":128},[118,61507,61508],{"class":120,"line":1183},[118,61509,2404],{"emptyLinePlaceholder":45},[118,61511,61512,61514,61516],{"class":120,"line":1198},[118,61513,1038],{"class":128},[118,61515,51327],{"class":51293},[118,61517,51300],{"class":128},[118,61519,61520,61522,61524,61526,61528,61530],{"class":120,"line":1204},[118,61521,52137],{"class":128},[118,61523,51337],{"class":51293},[118,61525,51340],{"class":1967},[118,61527,174],{"class":128},[118,61529,51345],{"class":233},[118,61531,51300],{"class":128},[118,61533,61534,61536,61538,61540,61542,61544,61546,61548,61550],{"class":120,"line":1218},[118,61535,52137],{"class":128},[118,61537,51337],{"class":51293},[118,61539,51356],{"class":1967},[118,61541,174],{"class":128},[118,61543,51361],{"class":233},[118,61545,51364],{"class":1967},[118,61547,174],{"class":128},[118,61549,51369],{"class":233},[118,61551,51300],{"class":128},[118,61553,61554,61556,61558,61560,61562,61564,61566,61568,61570],{"class":120,"line":1224},[118,61555,52137],{"class":128},[118,61557,51337],{"class":51293},[118,61559,14925],{"class":1967},[118,61561,174],{"class":128},[118,61563,51384],{"class":233},[118,61565,51364],{"class":1967},[118,61567,174],{"class":128},[118,61569,51391],{"class":233},[118,61571,51300],{"class":128},[118,61573,61574,61576,61578,61581,61583],{"class":120,"line":1315},[118,61575,52137],{"class":128},[118,61577,51400],{"class":51293},[118,61579,61580],{"class":128},">评论回车发布\u003C\u002F",[118,61582,51400],{"class":51293},[118,61584,51300],{"class":128},[118,61586,61587,61589,61591],{"class":120,"line":1321},[118,61588,52137],{"class":128},[118,61590,5131],{"class":51293},[118,61592,51300],{"class":128},[118,61594,61595,61598],{"class":120,"line":1333},[118,61596,61597],{"class":1967},"    .wrapper",[118,61599,15577],{"class":128},[118,61601,61602,61605,61607,61609,61611],{"class":120,"line":1616},[118,61603,61604],{"class":177},"      min-width",[118,61606,51430],{"class":128},[118,61608,3991],{"class":177},[118,61610,51485],{"class":124},[118,61612,1294],{"class":128},[118,61614,61615,61618,61620,61623,61625],{"class":120,"line":1621},[118,61616,61617],{"class":177},"      max-width",[118,61619,51430],{"class":128},[118,61621,61622],{"class":177},"800",[118,61624,51485],{"class":124},[118,61626,1294],{"class":128},[118,61628,61629,61631,61633,61635],{"class":120,"line":1627},[118,61630,55002],{"class":177},[118,61632,51430],{"class":128},[118,61634,51470],{"class":177},[118,61636,1294],{"class":128},[118,61638,61639,61641,61643,61645],{"class":120,"line":1632},[118,61640,55013],{"class":177},[118,61642,51430],{"class":128},[118,61644,51573],{"class":177},[118,61646,1294],{"class":128},[118,61648,61649],{"class":120,"line":1646},[118,61650,2191],{"class":128},[118,61652,61653],{"class":120,"line":1651},[118,61654,2404],{"emptyLinePlaceholder":45},[118,61656,61657,61660],{"class":120,"line":1657},[118,61658,61659],{"class":1967},"    .avatar",[118,61661,15577],{"class":128},[118,61663,61664,61666,61668,61670,61672],{"class":120,"line":1678},[118,61665,54764],{"class":177},[118,61667,51430],{"class":128},[118,61669,735],{"class":177},[118,61671,51485],{"class":124},[118,61673,1294],{"class":128},[118,61675,61676,61678,61680,61682,61684],{"class":120,"line":1683},[118,61677,54778],{"class":177},[118,61679,51430],{"class":128},[118,61681,735],{"class":177},[118,61683,51485],{"class":124},[118,61685,1294],{"class":128},[118,61687,61688,61690,61692,61694,61696],{"class":120,"line":1697},[118,61689,55127],{"class":177},[118,61691,51430],{"class":128},[118,61693,784],{"class":177},[118,61695,456],{"class":124},[118,61697,1294],{"class":128},[118,61699,61700,61703,61705,61708],{"class":120,"line":1702},[118,61701,61702],{"class":177},"      overflow",[118,61704,51430],{"class":128},[118,61706,61707],{"class":177},"hidden",[118,61709,1294],{"class":128},[118,61711,61712,61715,61717,61720,61722,61725,61727,61730,61732,61734,61737],{"class":120,"line":1731},[118,61713,61714],{"class":177},"      background",[118,61716,51430],{"class":128},[118,61718,61719],{"class":177},"url",[118,61721,129],{"class":128},[118,61723,61724],{"class":5221},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[118,61726,13719],{"class":128},[118,61728,61729],{"class":177},"no-repeat",[118,61731,17149],{"class":177},[118,61733,24983],{"class":128},[118,61735,61736],{"class":177},"cover",[118,61738,1294],{"class":128},[118,61740,61741,61744,61746,61748,61750],{"class":120,"line":1736},[118,61742,61743],{"class":177},"      margin-right",[118,61745,51430],{"class":128},[118,61747,828],{"class":177},[118,61749,51485],{"class":124},[118,61751,1294],{"class":128},[118,61753,61754],{"class":120,"line":1753},[118,61755,2191],{"class":128},[118,61757,61758],{"class":120,"line":1758},[118,61759,2404],{"emptyLinePlaceholder":45},[118,61761,61762,61764,61767],{"class":120,"line":1763},[118,61763,61597],{"class":1967},[118,61765,61766],{"class":51293}," textarea",[118,61768,15577],{"class":128},[118,61770,61771,61774,61776,61778],{"class":120,"line":1768},[118,61772,61773],{"class":177},"      outline",[118,61775,51430],{"class":128},[118,61777,54730],{"class":177},[118,61779,1294],{"class":128},[118,61781,61782,61785,61787,61790],{"class":120,"line":1782},[118,61783,61784],{"class":177},"      border-color",[118,61786,51430],{"class":128},[118,61788,61789],{"class":177},"transparent",[118,61791,1294],{"class":128},[118,61793,61794,61797,61799,61801],{"class":120,"line":1787},[118,61795,61796],{"class":177},"      resize",[118,61798,51430],{"class":128},[118,61800,54730],{"class":177},[118,61802,1294],{"class":128},[118,61804,61805,61807,61809,61812],{"class":120,"line":2581},[118,61806,61714],{"class":177},[118,61808,51430],{"class":128},[118,61810,61811],{"class":177},"#f5f5f5",[118,61813,1294],{"class":128},[118,61815,61816,61818,61820,61822,61824],{"class":120,"line":2595},[118,61817,55127],{"class":177},[118,61819,51430],{"class":128},[118,61821,421],{"class":177},[118,61823,51485],{"class":124},[118,61825,1294],{"class":128},[118,61827,61828,61831,61833,61835],{"class":120,"line":2603},[118,61829,61830],{"class":177},"      flex",[118,61832,51430],{"class":128},[118,61834,346],{"class":177},[118,61836,1294],{"class":128},[118,61838,61839,61841,61843,61845,61847],{"class":120,"line":2608},[118,61840,54688],{"class":177},[118,61842,51430],{"class":128},[118,61844,574],{"class":177},[118,61846,51485],{"class":124},[118,61848,1294],{"class":128},[118,61850,61851,61854,61856,61858,61861,61863],{"class":120,"line":2614},[118,61852,61853],{"class":177},"      transition",[118,61855,51430],{"class":128},[118,61857,28114],{"class":177},[118,61859,61860],{"class":177}," 0.5",[118,61862,823],{"class":124},[118,61864,1294],{"class":128},[118,61866,61867,61869,61871,61873,61875],{"class":120,"line":2620},[118,61868,54778],{"class":177},[118,61870,51430],{"class":128},[118,61872,1079],{"class":177},[118,61874,51485],{"class":124},[118,61876,1294],{"class":128},[118,61878,61879],{"class":120,"line":2625},[118,61880,2191],{"class":128},[118,61882,61883],{"class":120,"line":7953},[118,61884,2404],{"emptyLinePlaceholder":45},[118,61886,61887,61889,61891,61894],{"class":120,"line":7977},[118,61888,61597],{"class":1967},[118,61890,61766],{"class":51293},[118,61892,61893],{"class":1967},":focus",[118,61895,15577],{"class":128},[118,61897,61898,61900,61902,61905],{"class":120,"line":7982},[118,61899,61784],{"class":177},[118,61901,51430],{"class":128},[118,61903,61904],{"class":177},"#e4e4e4",[118,61906,1294],{"class":128},[118,61908,61909,61911,61913,61915],{"class":120,"line":7988},[118,61910,61714],{"class":177},[118,61912,51430],{"class":128},[118,61914,60835],{"class":177},[118,61916,1294],{"class":128},[118,61918,61919,61921,61923,61925,61927],{"class":120,"line":8015},[118,61920,54778],{"class":177},[118,61922,51430],{"class":128},[118,61924,784],{"class":177},[118,61926,51485],{"class":124},[118,61928,1294],{"class":128},[118,61930,61931],{"class":120,"line":8020},[118,61932,2191],{"class":128},[118,61934,61935],{"class":120,"line":8026},[118,61936,2404],{"emptyLinePlaceholder":45},[118,61938,61939,61941,61943],{"class":120,"line":8038},[118,61940,61597],{"class":1967},[118,61942,57460],{"class":51293},[118,61944,15577],{"class":128},[118,61946,61947,61949,61951,61954],{"class":120,"line":8050},[118,61948,61714],{"class":177},[118,61950,51430],{"class":128},[118,61952,61953],{"class":177},"#00aeec",[118,61955,1294],{"class":128},[118,61957,61958,61960,61962,61964],{"class":120,"line":8062},[118,61959,57409],{"class":177},[118,61961,51430],{"class":128},[118,61963,60835],{"class":177},[118,61965,1294],{"class":128},[118,61967,61968,61971,61973,61975],{"class":120,"line":9721},[118,61969,61970],{"class":177},"      border",[118,61972,51430],{"class":128},[118,61974,54730],{"class":177},[118,61976,1294],{"class":128},[118,61978,61979,61981,61983,61985,61987],{"class":120,"line":9746},[118,61980,55127],{"class":177},[118,61982,51430],{"class":128},[118,61984,421],{"class":177},[118,61986,51485],{"class":124},[118,61988,1294],{"class":128},[118,61990,61991,61994,61996,61998,62000],{"class":120,"line":9769},[118,61992,61993],{"class":177},"      margin-left",[118,61995,51430],{"class":128},[118,61997,574],{"class":177},[118,61999,51485],{"class":124},[118,62001,1294],{"class":128},[118,62003,62004,62006,62008,62010,62012],{"class":120,"line":9793},[118,62005,54764],{"class":177},[118,62007,51430],{"class":128},[118,62009,484],{"class":177},[118,62011,51485],{"class":124},[118,62013,1294],{"class":128},[118,62015,62016,62019,62021,62024],{"class":120,"line":9798},[118,62017,62018],{"class":177},"      cursor",[118,62020,51430],{"class":128},[118,62022,62023],{"class":177},"pointer",[118,62025,1294],{"class":128},[118,62027,62028],{"class":120,"line":9803},[118,62029,2191],{"class":128},[118,62031,62032],{"class":120,"line":9808},[118,62033,2404],{"emptyLinePlaceholder":45},[118,62035,62036,62038,62041],{"class":120,"line":9817},[118,62037,61597],{"class":1967},[118,62039,62040],{"class":1967}," .total",[118,62042,15577],{"class":128},[118,62044,62045,62047,62049,62051,62053],{"class":120,"line":9822},[118,62046,61743],{"class":177},[118,62048,51430],{"class":128},[118,62050,740],{"class":177},[118,62052,51485],{"class":124},[118,62054,1294],{"class":128},[118,62056,62057,62059,62061,62064],{"class":120,"line":9828},[118,62058,57409],{"class":177},[118,62060,51430],{"class":128},[118,62062,62063],{"class":177},"#999",[118,62065,1294],{"class":128},[118,62067,62068,62071,62073,62075,62077],{"class":120,"line":9849},[118,62069,62070],{"class":177},"      margin-top",[118,62072,51430],{"class":128},[118,62074,447],{"class":177},[118,62076,51485],{"class":124},[118,62078,1294],{"class":128},[118,62080,62081,62084,62086,62088],{"class":120,"line":9855},[118,62082,62083],{"class":177},"      opacity",[118,62085,51430],{"class":128},[118,62087,320],{"class":177},[118,62089,1294],{"class":128},[118,62091,62092,62094,62096,62098,62100,62102],{"class":120,"line":9869},[118,62093,61853],{"class":177},[118,62095,51430],{"class":128},[118,62097,28114],{"class":177},[118,62099,61860],{"class":177},[118,62101,823],{"class":124},[118,62103,1294],{"class":128},[118,62105,62106],{"class":120,"line":9875},[118,62107,2191],{"class":128},[118,62109,62110],{"class":120,"line":9902},[118,62111,2404],{"emptyLinePlaceholder":45},[118,62113,62114,62117],{"class":120,"line":9911},[118,62115,62116],{"class":1967},"    .list",[118,62118,15577],{"class":128},[118,62120,62121,62123,62125,62127,62129],{"class":120,"line":9917},[118,62122,61604],{"class":177},[118,62124,51430],{"class":128},[118,62126,3991],{"class":177},[118,62128,51485],{"class":124},[118,62130,1294],{"class":128},[118,62132,62133,62135,62137,62139,62141],{"class":120,"line":9925},[118,62134,61617],{"class":177},[118,62136,51430],{"class":128},[118,62138,61622],{"class":177},[118,62140,51485],{"class":124},[118,62142,1294],{"class":128},[118,62144,62145,62147,62149,62151],{"class":120,"line":9930},[118,62146,55002],{"class":177},[118,62148,51430],{"class":128},[118,62150,51470],{"class":177},[118,62152,1294],{"class":128},[118,62154,62155],{"class":120,"line":16609},[118,62156,2191],{"class":128},[118,62158,62159],{"class":120,"line":16615},[118,62160,2404],{"emptyLinePlaceholder":45},[118,62162,62163,62165,62168],{"class":120,"line":16638},[118,62164,62116],{"class":1967},[118,62166,62167],{"class":1967}," .item",[118,62169,15577],{"class":128},[118,62171,62172,62174,62176,62178,62180],{"class":120,"line":16644},[118,62173,54764],{"class":177},[118,62175,51430],{"class":128},[118,62177,439],{"class":177},[118,62179,456],{"class":124},[118,62181,1294],{"class":128},[118,62183,62184,62186,62188,62190],{"class":120,"line":16667},[118,62185,55002],{"class":177},[118,62187,51430],{"class":128},[118,62189,51470],{"class":177},[118,62191,1294],{"class":128},[118,62193,62194],{"class":120,"line":16681},[118,62195,2191],{"class":128},[118,62197,62198],{"class":120,"line":16701},[118,62199,2404],{"emptyLinePlaceholder":45},[118,62201,62202,62204,62206,62209],{"class":120,"line":16707},[118,62203,62116],{"class":1967},[118,62205,62167],{"class":1967},[118,62207,62208],{"class":1967}," .info",[118,62210,15577],{"class":128},[118,62212,62213,62215,62217,62219],{"class":120,"line":16718},[118,62214,61830],{"class":177},[118,62216,51430],{"class":128},[118,62218,346],{"class":177},[118,62220,1294],{"class":128},[118,62222,62223,62226,62228,62230,62232,62235,62238],{"class":120,"line":16741},[118,62224,62225],{"class":177},"      border-bottom",[118,62227,51430],{"class":128},[118,62229,346],{"class":177},[118,62231,51485],{"class":124},[118,62233,62234],{"class":177}," dashed",[118,62236,62237],{"class":177}," #e4e4e4",[118,62239,1294],{"class":128},[118,62241,62242,62245,62247,62249,62251],{"class":120,"line":16763},[118,62243,62244],{"class":177},"      padding-bottom",[118,62246,51430],{"class":128},[118,62248,574],{"class":177},[118,62250,51485],{"class":124},[118,62252,1294],{"class":128},[118,62254,62255],{"class":120,"line":16768},[118,62256,2191],{"class":128},[118,62258,62259],{"class":120,"line":16774},[118,62260,2404],{"emptyLinePlaceholder":45},[118,62262,62263,62265,62267,62269],{"class":120,"line":16788},[118,62264,62116],{"class":1967},[118,62266,62167],{"class":1967},[118,62268,6830],{"class":51293},[118,62270,15577],{"class":128},[118,62272,62273,62275,62277,62279],{"class":120,"line":16801},[118,62274,54699],{"class":177},[118,62276,51430],{"class":128},[118,62278,320],{"class":177},[118,62280,1294],{"class":128},[118,62282,62283],{"class":120,"line":16806},[118,62284,2191],{"class":128},[118,62286,62287],{"class":120,"line":16820},[118,62288,2404],{"emptyLinePlaceholder":45},[118,62290,62291,62293,62295,62298],{"class":120,"line":16825},[118,62292,62116],{"class":1967},[118,62294,62167],{"class":1967},[118,62296,62297],{"class":1967}," .name",[118,62299,15577],{"class":128},[118,62301,62302,62304,62306,62309],{"class":120,"line":16831},[118,62303,57409],{"class":177},[118,62305,51430],{"class":128},[118,62307,62308],{"class":177},"#FB7299",[118,62310,1294],{"class":128},[118,62312,62313,62315,62317,62319,62321],{"class":120,"line":16836},[118,62314,54915],{"class":177},[118,62316,51430],{"class":128},[118,62318,677],{"class":177},[118,62320,51485],{"class":124},[118,62322,1294],{"class":128},[118,62324,62325,62328,62330,62333],{"class":120,"line":16850},[118,62326,62327],{"class":177},"      font-weight",[118,62329,51430],{"class":128},[118,62331,62332],{"class":177},"bold",[118,62334,1294],{"class":128},[118,62336,62337],{"class":120,"line":16855},[118,62338,2191],{"class":128},[118,62340,62341],{"class":120,"line":16860},[118,62342,2404],{"emptyLinePlaceholder":45},[118,62344,62345,62347,62349,62352],{"class":120,"line":16874},[118,62346,62116],{"class":1967},[118,62348,62167],{"class":1967},[118,62350,62351],{"class":1967}," .text",[118,62353,15577],{"class":128},[118,62355,62356,62358,62360,62363],{"class":120,"line":16886},[118,62357,57409],{"class":177},[118,62359,51430],{"class":128},[118,62361,62362],{"class":177},"#333",[118,62364,1294],{"class":128},[118,62366,62367,62369,62371,62373,62375,62377],{"class":120,"line":16891},[118,62368,54688],{"class":177},[118,62370,51430],{"class":128},[118,62372,574],{"class":177},[118,62374,51485],{"class":124},[118,62376,4097],{"class":177},[118,62378,1294],{"class":128},[118,62380,62381],{"class":120,"line":16904},[118,62382,2191],{"class":128},[118,62384,62385],{"class":120,"line":16909},[118,62386,2404],{"emptyLinePlaceholder":45},[118,62388,62389,62391,62393,62396],{"class":120,"line":16914},[118,62390,62116],{"class":1967},[118,62392,62167],{"class":1967},[118,62394,62395],{"class":1967}," .time",[118,62397,15577],{"class":128},[118,62399,62400,62402,62404,62406],{"class":120,"line":16919},[118,62401,57409],{"class":177},[118,62403,51430],{"class":128},[118,62405,62063],{"class":177},[118,62407,1294],{"class":128},[118,62409,62410,62412,62414,62416,62418],{"class":120,"line":16932},[118,62411,54915],{"class":177},[118,62413,51430],{"class":128},[118,62415,626],{"class":177},[118,62417,51485],{"class":124},[118,62419,1294],{"class":128},[118,62421,62422],{"class":120,"line":16937},[118,62423,2191],{"class":128},[118,62425,62426,62428,62430],{"class":120,"line":32626},[118,62427,52410],{"class":128},[118,62429,5131],{"class":51293},[118,62431,51300],{"class":128},[118,62433,62434,62436,62438],{"class":120,"line":32632},[118,62435,51778],{"class":128},[118,62437,51327],{"class":51293},[118,62439,51300],{"class":128},[118,62441,62442],{"class":120,"line":32638},[118,62443,2404],{"emptyLinePlaceholder":45},[118,62445,62446,62448,62450],{"class":120,"line":32644},[118,62447,1038],{"class":128},[118,62449,51793],{"class":51293},[118,62451,51300],{"class":128},[118,62453,62454,62456,62458,62460,62462,62465],{"class":120,"line":32650},[118,62455,52137],{"class":128},[118,62457,51604],{"class":51293},[118,62459,53479],{"class":1967},[118,62461,174],{"class":128},[118,62463,62464],{"class":233},"\"wrapper\"",[118,62466,51300],{"class":128},[118,62468,62469,62471,62473,62475,62477,62480,62482,62484],{"class":120,"line":32661},[118,62470,51334],{"class":128},[118,62472,569],{"class":51293},[118,62474,53479],{"class":1967},[118,62476,174],{"class":128},[118,62478,62479],{"class":233},"\"avatar\"",[118,62481,55307],{"class":128},[118,62483,569],{"class":51293},[118,62485,51300],{"class":128},[118,62487,62488,62490,62492,62494,62496,62499,62501,62503,62506,62508,62510,62512,62515,62517,62520,62522,62524],{"class":120,"line":32667},[118,62489,51334],{"class":128},[118,62491,54281],{"class":51293},[118,62493,14964],{"class":1967},[118,62495,174],{"class":128},[118,62497,62498],{"class":233},"\"tx\"",[118,62500,61013],{"class":1967},[118,62502,174],{"class":128},[118,62504,62505],{"class":233},"\"发一条友善的评论\"",[118,62507,54304],{"class":1967},[118,62509,174],{"class":128},[118,62511,3705],{"class":233},[118,62513,62514],{"class":1967}," maxlength",[118,62516,174],{"class":128},[118,62518,62519],{"class":233},"\"200\"",[118,62521,55307],{"class":128},[118,62523,54281],{"class":51293},[118,62525,51300],{"class":128},[118,62527,62528,62530,62532,62535,62537],{"class":120,"line":32687},[118,62529,51334],{"class":128},[118,62531,53880],{"class":51293},[118,62533,62534],{"class":128},">发布\u003C\u002F",[118,62536,53880],{"class":51293},[118,62538,51300],{"class":128},[118,62540,62541,62543,62545],{"class":120,"line":32693},[118,62542,52410],{"class":128},[118,62544,51604],{"class":51293},[118,62546,51300],{"class":128},[118,62548,62549,62551,62553,62555,62557,62559],{"class":120,"line":32704},[118,62550,52137],{"class":128},[118,62552,51604],{"class":51293},[118,62554,53479],{"class":1967},[118,62556,174],{"class":128},[118,62558,62464],{"class":233},[118,62560,51300],{"class":128},[118,62562,62563,62565,62567,62569,62571,62574,62577,62579],{"class":120,"line":32710},[118,62564,51334],{"class":128},[118,62566,118],{"class":51293},[118,62568,53479],{"class":1967},[118,62570,174],{"class":128},[118,62572,62573],{"class":233},"\"total\"",[118,62575,62576],{"class":128},">0\u002F200字\u003C\u002F",[118,62578,118],{"class":51293},[118,62580,51300],{"class":128},[118,62582,62583,62585,62587],{"class":120,"line":32716},[118,62584,52410],{"class":128},[118,62586,51604],{"class":51293},[118,62588,51300],{"class":128},[118,62590,62591,62593,62595,62597,62599,62602],{"class":120,"line":32722},[118,62592,52137],{"class":128},[118,62594,51604],{"class":51293},[118,62596,53479],{"class":1967},[118,62598,174],{"class":128},[118,62600,62601],{"class":233},"\"list\"",[118,62603,51300],{"class":128},[118,62605,62606,62608,62610,62612,62614,62617,62620,62622,62625],{"class":120,"line":32728},[118,62607,51334],{"class":128},[118,62609,51604],{"class":51293},[118,62611,53479],{"class":1967},[118,62613,174],{"class":128},[118,62615,62616],{"class":233},"\"item\"",[118,62618,62619],{"class":1967}," style",[118,62621,174],{"class":128},[118,62623,62624],{"class":233},"\"display: none;\"",[118,62626,51300],{"class":128},[118,62628,62629,62631,62633,62635,62637,62639,62641,62643],{"class":120,"line":32734},[118,62630,55227],{"class":128},[118,62632,569],{"class":51293},[118,62634,53479],{"class":1967},[118,62636,174],{"class":128},[118,62638,62479],{"class":233},[118,62640,55307],{"class":128},[118,62642,569],{"class":51293},[118,62644,51300],{"class":128},[118,62646,62647,62649,62651,62653,62655,62658],{"class":120,"line":32740},[118,62648,55227],{"class":128},[118,62650,51604],{"class":51293},[118,62652,53479],{"class":1967},[118,62654,174],{"class":128},[118,62656,62657],{"class":233},"\"info\"",[118,62659,51300],{"class":128},[118,62661,62662,62664,62666,62668,62670,62673,62676,62678],{"class":120,"line":32746},[118,62663,55295],{"class":128},[118,62665,15],{"class":51293},[118,62667,53479],{"class":1967},[118,62669,174],{"class":128},[118,62671,62672],{"class":233},"\"name\"",[118,62674,62675],{"class":128},">清风徐来\u003C\u002F",[118,62677,15],{"class":51293},[118,62679,51300],{"class":128},[118,62681,62682,62684,62686,62688,62690,62693,62696,62698],{"class":120,"line":32766},[118,62683,55295],{"class":128},[118,62685,15],{"class":51293},[118,62687,53479],{"class":1967},[118,62689,174],{"class":128},[118,62691,62692],{"class":233},"\"text\"",[118,62694,62695],{"class":128},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[118,62697,15],{"class":51293},[118,62699,51300],{"class":128},[118,62701,62702,62704,62706,62708,62710,62713,62716,62718],{"class":120,"line":32772},[118,62703,55295],{"class":128},[118,62705,15],{"class":51293},[118,62707,53479],{"class":1967},[118,62709,174],{"class":128},[118,62711,62712],{"class":233},"\"time\"",[118,62714,62715],{"class":128},">2022-10-10 20:29:21\u003C\u002F",[118,62717,15],{"class":51293},[118,62719,51300],{"class":128},[118,62721,62722,62724,62726],{"class":120,"line":32788},[118,62723,55400],{"class":128},[118,62725,51604],{"class":51293},[118,62727,51300],{"class":128},[118,62729,62730,62732,62734],{"class":120,"line":32794},[118,62731,51769],{"class":128},[118,62733,51604],{"class":51293},[118,62735,51300],{"class":128},[118,62737,62738,62740,62742],{"class":120,"line":32808},[118,62739,52410],{"class":128},[118,62741,51604],{"class":51293},[118,62743,51300],{"class":128},[118,62745,62746,62748,62750],{"class":120,"line":32814},[118,62747,52137],{"class":128},[118,62749,51806],{"class":51293},[118,62751,51300],{"class":128},[118,62753,62754,62756,62759,62761,62763,62765,62767,62770],{"class":120,"line":32829},[118,62755,11226],{"class":124},[118,62757,62758],{"class":177}," tx",[118,62760,13569],{"class":124},[118,62762,54389],{"class":128},[118,62764,54392],{"class":1967},[118,62766,129],{"class":128},[118,62768,62769],{"class":233},"'#tx'",[118,62771,135],{"class":128},[118,62773,62774,62776,62779,62781,62783,62785,62787,62790],{"class":120,"line":32835},[118,62775,11226],{"class":124},[118,62777,62778],{"class":177}," total",[118,62780,13569],{"class":124},[118,62782,54389],{"class":128},[118,62784,54392],{"class":1967},[118,62786,129],{"class":128},[118,62788,62789],{"class":233},"'.total'",[118,62791,135],{"class":128},[118,62793,62794],{"class":120,"line":32844},[118,62795,62796],{"class":187},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[118,62798,62799,62802,62804,62806,62808,62810,62812],{"class":120,"line":32850},[118,62800,62801],{"class":128},"    tx.",[118,62803,57806],{"class":1967},[118,62805,129],{"class":128},[118,62807,61320],{"class":233},[118,62809,12440],{"class":128},[118,62811,54442],{"class":124},[118,62813,54445],{"class":128},[118,62815,62816,62819,62821],{"class":120,"line":32859},[118,62817,62818],{"class":128},"      total.style.opacity ",[118,62820,174],{"class":124},[118,62822,55692],{"class":177},[118,62824,62825],{"class":120,"line":32865},[118,62826,33454],{"class":128},[118,62828,62829],{"class":120,"line":32871},[118,62830,62831],{"class":187},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[118,62833,62834,62836,62838,62840,62842,62844,62846],{"class":120,"line":32880},[118,62835,62801],{"class":128},[118,62837,57806],{"class":1967},[118,62839,129],{"class":128},[118,62841,61381],{"class":233},[118,62843,12440],{"class":128},[118,62845,54442],{"class":124},[118,62847,54445],{"class":128},[118,62849,62850,62852,62854],{"class":120,"line":32886},[118,62851,62818],{"class":128},[118,62853,174],{"class":124},[118,62855,47326],{"class":177},[118,62857,62858],{"class":120,"line":32897},[118,62859,33454],{"class":128},[118,62861,62862],{"class":120,"line":32903},[118,62863,62864],{"class":187},"    \u002F\u002F 3. 检测用户输入\n",[118,62866,62867,62869,62871,62873,62876,62878,62880],{"class":120,"line":32922},[118,62868,62801],{"class":128},[118,62870,57806],{"class":1967},[118,62872,129],{"class":128},[118,62874,62875],{"class":233},"'input'",[118,62877,12440],{"class":128},[118,62879,54442],{"class":124},[118,62881,54445],{"class":128},[118,62883,62884],{"class":120,"line":32928},[118,62885,62886],{"class":187},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[118,62888,62889,62892,62894,62897,62900,62902,62905,62907,62909],{"class":120,"line":32939},[118,62890,62891],{"class":128},"      total.innerHTML ",[118,62893,174],{"class":124},[118,62895,62896],{"class":233}," `${",[118,62898,62899],{"class":128},"tx",[118,62901,686],{"class":233},[118,62903,62904],{"class":128},"value",[118,62906,686],{"class":233},[118,62908,51961],{"class":177},[118,62910,62911],{"class":233},"}\u002F200字`\n",[118,62913,62914],{"class":120,"line":32945},[118,62915,33454],{"class":128},[118,62917,62918],{"class":120,"line":32965},[118,62919,2404],{"emptyLinePlaceholder":45},[118,62921,62922],{"class":120,"line":32981},[118,62923,62924],{"class":187},"    \u002F\u002F const str = 'andy'\n",[118,62926,62927],{"class":120,"line":32987},[118,62928,62929],{"class":187},"    \u002F\u002F console.log(str.length)\n",[118,62931,62932,62934,62936],{"class":120,"line":33001},[118,62933,52410],{"class":128},[118,62935,51806],{"class":51293},[118,62937,51300],{"class":128},[118,62939,62940,62942,62944],{"class":120,"line":33007},[118,62941,51778],{"class":128},[118,62943,51793],{"class":51293},[118,62945,51300],{"class":128},[118,62947,62948],{"class":120,"line":33013},[118,62949,2404],{"emptyLinePlaceholder":45},[118,62951,62952,62954,62956],{"class":120,"line":33024},[118,62953,51778],{"class":128},[118,62955,50628],{"class":51293},[118,62957,51300],{"class":128},[22003,62959,62961],{"id":62960},"_3254-change事件","3.2.5.4 change事件",[15,62963,62964],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[15,62966,62967],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[15,62969,62970],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[109,62972,62974],{"className":50626,"code":62973,"language":50628,"meta":39,"style":39},"\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",[115,62975,62976,62986,63000,63004,63012,63026,63046,63058,63066,63070,63078,63092,63100,63118,63136,63148,63152,63160,63168,63172],{"__ignoreMap":39},[118,62977,62978,62980,62982,62984],{"class":120,"line":121},[118,62979,51290],{"class":128},[118,62981,51294],{"class":51293},[118,62983,51297],{"class":1967},[118,62985,51300],{"class":128},[118,62987,62988,62990,62992,62994,62996,62998],{"class":120,"line":40},[118,62989,1038],{"class":128},[118,62991,50628],{"class":51293},[118,62993,51309],{"class":1967},[118,62995,174],{"class":128},[118,62997,51314],{"class":233},[118,62999,51300],{"class":128},[118,63001,63002],{"class":120,"line":1183},[118,63003,2404],{"emptyLinePlaceholder":45},[118,63005,63006,63008,63010],{"class":120,"line":1198},[118,63007,1038],{"class":128},[118,63009,51327],{"class":51293},[118,63011,51300],{"class":128},[118,63013,63014,63016,63018,63020,63022,63024],{"class":120,"line":1204},[118,63015,52137],{"class":128},[118,63017,51337],{"class":51293},[118,63019,51340],{"class":1967},[118,63021,174],{"class":128},[118,63023,51345],{"class":233},[118,63025,51300],{"class":128},[118,63027,63028,63030,63032,63034,63036,63038,63040,63042,63044],{"class":120,"line":1218},[118,63029,52137],{"class":128},[118,63031,51337],{"class":51293},[118,63033,14925],{"class":1967},[118,63035,174],{"class":128},[118,63037,51384],{"class":233},[118,63039,51364],{"class":1967},[118,63041,174],{"class":128},[118,63043,51391],{"class":233},[118,63045,51300],{"class":128},[118,63047,63048,63050,63052,63054,63056],{"class":120,"line":1224},[118,63049,52137],{"class":128},[118,63051,51400],{"class":51293},[118,63053,51403],{"class":128},[118,63055,51400],{"class":51293},[118,63057,51300],{"class":128},[118,63059,63060,63062,63064],{"class":120,"line":1315},[118,63061,51778],{"class":128},[118,63063,51327],{"class":51293},[118,63065,51300],{"class":128},[118,63067,63068],{"class":120,"line":1321},[118,63069,2404],{"emptyLinePlaceholder":45},[118,63071,63072,63074,63076],{"class":120,"line":1333},[118,63073,1038],{"class":128},[118,63075,51793],{"class":51293},[118,63077,51300],{"class":128},[118,63079,63080,63082,63084,63086,63088,63090],{"class":120,"line":1616},[118,63081,52137],{"class":128},[118,63083,53814],{"class":51293},[118,63085,53817],{"class":1967},[118,63087,174],{"class":128},[118,63089,62692],{"class":233},[118,63091,51300],{"class":128},[118,63093,63094,63096,63098],{"class":120,"line":1621},[118,63095,52137],{"class":128},[118,63097,51806],{"class":51293},[118,63099,51300],{"class":128},[118,63101,63102,63104,63106,63108,63110,63112,63114,63116],{"class":120,"line":1627},[118,63103,11226],{"class":124},[118,63105,60598],{"class":177},[118,63107,13569],{"class":124},[118,63109,54389],{"class":128},[118,63111,54392],{"class":1967},[118,63113,129],{"class":128},[118,63115,62875],{"class":233},[118,63117,135],{"class":128},[118,63119,63120,63123,63125,63127,63130,63132,63134],{"class":120,"line":1632},[118,63121,63122],{"class":128},"    input.",[118,63124,57806],{"class":1967},[118,63126,129],{"class":128},[118,63128,63129],{"class":233},"'change'",[118,63131,12440],{"class":128},[118,63133,54442],{"class":124},[118,63135,54445],{"class":128},[118,63137,63138,63140,63142,63144,63146],{"class":120,"line":1646},[118,63139,58237],{"class":128},[118,63141,58240],{"class":1967},[118,63143,129],{"class":128},[118,63145,721],{"class":177},[118,63147,135],{"class":128},[118,63149,63150],{"class":120,"line":1651},[118,63151,33454],{"class":128},[118,63153,63154,63156,63158],{"class":120,"line":1657},[118,63155,52410],{"class":128},[118,63157,51806],{"class":51293},[118,63159,51300],{"class":128},[118,63161,63162,63164,63166],{"class":120,"line":1678},[118,63163,51778],{"class":128},[118,63165,51793],{"class":51293},[118,63167,51300],{"class":128},[118,63169,63170],{"class":120,"line":1683},[118,63171,2404],{"emptyLinePlaceholder":45},[118,63173,63174,63176,63178],{"class":120,"line":1697},[118,63175,51778],{"class":128},[118,63177,50628],{"class":51293},[118,63179,51300],{"class":128},[15,63181,63182],{},"总结：内容发生改变才回去触发",[89,63184,63186],{"id":63185},"_326-事件对象","3.2.6 事件对象",[22003,63188,63190],{"id":63189},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[15,63192,63193],{},[1466,63194],{"alt":39,"src":63195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[15,63197,63198],{},[1466,63199],{"alt":39,"src":63200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[15,63202,63203],{},"点击一次，就输出了事件对象，它是个对象",[15,63205,63206],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[15,63208,63209],{},[1466,63210],{"alt":39,"src":63211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22003,63213,63215],{"id":63214},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[15,63217,63218],{},[1466,63219],{"alt":39,"src":63220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[15,63222,63223],{},"实现按特殊字符才是实现打印输出效果：",[109,63225,63227],{"className":53060,"code":63226,"language":53062,"meta":39,"style":39},"\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",[115,63228,63229,63237,63242,63256,63264,63269,63274,63279,63284,63289,63294,63299,63304,63309,63313,63317,63325],{"__ignoreMap":39},[118,63230,63231,63233,63235],{"class":120,"line":121},[118,63232,1038],{"class":128},[118,63234,51793],{"class":51293},[118,63236,51300],{"class":128},[118,63238,63239],{"class":120,"line":40},[118,63240,63241],{"class":187},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[118,63243,63244,63246,63248,63250,63252,63254],{"class":120,"line":1183},[118,63245,52137],{"class":128},[118,63247,53814],{"class":51293},[118,63249,53817],{"class":1967},[118,63251,174],{"class":128},[118,63253,62692],{"class":233},[118,63255,51300],{"class":128},[118,63257,63258,63260,63262],{"class":120,"line":1198},[118,63259,52137],{"class":128},[118,63261,51806],{"class":51293},[118,63263,51300],{"class":128},[118,63265,63266],{"class":120,"line":1204},[118,63267,63268],{"class":128},"    \u002F\u002F const btn = document.querySelector('button')\n",[118,63270,63271],{"class":120,"line":1218},[118,63272,63273],{"class":128},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[118,63275,63276],{"class":120,"line":1224},[118,63277,63278],{"class":128},"    \u002F\u002F   console.log(e);\n",[118,63280,63281],{"class":120,"line":1315},[118,63282,63283],{"class":128},"    \u002F\u002F })\n",[118,63285,63286],{"class":120,"line":1321},[118,63287,63288],{"class":128},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[118,63290,63291],{"class":120,"line":1333},[118,63292,63293],{"class":128},"    const input = document.querySelector('input')\n",[118,63295,63296],{"class":120,"line":1616},[118,63297,63298],{"class":128},"    input.addEventListener('keyup', function (e) {\n",[118,63300,63301],{"class":120,"line":1621},[118,63302,63303],{"class":128},"      if (e.key === 'Enter') {\n",[118,63305,63306],{"class":120,"line":1627},[118,63307,63308],{"class":128},"        console.log('我按下了回车键')\n",[118,63310,63311],{"class":120,"line":1632},[118,63312,52391],{"class":128},[118,63314,63315],{"class":120,"line":1646},[118,63316,33454],{"class":128},[118,63318,63319,63321,63323],{"class":120,"line":1651},[118,63320,52410],{"class":128},[118,63322,51806],{"class":51293},[118,63324,51300],{"class":128},[118,63326,63327,63329,63331],{"class":120,"line":1657},[118,63328,51778],{"class":128},[118,63330,51793],{"class":51293},[118,63332,51300],{"class":128},[22003,63334,63336],{"id":63335},"_3263-trim方法","3.2.6.3 trim方法",[15,63338,63339],{},[1466,63340],{"alt":39,"src":63341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[15,63343,63344],{},[1466,63345],{"alt":39,"src":63346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[15,63348,63349],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[15,63351,63352],{},"str.trim()",[89,63354,63356],{"id":63355},"_327-环境对象","3.2.7 环境对象",[15,63358,63359],{},[1466,63360],{"alt":39,"src":63361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[15,63363,63364],{},[1466,63365],{"alt":39,"src":63366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[15,63368,63369],{},[1466,63370],{"alt":39,"src":63371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[15,63373,63374],{},"实际函数调用是window.fn()",[15,63376,63377],{},"普通函数里面this指向的是window",[1135,63379,63380,63383,63386],{},[75,63381,63382],{},"在普通函数下，this指向的是window",[75,63384,63385],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[75,63387,63388],{},"箭头函数没有this",[15,63390,63391],{},"粗略记法就是：谁调用，this就指向谁",[15,63393,63394],{},[1466,63395],{"alt":39,"src":63396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[15,63398,63399],{},[1466,63400],{"alt":39,"src":63401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[15,63403,63404],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[15,63406,63407],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[109,63409,63411],{"className":53060,"code":63410,"language":53062,"meta":39,"style":39},"\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",[115,63412,63413,63421,63433,63441,63446,63451,63456,63461,63465,63473],{"__ignoreMap":39},[118,63414,63415,63417,63419],{"class":120,"line":121},[118,63416,1038],{"class":128},[118,63418,51793],{"class":51293},[118,63420,51300],{"class":128},[118,63422,63423,63425,63427,63429,63431],{"class":120,"line":40},[118,63424,52137],{"class":128},[118,63426,53880],{"class":51293},[118,63428,53886],{"class":128},[118,63430,53880],{"class":51293},[118,63432,51300],{"class":128},[118,63434,63435,63437,63439],{"class":120,"line":1183},[118,63436,52137],{"class":128},[118,63438,51806],{"class":51293},[118,63440,51300],{"class":128},[118,63442,63443],{"class":120,"line":1198},[118,63444,63445],{"class":128},"    const button = document.querySelector('button')\n",[118,63447,63448],{"class":120,"line":1204},[118,63449,63450],{"class":128},"    button.addEventListener('click', function () {\n",[118,63452,63453],{"class":120,"line":1218},[118,63454,63455],{"class":128},"      \u002F\u002F console.log(this);\n",[118,63457,63458],{"class":120,"line":1224},[118,63459,63460],{"class":128},"      this.style.color = 'pink'\n",[118,63462,63463],{"class":120,"line":1315},[118,63464,33454],{"class":128},[118,63466,63467,63469,63471],{"class":120,"line":1321},[118,63468,52410],{"class":128},[118,63470,51806],{"class":51293},[118,63472,51300],{"class":128},[118,63474,63475,63477,63479],{"class":120,"line":1333},[118,63476,51778],{"class":128},[118,63478,51793],{"class":51293},[118,63480,51300],{"class":128},[89,63482,63484],{"id":63483},"_328-回调函数","3.2.8 回调函数",[15,63486,63487],{},[1466,63488],{"alt":39,"src":63489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[15,63491,63492],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[15,63494,11337],{},[1135,63496,63497,63500,63503],{},[75,63498,63499],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[75,63501,63502],{},"回调函数本质还是函数，只不过把它当成参数使用",[75,63504,63505],{},"使用匿名函数做为回调函数比较常见",[89,63507,63509],{"id":63508},"_329-tab栏切换","3.2.9 tab栏切换",[15,63511,63512],{},[1466,63513],{"alt":39,"src":63514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[109,63516,63518],{"className":50626,"code":63517,"language":50628,"meta":39,"style":39},"\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",[115,63519,63520,63530,63544,63548,63556,63570,63590,63610,63623,63631,63637,63647,63657,63661,63665,63672,63685,63698,63710,63726,63730,63734,63741,63753,63765,63777,63787,63797,63801,63805,63814,63826,63837,63849,63853,63857,63865,63875,63885,63895,63899,63903,63913,63927,63939,63943,63947,63959,63970,63987,63997,64001,64005,64020,64031,64041,64045,64049,64056,64071,64075,64079,64087,64097,64101,64105,64114,64124,64128,64136,64144,64148,64156,64171,64186,64199,64207,64241,64268,64295,64322,64349,64357,64365,64380,64417,64452,64487,64522,64557,64565,64573,64581,64586,64591,64611,64616,64645,64650,64655,64673,64678,64683,64688,64710,64715,64731,64735,64740,64745,64766,64771,64800,64804,64809,64813,64821,64829,64833],{"__ignoreMap":39},[118,63521,63522,63524,63526,63528],{"class":120,"line":121},[118,63523,51290],{"class":128},[118,63525,51294],{"class":51293},[118,63527,51297],{"class":1967},[118,63529,51300],{"class":128},[118,63531,63532,63534,63536,63538,63540,63542],{"class":120,"line":40},[118,63533,1038],{"class":128},[118,63535,50628],{"class":51293},[118,63537,51309],{"class":1967},[118,63539,174],{"class":128},[118,63541,51314],{"class":233},[118,63543,51300],{"class":128},[118,63545,63546],{"class":120,"line":1183},[118,63547,2404],{"emptyLinePlaceholder":45},[118,63549,63550,63552,63554],{"class":120,"line":1198},[118,63551,1038],{"class":128},[118,63553,51327],{"class":51293},[118,63555,51300],{"class":128},[118,63557,63558,63560,63562,63564,63566,63568],{"class":120,"line":1204},[118,63559,52137],{"class":128},[118,63561,51337],{"class":51293},[118,63563,51340],{"class":1967},[118,63565,174],{"class":128},[118,63567,51345],{"class":233},[118,63569,59120],{"class":128},[118,63571,63572,63574,63576,63578,63580,63582,63584,63586,63588],{"class":120,"line":1218},[118,63573,52137],{"class":128},[118,63575,51337],{"class":51293},[118,63577,51356],{"class":1967},[118,63579,174],{"class":128},[118,63581,51361],{"class":233},[118,63583,51364],{"class":1967},[118,63585,174],{"class":128},[118,63587,51369],{"class":233},[118,63589,59120],{"class":128},[118,63591,63592,63594,63596,63598,63600,63602,63604,63606,63608],{"class":120,"line":1224},[118,63593,52137],{"class":128},[118,63595,51337],{"class":51293},[118,63597,14925],{"class":1967},[118,63599,174],{"class":128},[118,63601,51384],{"class":233},[118,63603,51364],{"class":1967},[118,63605,174],{"class":128},[118,63607,51391],{"class":233},[118,63609,59120],{"class":128},[118,63611,63612,63614,63616,63619,63621],{"class":120,"line":1315},[118,63613,52137],{"class":128},[118,63615,51400],{"class":51293},[118,63617,63618],{"class":128},">tab栏切换\u003C\u002F",[118,63620,51400],{"class":51293},[118,63622,51300],{"class":128},[118,63624,63625,63627,63629],{"class":120,"line":1321},[118,63626,52137],{"class":128},[118,63628,5131],{"class":51293},[118,63630,51300],{"class":128},[118,63632,63633,63635],{"class":120,"line":1333},[118,63634,6408],{"class":51293},[118,63636,15577],{"class":128},[118,63638,63639,63641,63643,63645],{"class":120,"line":1616},[118,63640,54699],{"class":177},[118,63642,51430],{"class":128},[118,63644,320],{"class":177},[118,63646,1294],{"class":128},[118,63648,63649,63651,63653,63655],{"class":120,"line":1621},[118,63650,54688],{"class":177},[118,63652,51430],{"class":128},[118,63654,320],{"class":177},[118,63656,1294],{"class":128},[118,63658,63659],{"class":120,"line":1627},[118,63660,2191],{"class":128},[118,63662,63663],{"class":120,"line":1632},[118,63664,2404],{"emptyLinePlaceholder":45},[118,63666,63667,63670],{"class":120,"line":1646},[118,63668,63669],{"class":1967},"    .tab",[118,63671,15577],{"class":128},[118,63673,63674,63676,63678,63681,63683],{"class":120,"line":1651},[118,63675,54764],{"class":177},[118,63677,51430],{"class":128},[118,63679,63680],{"class":177},"590",[118,63682,51485],{"class":124},[118,63684,1294],{"class":128},[118,63686,63687,63689,63691,63694,63696],{"class":120,"line":1657},[118,63688,54778],{"class":177},[118,63690,51430],{"class":128},[118,63692,63693],{"class":177},"340",[118,63695,51485],{"class":124},[118,63697,1294],{"class":128},[118,63699,63700,63702,63704,63706,63708],{"class":120,"line":1678},[118,63701,54699],{"class":177},[118,63703,51430],{"class":128},[118,63705,828],{"class":177},[118,63707,51485],{"class":124},[118,63709,1294],{"class":128},[118,63711,63712,63714,63716,63718,63720,63722,63724],{"class":120,"line":1683},[118,63713,61970],{"class":177},[118,63715,51430],{"class":128},[118,63717,346],{"class":177},[118,63719,51485],{"class":124},[118,63721,51514],{"class":177},[118,63723,62237],{"class":177},[118,63725,1294],{"class":128},[118,63727,63728],{"class":120,"line":1697},[118,63729,2191],{"class":128},[118,63731,63732],{"class":120,"line":1702},[118,63733,2404],{"emptyLinePlaceholder":45},[118,63735,63736,63739],{"class":120,"line":1731},[118,63737,63738],{"class":1967},"    .tab-nav",[118,63740,15577],{"class":128},[118,63742,63743,63745,63747,63749,63751],{"class":120,"line":1736},[118,63744,54764],{"class":177},[118,63746,51430],{"class":128},[118,63748,439],{"class":177},[118,63750,456],{"class":124},[118,63752,1294],{"class":128},[118,63754,63755,63757,63759,63761,63763],{"class":120,"line":1753},[118,63756,54778],{"class":177},[118,63758,51430],{"class":128},[118,63760,1035],{"class":177},[118,63762,51485],{"class":124},[118,63764,1294],{"class":128},[118,63766,63767,63769,63771,63773,63775],{"class":120,"line":1758},[118,63768,57352],{"class":177},[118,63770,51430],{"class":128},[118,63772,1035],{"class":177},[118,63774,51485],{"class":124},[118,63776,1294],{"class":128},[118,63778,63779,63781,63783,63785],{"class":120,"line":1763},[118,63780,55002],{"class":177},[118,63782,51430],{"class":128},[118,63784,51470],{"class":177},[118,63786,1294],{"class":128},[118,63788,63789,63791,63793,63795],{"class":120,"line":1768},[118,63790,55013],{"class":177},[118,63792,51430],{"class":128},[118,63794,51661],{"class":177},[118,63796,1294],{"class":128},[118,63798,63799],{"class":120,"line":1782},[118,63800,2191],{"class":128},[118,63802,63803],{"class":120,"line":1787},[118,63804,2404],{"emptyLinePlaceholder":45},[118,63806,63807,63809,63812],{"class":120,"line":2581},[118,63808,63738],{"class":1967},[118,63810,63811],{"class":51293}," h3",[118,63813,15577],{"class":128},[118,63815,63816,63818,63820,63822,63824],{"class":120,"line":2595},[118,63817,54915],{"class":177},[118,63819,51430],{"class":128},[118,63821,928],{"class":177},[118,63823,51485],{"class":124},[118,63825,1294],{"class":128},[118,63827,63828,63830,63832,63835],{"class":120,"line":2603},[118,63829,62327],{"class":177},[118,63831,51430],{"class":128},[118,63833,63834],{"class":177},"normal",[118,63836,1294],{"class":128},[118,63838,63839,63841,63843,63845,63847],{"class":120,"line":2608},[118,63840,61993],{"class":177},[118,63842,51430],{"class":128},[118,63844,828],{"class":177},[118,63846,51485],{"class":124},[118,63848,1294],{"class":128},[118,63850,63851],{"class":120,"line":2614},[118,63852,2191],{"class":128},[118,63854,63855],{"class":120,"line":2620},[118,63856,2404],{"emptyLinePlaceholder":45},[118,63858,63859,63861,63863],{"class":120,"line":2625},[118,63860,63738],{"class":1967},[118,63862,61285],{"class":51293},[118,63864,15577],{"class":128},[118,63866,63867,63869,63871,63873],{"class":120,"line":7953},[118,63868,54725],{"class":177},[118,63870,51430],{"class":128},[118,63872,54730],{"class":177},[118,63874,1294],{"class":128},[118,63876,63877,63879,63881,63883],{"class":120,"line":7977},[118,63878,55002],{"class":177},[118,63880,51430],{"class":128},[118,63882,51470],{"class":177},[118,63884,1294],{"class":128},[118,63886,63887,63889,63891,63893],{"class":120,"line":7982},[118,63888,55013],{"class":177},[118,63890,51430],{"class":128},[118,63892,51573],{"class":177},[118,63894,1294],{"class":128},[118,63896,63897],{"class":120,"line":7988},[118,63898,2191],{"class":128},[118,63900,63901],{"class":120,"line":8015},[118,63902,2404],{"emptyLinePlaceholder":45},[118,63904,63905,63907,63909,63911],{"class":120,"line":8020},[118,63906,63738],{"class":1967},[118,63908,61285],{"class":51293},[118,63910,55068],{"class":51293},[118,63912,15577],{"class":128},[118,63914,63915,63917,63919,63921,63923,63925],{"class":120,"line":8026},[118,63916,54699],{"class":177},[118,63918,51430],{"class":128},[118,63920,320],{"class":177},[118,63922,8955],{"class":177},[118,63924,51485],{"class":124},[118,63926,1294],{"class":128},[118,63928,63929,63931,63933,63935,63937],{"class":120,"line":8038},[118,63930,54915],{"class":177},[118,63932,51430],{"class":128},[118,63934,677],{"class":177},[118,63936,51485],{"class":124},[118,63938,1294],{"class":128},[118,63940,63941],{"class":120,"line":8050},[118,63942,2191],{"class":128},[118,63944,63945],{"class":120,"line":8062},[118,63946,2404],{"emptyLinePlaceholder":45},[118,63948,63949,63951,63953,63955,63957],{"class":120,"line":9721},[118,63950,63738],{"class":1967},[118,63952,61285],{"class":51293},[118,63954,55068],{"class":51293},[118,63956,1402],{"class":51293},[118,63958,15577],{"class":128},[118,63960,63961,63964,63966,63968],{"class":120,"line":9746},[118,63962,63963],{"class":177},"      text-decoration",[118,63965,51430],{"class":128},[118,63967,54730],{"class":177},[118,63969,1294],{"class":128},[118,63971,63972,63974,63976,63978,63980,63982,63985],{"class":120,"line":9769},[118,63973,62225],{"class":177},[118,63975,51430],{"class":128},[118,63977,206],{"class":177},[118,63979,51485],{"class":124},[118,63981,51514],{"class":177},[118,63983,63984],{"class":177}," transparent",[118,63986,1294],{"class":128},[118,63988,63989,63991,63993,63995],{"class":120,"line":9793},[118,63990,57409],{"class":177},[118,63992,51430],{"class":128},[118,63994,62362],{"class":177},[118,63996,1294],{"class":128},[118,63998,63999],{"class":120,"line":9798},[118,64000,2191],{"class":128},[118,64002,64003],{"class":120,"line":9803},[118,64004,2404],{"emptyLinePlaceholder":45},[118,64006,64007,64009,64011,64013,64015,64018],{"class":120,"line":9808},[118,64008,63738],{"class":1967},[118,64010,61285],{"class":51293},[118,64012,55068],{"class":51293},[118,64014,1402],{"class":51293},[118,64016,64017],{"class":1967},".active",[118,64019,15577],{"class":128},[118,64021,64022,64024,64026,64029],{"class":120,"line":9817},[118,64023,61784],{"class":177},[118,64025,51430],{"class":128},[118,64027,64028],{"class":177},"#e1251b",[118,64030,1294],{"class":128},[118,64032,64033,64035,64037,64039],{"class":120,"line":9822},[118,64034,57409],{"class":177},[118,64036,51430],{"class":128},[118,64038,64028],{"class":177},[118,64040,1294],{"class":128},[118,64042,64043],{"class":120,"line":9828},[118,64044,2191],{"class":128},[118,64046,64047],{"class":120,"line":9849},[118,64048,2404],{"emptyLinePlaceholder":45},[118,64050,64051,64054],{"class":120,"line":9855},[118,64052,64053],{"class":1967},"    .tab-content",[118,64055,15577],{"class":128},[118,64057,64058,64060,64062,64064,64067,64069],{"class":120,"line":9869},[118,64059,54688],{"class":177},[118,64061,51430],{"class":128},[118,64063,320],{"class":177},[118,64065,64066],{"class":177}," 16",[118,64068,51485],{"class":124},[118,64070,1294],{"class":128},[118,64072,64073],{"class":120,"line":9875},[118,64074,2191],{"class":128},[118,64076,64077],{"class":120,"line":9902},[118,64078,2404],{"emptyLinePlaceholder":45},[118,64080,64081,64083,64085],{"class":120,"line":9911},[118,64082,64053],{"class":1967},[118,64084,62167],{"class":1967},[118,64086,15577],{"class":128},[118,64088,64089,64091,64093,64095],{"class":120,"line":9917},[118,64090,55002],{"class":177},[118,64092,51430],{"class":128},[118,64094,54730],{"class":177},[118,64096,1294],{"class":128},[118,64098,64099],{"class":120,"line":9925},[118,64100,2191],{"class":128},[118,64102,64103],{"class":120,"line":9930},[118,64104,2404],{"emptyLinePlaceholder":45},[118,64106,64107,64109,64112],{"class":120,"line":16609},[118,64108,64053],{"class":1967},[118,64110,64111],{"class":1967}," .item.active",[118,64113,15577],{"class":128},[118,64115,64116,64118,64120,64122],{"class":120,"line":16615},[118,64117,55002],{"class":177},[118,64119,51430],{"class":128},[118,64121,60862],{"class":177},[118,64123,1294],{"class":128},[118,64125,64126],{"class":120,"line":16638},[118,64127,2191],{"class":128},[118,64129,64130,64132,64134],{"class":120,"line":16644},[118,64131,52410],{"class":128},[118,64133,5131],{"class":51293},[118,64135,51300],{"class":128},[118,64137,64138,64140,64142],{"class":120,"line":16667},[118,64139,51778],{"class":128},[118,64141,51327],{"class":51293},[118,64143,51300],{"class":128},[118,64145,64146],{"class":120,"line":16681},[118,64147,2404],{"emptyLinePlaceholder":45},[118,64149,64150,64152,64154],{"class":120,"line":16701},[118,64151,1038],{"class":128},[118,64153,51793],{"class":51293},[118,64155,51300],{"class":128},[118,64157,64158,64160,64162,64164,64166,64169],{"class":120,"line":16707},[118,64159,52137],{"class":128},[118,64161,51604],{"class":51293},[118,64163,53479],{"class":1967},[118,64165,174],{"class":128},[118,64167,64168],{"class":233},"\"tab\"",[118,64170,51300],{"class":128},[118,64172,64173,64175,64177,64179,64181,64184],{"class":120,"line":16718},[118,64174,51334],{"class":128},[118,64176,51604],{"class":51293},[118,64178,53479],{"class":1967},[118,64180,174],{"class":128},[118,64182,64183],{"class":233},"\"tab-nav\"",[118,64185,51300],{"class":128},[118,64187,64188,64190,64192,64195,64197],{"class":120,"line":16741},[118,64189,55227],{"class":128},[118,64191,89],{"class":51293},[118,64193,64194],{"class":128},">每日特价\u003C\u002F",[118,64196,89],{"class":51293},[118,64198,51300],{"class":128},[118,64200,64201,64203,64205],{"class":120,"line":16763},[118,64202,55227],{"class":128},[118,64204,1135],{"class":51293},[118,64206,51300],{"class":128},[118,64208,64209,64211,64213,64215,64217,64219,64221,64223,64225,64227,64230,64233,64235,64237,64239],{"class":120,"line":16768},[118,64210,55295],{"class":128},[118,64212,75],{"class":51293},[118,64214,61045],{"class":128},[118,64216,21],{"class":51293},[118,64218,53479],{"class":1967},[118,64220,174],{"class":128},[118,64222,59699],{"class":233},[118,64224,61050],{"class":1967},[118,64226,174],{"class":128},[118,64228,64229],{"class":233},"\"javascript:;\"",[118,64231,64232],{"class":128},">精选\u003C\u002F",[118,64234,21],{"class":51293},[118,64236,55307],{"class":128},[118,64238,75],{"class":51293},[118,64240,51300],{"class":128},[118,64242,64243,64245,64247,64249,64251,64253,64255,64257,64260,64262,64264,64266],{"class":120,"line":16774},[118,64244,55295],{"class":128},[118,64246,75],{"class":51293},[118,64248,61045],{"class":128},[118,64250,21],{"class":51293},[118,64252,61050],{"class":1967},[118,64254,174],{"class":128},[118,64256,64229],{"class":233},[118,64258,64259],{"class":128},">美食\u003C\u002F",[118,64261,21],{"class":51293},[118,64263,55307],{"class":128},[118,64265,75],{"class":51293},[118,64267,51300],{"class":128},[118,64269,64270,64272,64274,64276,64278,64280,64282,64284,64287,64289,64291,64293],{"class":120,"line":16788},[118,64271,55295],{"class":128},[118,64273,75],{"class":51293},[118,64275,61045],{"class":128},[118,64277,21],{"class":51293},[118,64279,61050],{"class":1967},[118,64281,174],{"class":128},[118,64283,64229],{"class":233},[118,64285,64286],{"class":128},">百货\u003C\u002F",[118,64288,21],{"class":51293},[118,64290,55307],{"class":128},[118,64292,75],{"class":51293},[118,64294,51300],{"class":128},[118,64296,64297,64299,64301,64303,64305,64307,64309,64311,64314,64316,64318,64320],{"class":120,"line":16801},[118,64298,55295],{"class":128},[118,64300,75],{"class":51293},[118,64302,61045],{"class":128},[118,64304,21],{"class":51293},[118,64306,61050],{"class":1967},[118,64308,174],{"class":128},[118,64310,64229],{"class":233},[118,64312,64313],{"class":128},">个护\u003C\u002F",[118,64315,21],{"class":51293},[118,64317,55307],{"class":128},[118,64319,75],{"class":51293},[118,64321,51300],{"class":128},[118,64323,64324,64326,64328,64330,64332,64334,64336,64338,64341,64343,64345,64347],{"class":120,"line":16806},[118,64325,55295],{"class":128},[118,64327,75],{"class":51293},[118,64329,61045],{"class":128},[118,64331,21],{"class":51293},[118,64333,61050],{"class":1967},[118,64335,174],{"class":128},[118,64337,64229],{"class":233},[118,64339,64340],{"class":128},">预告\u003C\u002F",[118,64342,21],{"class":51293},[118,64344,55307],{"class":128},[118,64346,75],{"class":51293},[118,64348,51300],{"class":128},[118,64350,64351,64353,64355],{"class":120,"line":16820},[118,64352,55400],{"class":128},[118,64354,1135],{"class":51293},[118,64356,51300],{"class":128},[118,64358,64359,64361,64363],{"class":120,"line":16825},[118,64360,51769],{"class":128},[118,64362,51604],{"class":51293},[118,64364,51300],{"class":128},[118,64366,64367,64369,64371,64373,64375,64378],{"class":120,"line":16831},[118,64368,51334],{"class":128},[118,64370,51604],{"class":51293},[118,64372,53479],{"class":1967},[118,64374,174],{"class":128},[118,64376,64377],{"class":233},"\"tab-content\"",[118,64379,51300],{"class":128},[118,64381,64382,64384,64386,64388,64390,64393,64395,64397,64399,64401,64404,64406,64408,64410,64413,64415],{"class":120,"line":16836},[118,64383,55227],{"class":128},[118,64385,51604],{"class":51293},[118,64387,53479],{"class":1967},[118,64389,174],{"class":128},[118,64391,64392],{"class":233},"\"item active\"",[118,64394,61045],{"class":128},[118,64396,1466],{"class":51293},[118,64398,55232],{"class":1967},[118,64400,174],{"class":128},[118,64402,64403],{"class":233},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[118,64405,55240],{"class":1967},[118,64407,174],{"class":128},[118,64409,7657],{"class":233},[118,64411,64412],{"class":128}," \u002F>\u003C\u002F",[118,64414,51604],{"class":51293},[118,64416,51300],{"class":128},[118,64418,64419,64421,64423,64425,64427,64429,64431,64433,64435,64437,64440,64442,64444,64446,64448,64450],{"class":120,"line":16850},[118,64420,55227],{"class":128},[118,64422,51604],{"class":51293},[118,64424,53479],{"class":1967},[118,64426,174],{"class":128},[118,64428,62616],{"class":233},[118,64430,61045],{"class":128},[118,64432,1466],{"class":51293},[118,64434,55232],{"class":1967},[118,64436,174],{"class":128},[118,64438,64439],{"class":233},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[118,64441,55240],{"class":1967},[118,64443,174],{"class":128},[118,64445,7657],{"class":233},[118,64447,64412],{"class":128},[118,64449,51604],{"class":51293},[118,64451,51300],{"class":128},[118,64453,64454,64456,64458,64460,64462,64464,64466,64468,64470,64472,64475,64477,64479,64481,64483,64485],{"class":120,"line":16855},[118,64455,55227],{"class":128},[118,64457,51604],{"class":51293},[118,64459,53479],{"class":1967},[118,64461,174],{"class":128},[118,64463,62616],{"class":233},[118,64465,61045],{"class":128},[118,64467,1466],{"class":51293},[118,64469,55232],{"class":1967},[118,64471,174],{"class":128},[118,64473,64474],{"class":233},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[118,64476,55240],{"class":1967},[118,64478,174],{"class":128},[118,64480,7657],{"class":233},[118,64482,64412],{"class":128},[118,64484,51604],{"class":51293},[118,64486,51300],{"class":128},[118,64488,64489,64491,64493,64495,64497,64499,64501,64503,64505,64507,64510,64512,64514,64516,64518,64520],{"class":120,"line":16860},[118,64490,55227],{"class":128},[118,64492,51604],{"class":51293},[118,64494,53479],{"class":1967},[118,64496,174],{"class":128},[118,64498,62616],{"class":233},[118,64500,61045],{"class":128},[118,64502,1466],{"class":51293},[118,64504,55232],{"class":1967},[118,64506,174],{"class":128},[118,64508,64509],{"class":233},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[118,64511,55240],{"class":1967},[118,64513,174],{"class":128},[118,64515,7657],{"class":233},[118,64517,64412],{"class":128},[118,64519,51604],{"class":51293},[118,64521,51300],{"class":128},[118,64523,64524,64526,64528,64530,64532,64534,64536,64538,64540,64542,64545,64547,64549,64551,64553,64555],{"class":120,"line":16874},[118,64525,55227],{"class":128},[118,64527,51604],{"class":51293},[118,64529,53479],{"class":1967},[118,64531,174],{"class":128},[118,64533,62616],{"class":233},[118,64535,61045],{"class":128},[118,64537,1466],{"class":51293},[118,64539,55232],{"class":1967},[118,64541,174],{"class":128},[118,64543,64544],{"class":233},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[118,64546,55240],{"class":1967},[118,64548,174],{"class":128},[118,64550,7657],{"class":233},[118,64552,64412],{"class":128},[118,64554,51604],{"class":51293},[118,64556,51300],{"class":128},[118,64558,64559,64561,64563],{"class":120,"line":16886},[118,64560,51769],{"class":128},[118,64562,51604],{"class":51293},[118,64564,51300],{"class":128},[118,64566,64567,64569,64571],{"class":120,"line":16891},[118,64568,52410],{"class":128},[118,64570,51604],{"class":51293},[118,64572,51300],{"class":128},[118,64574,64575,64577,64579],{"class":120,"line":16904},[118,64576,52137],{"class":128},[118,64578,51806],{"class":51293},[118,64580,51300],{"class":128},[118,64582,64583],{"class":120,"line":16909},[118,64584,64585],{"class":187},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[118,64587,64588],{"class":120,"line":16914},[118,64589,64590],{"class":187},"    \u002F\u002F 1.1 获取 a 元素 \n",[118,64592,64593,64595,64598,64600,64602,64604,64606,64609],{"class":120,"line":16919},[118,64594,11226],{"class":124},[118,64596,64597],{"class":177}," as",[118,64599,13569],{"class":124},[118,64601,54389],{"class":128},[118,64603,55674],{"class":1967},[118,64605,129],{"class":128},[118,64607,64608],{"class":233},"'.tab-nav a'",[118,64610,135],{"class":128},[118,64612,64613],{"class":120,"line":16932},[118,64614,64615],{"class":187},"    \u002F\u002F console.log(as) \n",[118,64617,64618,64620,64622,64624,64626,64628,64630,64632,64634,64637,64639,64641,64643],{"class":120,"line":16937},[118,64619,3205],{"class":124},[118,64621,1662],{"class":128},[118,64623,51840],{"class":124},[118,64625,9443],{"class":128},[118,64627,174],{"class":124},[118,64629,4097],{"class":177},[118,64631,9450],{"class":128},[118,64633,1038],{"class":124},[118,64635,64636],{"class":128}," as.",[118,64638,51961],{"class":177},[118,64640,3218],{"class":128},[118,64642,2296],{"class":124},[118,64644,12447],{"class":128},[118,64646,64647],{"class":120,"line":32626},[118,64648,64649],{"class":187},"      \u002F\u002F console.log(as[i])\n",[118,64651,64652],{"class":120,"line":32632},[118,64653,64654],{"class":187},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[118,64656,64657,64660,64662,64664,64667,64669,64671],{"class":120,"line":32638},[118,64658,64659],{"class":128},"      as[i].",[118,64661,57806],{"class":1967},[118,64663,129],{"class":128},[118,64665,64666],{"class":233},"'mouseenter'",[118,64668,12440],{"class":128},[118,64670,54442],{"class":124},[118,64672,54445],{"class":128},[118,64674,64675],{"class":120,"line":32644},[118,64676,64677],{"class":187},"        \u002F\u002F console.log('鼠标经过')\n",[118,64679,64680],{"class":120,"line":32650},[118,64681,64682],{"class":187},"        \u002F\u002F 排他思想  \n",[118,64684,64685],{"class":120,"line":32661},[118,64686,64687],{"class":187},"        \u002F\u002F 干掉别人 移除类active\n",[118,64689,64690,64692,64694,64696,64699,64701,64703,64705,64708],{"class":120,"line":32667},[118,64691,51918],{"class":128},[118,64693,54392],{"class":1967},[118,64695,129],{"class":128},[118,64697,64698],{"class":233},"'.tab-nav .active'",[118,64700,56996],{"class":128},[118,64702,56999],{"class":1967},[118,64704,129],{"class":128},[118,64706,64707],{"class":233},"'active'",[118,64709,135],{"class":128},[118,64711,64712],{"class":120,"line":32687},[118,64713,64714],{"class":187},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[118,64716,64717,64720,64723,64725,64727,64729],{"class":120,"line":32693},[118,64718,64719],{"class":177},"        this",[118,64721,64722],{"class":128},".classList.",[118,64724,5339],{"class":1967},[118,64726,129],{"class":128},[118,64728,64707],{"class":233},[118,64730,135],{"class":128},[118,64732,64733],{"class":120,"line":32704},[118,64734,2404],{"emptyLinePlaceholder":45},[118,64736,64737],{"class":120,"line":32710},[118,64738,64739],{"class":187},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[118,64741,64742],{"class":120,"line":32716},[118,64743,64744],{"class":187},"        \u002F\u002F 干掉别人\n",[118,64746,64747,64749,64751,64753,64756,64758,64760,64762,64764],{"class":120,"line":32722},[118,64748,51918],{"class":128},[118,64750,54392],{"class":1967},[118,64752,129],{"class":128},[118,64754,64755],{"class":233},"'.tab-content .active'",[118,64757,56996],{"class":128},[118,64759,56999],{"class":1967},[118,64761,129],{"class":128},[118,64763,64707],{"class":233},[118,64765,135],{"class":128},[118,64767,64768],{"class":120,"line":32728},[118,64769,64770],{"class":187},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[118,64772,64773,64775,64777,64779,64782,64784,64786,64788,64790,64792,64794,64796,64798],{"class":120,"line":32734},[118,64774,51918],{"class":128},[118,64776,54392],{"class":1967},[118,64778,129],{"class":128},[118,64780,64781],{"class":233},"`.tab-content .item:nth-child(${",[118,64783,569],{"class":128},[118,64785,45559],{"class":124},[118,64787,25123],{"class":177},[118,64789,57025],{"class":233},[118,64791,56996],{"class":128},[118,64793,5339],{"class":1967},[118,64795,129],{"class":128},[118,64797,64707],{"class":233},[118,64799,135],{"class":128},[118,64801,64802],{"class":120,"line":32740},[118,64803,2404],{"emptyLinePlaceholder":45},[118,64805,64806],{"class":120,"line":32746},[118,64807,64808],{"class":128},"      })\n",[118,64810,64811],{"class":120,"line":32766},[118,64812,2191],{"class":128},[118,64814,64815,64817,64819],{"class":120,"line":32772},[118,64816,52410],{"class":128},[118,64818,51806],{"class":51293},[118,64820,51300],{"class":128},[118,64822,64823,64825,64827],{"class":120,"line":32788},[118,64824,51778],{"class":128},[118,64826,51793],{"class":51293},[118,64828,51300],{"class":128},[118,64830,64831],{"class":120,"line":32794},[118,64832,2404],{"emptyLinePlaceholder":45},[118,64834,64835,64837,64839],{"class":120,"line":32808},[118,64836,51778],{"class":128},[118,64838,50628],{"class":51293},[118,64840,51300],{"class":128},[15,64842,64843],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[15,64845,64846],{},"在监听事件中，this指向的就是他的调用者",[15,64848,64849],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[15,64851,53713],{},[15,64853,64854],{},"(function () {",[15,64856,64857],{},"const list = document.querySelector('.xtx-elevator-list')",[15,64859,64860],{},"list.addEventListener('click', function (e) {",[15,64862,64863],{},"if (e.target.tagName === 'A') {",[15,64865,64866],{},"\u002F\u002F 排他思想",[15,64868,64869],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[15,64871,64872],{},"const old = document.querySelector('.xtx-elevator-list .active')",[15,64874,64875],{},"\u002F\u002F console.log(old);",[15,64877,64878],{},"\u002F\u002F 判断",[15,64880,64881],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[15,64883,64884],{},"if (old) old.classList.remove('active')",[15,64886,64887],{},"e.target.classList.add('active')",[15,64889,1074],{},[15,64891,52457],{},[15,64893,64894],{},"})();",[89,64896,64898],{"id":64897},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[109,64900,64902],{"className":50626,"code":64901,"language":50628,"meta":39,"style":39},"\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",[115,64903,64904,64914,64918,64926,64930,64944,64958,64970,64978,64984,64994,65004,65008,65012,65019,65031,65042,65059,65072,65086,65096,65100,65104,65111,65122,65140,65150,65162,65166,65170,65177,65194,65205,65217,65221,65225,65232,65244,65248,65256,65264,65268,65276,65284,65292,65307,65351,65359,65372,65385,65398,65406,65414,65422,65450,65458,65470,65483,65496,65504,65512,65520,65546,65554,65567,65579,65592,65600,65608,65616,65642,65650,65663,65675,65688,65696,65704,65712,65717,65737,65742,65762,65767,65784,65789,65797,65802,65831,65844,65848,65852,65857,65861,65889,65894,65911,65916,65921,65926,65931,65957,65961,65965,65973,65981,65985],{"__ignoreMap":39},[118,64905,64906,64908,64910,64912],{"class":120,"line":121},[118,64907,51290],{"class":128},[118,64909,51294],{"class":51293},[118,64911,51297],{"class":1967},[118,64913,51300],{"class":128},[118,64915,64916],{"class":120,"line":40},[118,64917,2404],{"emptyLinePlaceholder":45},[118,64919,64920,64922,64924],{"class":120,"line":1183},[118,64921,1038],{"class":128},[118,64923,50628],{"class":51293},[118,64925,51300],{"class":128},[118,64927,64928],{"class":120,"line":1198},[118,64929,2404],{"emptyLinePlaceholder":45},[118,64931,64932,64934,64936,64938,64940,64942],{"class":120,"line":1204},[118,64933,1038],{"class":128},[118,64935,51327],{"class":51293},[118,64937,51309],{"class":1967},[118,64939,174],{"class":128},[118,64941,51314],{"class":233},[118,64943,51300],{"class":128},[118,64945,64946,64948,64950,64952,64954,64956],{"class":120,"line":1218},[118,64947,52137],{"class":128},[118,64949,51337],{"class":51293},[118,64951,51340],{"class":1967},[118,64953,174],{"class":128},[118,64955,51345],{"class":233},[118,64957,51300],{"class":128},[118,64959,64960,64962,64964,64966,64968],{"class":120,"line":1224},[118,64961,52137],{"class":128},[118,64963,51400],{"class":51293},[118,64965,55307],{"class":128},[118,64967,51400],{"class":51293},[118,64969,51300],{"class":128},[118,64971,64972,64974,64976],{"class":120,"line":1315},[118,64973,52137],{"class":128},[118,64975,5131],{"class":51293},[118,64977,51300],{"class":128},[118,64979,64980,64982],{"class":120,"line":1321},[118,64981,6408],{"class":51293},[118,64983,15577],{"class":128},[118,64985,64986,64988,64990,64992],{"class":120,"line":1333},[118,64987,54699],{"class":177},[118,64989,51430],{"class":128},[118,64991,320],{"class":177},[118,64993,1294],{"class":128},[118,64995,64996,64998,65000,65002],{"class":120,"line":1616},[118,64997,54688],{"class":177},[118,64999,51430],{"class":128},[118,65001,320],{"class":177},[118,65003,1294],{"class":128},[118,65005,65006],{"class":120,"line":1621},[118,65007,2191],{"class":128},[118,65009,65010],{"class":120,"line":1627},[118,65011,2404],{"emptyLinePlaceholder":45},[118,65013,65014,65017],{"class":120,"line":1632},[118,65015,65016],{"class":51293},"    table",[118,65018,15577],{"class":128},[118,65020,65021,65024,65026,65029],{"class":120,"line":1646},[118,65022,65023],{"class":177},"      border-collapse",[118,65025,51430],{"class":128},[118,65027,65028],{"class":177},"collapse",[118,65030,1294],{"class":128},[118,65032,65033,65036,65038,65040],{"class":120,"line":1651},[118,65034,65035],{"class":177},"      border-spacing",[118,65037,51430],{"class":128},[118,65039,320],{"class":177},[118,65041,1294],{"class":128},[118,65043,65044,65046,65048,65050,65052,65054,65057],{"class":120,"line":1657},[118,65045,61970],{"class":177},[118,65047,51430],{"class":128},[118,65049,346],{"class":177},[118,65051,51485],{"class":124},[118,65053,51514],{"class":177},[118,65055,65056],{"class":177}," #c0c0c0",[118,65058,1294],{"class":128},[118,65060,65061,65063,65065,65068,65070],{"class":120,"line":1678},[118,65062,54764],{"class":177},[118,65064,51430],{"class":128},[118,65066,65067],{"class":177},"500",[118,65069,51485],{"class":124},[118,65071,1294],{"class":128},[118,65073,65074,65076,65078,65080,65082,65084],{"class":120,"line":1683},[118,65075,54699],{"class":177},[118,65077,51430],{"class":128},[118,65079,439],{"class":177},[118,65081,51485],{"class":124},[118,65083,51549],{"class":177},[118,65085,1294],{"class":128},[118,65087,65088,65090,65092,65094],{"class":120,"line":1697},[118,65089,57279],{"class":177},[118,65091,51430],{"class":128},[118,65093,51585],{"class":177},[118,65095,1294],{"class":128},[118,65097,65098],{"class":120,"line":1702},[118,65099,2191],{"class":128},[118,65101,65102],{"class":120,"line":1731},[118,65103,2404],{"emptyLinePlaceholder":45},[118,65105,65106,65109],{"class":120,"line":1736},[118,65107,65108],{"class":51293},"    th",[118,65110,15577],{"class":128},[118,65112,65113,65115,65117,65120],{"class":120,"line":1753},[118,65114,54877],{"class":177},[118,65116,51430],{"class":128},[118,65118,65119],{"class":177},"#09c",[118,65121,1294],{"class":128},[118,65123,65124,65127,65129,65131,65133,65135,65138],{"class":120,"line":1758},[118,65125,65126],{"class":177},"      font",[118,65128,51430],{"class":128},[118,65130,62332],{"class":177},[118,65132,64066],{"class":177},[118,65134,51485],{"class":124},[118,65136,65137],{"class":233}," \"微软雅黑\"",[118,65139,1294],{"class":128},[118,65141,65142,65144,65146,65148],{"class":120,"line":1763},[118,65143,57409],{"class":177},[118,65145,51430],{"class":128},[118,65147,60835],{"class":177},[118,65149,1294],{"class":128},[118,65151,65152,65154,65156,65158,65160],{"class":120,"line":1768},[118,65153,54778],{"class":177},[118,65155,51430],{"class":128},[118,65157,928],{"class":177},[118,65159,51485],{"class":124},[118,65161,1294],{"class":128},[118,65163,65164],{"class":120,"line":1782},[118,65165,2191],{"class":128},[118,65167,65168],{"class":120,"line":1787},[118,65169,2404],{"emptyLinePlaceholder":45},[118,65171,65172,65175],{"class":120,"line":2581},[118,65173,65174],{"class":51293},"    td",[118,65176,15577],{"class":128},[118,65178,65179,65181,65183,65185,65187,65189,65192],{"class":120,"line":2595},[118,65180,61970],{"class":177},[118,65182,51430],{"class":128},[118,65184,346],{"class":177},[118,65186,51485],{"class":124},[118,65188,51514],{"class":177},[118,65190,65191],{"class":177}," #d0d0d0",[118,65193,1294],{"class":128},[118,65195,65196,65198,65200,65203],{"class":120,"line":2603},[118,65197,57409],{"class":177},[118,65199,51430],{"class":128},[118,65201,65202],{"class":177},"#404060",[118,65204,1294],{"class":128},[118,65206,65207,65209,65211,65213,65215],{"class":120,"line":2608},[118,65208,54688],{"class":177},[118,65210,51430],{"class":128},[118,65212,574],{"class":177},[118,65214,51485],{"class":124},[118,65216,1294],{"class":128},[118,65218,65219],{"class":120,"line":2614},[118,65220,2191],{"class":128},[118,65222,65223],{"class":120,"line":2620},[118,65224,2404],{"emptyLinePlaceholder":45},[118,65226,65227,65230],{"class":120,"line":2625},[118,65228,65229],{"class":1967},"    .allCheck",[118,65231,15577],{"class":128},[118,65233,65234,65236,65238,65240,65242],{"class":120,"line":7953},[118,65235,54764],{"class":177},[118,65237,51430],{"class":128},[118,65239,740],{"class":177},[118,65241,51485],{"class":124},[118,65243,1294],{"class":128},[118,65245,65246],{"class":120,"line":7977},[118,65247,2191],{"class":128},[118,65249,65250,65252,65254],{"class":120,"line":7982},[118,65251,52410],{"class":128},[118,65253,5131],{"class":51293},[118,65255,51300],{"class":128},[118,65257,65258,65260,65262],{"class":120,"line":7988},[118,65259,51778],{"class":128},[118,65261,51327],{"class":51293},[118,65263,51300],{"class":128},[118,65265,65266],{"class":120,"line":8015},[118,65267,2404],{"emptyLinePlaceholder":45},[118,65269,65270,65272,65274],{"class":120,"line":8020},[118,65271,1038],{"class":128},[118,65273,51793],{"class":51293},[118,65275,51300],{"class":128},[118,65277,65278,65280,65282],{"class":120,"line":8026},[118,65279,52137],{"class":128},[118,65281,266],{"class":51293},[118,65283,51300],{"class":128},[118,65285,65286,65288,65290],{"class":120,"line":8038},[118,65287,51334],{"class":128},[118,65289,272],{"class":51293},[118,65291,51300],{"class":128},[118,65293,65294,65296,65298,65300,65302,65305],{"class":120,"line":8050},[118,65295,55227],{"class":128},[118,65297,275],{"class":51293},[118,65299,53479],{"class":1967},[118,65301,174],{"class":128},[118,65303,65304],{"class":233},"\"allCheck\"",[118,65306,51300],{"class":128},[118,65308,65309,65311,65313,65315,65317,65319,65321,65323,65325,65327,65329,65332,65335,65337,65339,65341,65344,65347,65349],{"class":120,"line":8062},[118,65310,55295],{"class":128},[118,65312,53814],{"class":51293},[118,65314,53817],{"class":1967},[118,65316,174],{"class":128},[118,65318,53822],{"class":233},[118,65320,14925],{"class":1967},[118,65322,174],{"class":128},[118,65324,7657],{"class":233},[118,65326,14964],{"class":1967},[118,65328,174],{"class":128},[118,65330,65331],{"class":233},"\"checkAll\"",[118,65333,65334],{"class":128},"> \u003C",[118,65336,118],{"class":51293},[118,65338,53479],{"class":1967},[118,65340,174],{"class":128},[118,65342,65343],{"class":233},"\"all\"",[118,65345,65346],{"class":128},">全选\u003C\u002F",[118,65348,118],{"class":51293},[118,65350,51300],{"class":128},[118,65352,65353,65355,65357],{"class":120,"line":9721},[118,65354,55400],{"class":128},[118,65356,275],{"class":51293},[118,65358,51300],{"class":128},[118,65360,65361,65363,65365,65368,65370],{"class":120,"line":9746},[118,65362,55227],{"class":128},[118,65364,275],{"class":51293},[118,65366,65367],{"class":128},">商品\u003C\u002F",[118,65369,275],{"class":51293},[118,65371,51300],{"class":128},[118,65373,65374,65376,65378,65381,65383],{"class":120,"line":9769},[118,65375,55227],{"class":128},[118,65377,275],{"class":51293},[118,65379,65380],{"class":128},">商家\u003C\u002F",[118,65382,275],{"class":51293},[118,65384,51300],{"class":128},[118,65386,65387,65389,65391,65394,65396],{"class":120,"line":9793},[118,65388,55227],{"class":128},[118,65390,275],{"class":51293},[118,65392,65393],{"class":128},">价格\u003C\u002F",[118,65395,275],{"class":51293},[118,65397,51300],{"class":128},[118,65399,65400,65402,65404],{"class":120,"line":9798},[118,65401,51769],{"class":128},[118,65403,272],{"class":51293},[118,65405,51300],{"class":128},[118,65407,65408,65410,65412],{"class":120,"line":9803},[118,65409,51334],{"class":128},[118,65411,272],{"class":51293},[118,65413,51300],{"class":128},[118,65415,65416,65418,65420],{"class":120,"line":9808},[118,65417,55227],{"class":128},[118,65419,318],{"class":51293},[118,65421,51300],{"class":128},[118,65423,65424,65426,65428,65430,65432,65434,65436,65438,65441,65443,65445,65448],{"class":120,"line":9817},[118,65425,55295],{"class":128},[118,65427,53814],{"class":51293},[118,65429,53817],{"class":1967},[118,65431,174],{"class":128},[118,65433,53822],{"class":233},[118,65435,14925],{"class":1967},[118,65437,174],{"class":128},[118,65439,65440],{"class":233},"\"check\"",[118,65442,53479],{"class":1967},[118,65444,174],{"class":128},[118,65446,65447],{"class":233},"\"ck\"",[118,65449,51300],{"class":128},[118,65451,65452,65454,65456],{"class":120,"line":9822},[118,65453,55400],{"class":128},[118,65455,318],{"class":51293},[118,65457,51300],{"class":128},[118,65459,65460,65462,65464,65466,65468],{"class":120,"line":9828},[118,65461,55227],{"class":128},[118,65463,318],{"class":51293},[118,65465,61166],{"class":128},[118,65467,318],{"class":51293},[118,65469,51300],{"class":128},[118,65471,65472,65474,65476,65479,65481],{"class":120,"line":9849},[118,65473,55227],{"class":128},[118,65475,318],{"class":51293},[118,65477,65478],{"class":128},">小米\u003C\u002F",[118,65480,318],{"class":51293},[118,65482,51300],{"class":128},[118,65484,65485,65487,65489,65492,65494],{"class":120,"line":9855},[118,65486,55227],{"class":128},[118,65488,318],{"class":51293},[118,65490,65491],{"class":128},">￥1999\u003C\u002F",[118,65493,318],{"class":51293},[118,65495,51300],{"class":128},[118,65497,65498,65500,65502],{"class":120,"line":9869},[118,65499,51769],{"class":128},[118,65501,272],{"class":51293},[118,65503,51300],{"class":128},[118,65505,65506,65508,65510],{"class":120,"line":9875},[118,65507,51334],{"class":128},[118,65509,272],{"class":51293},[118,65511,51300],{"class":128},[118,65513,65514,65516,65518],{"class":120,"line":9902},[118,65515,55227],{"class":128},[118,65517,318],{"class":51293},[118,65519,51300],{"class":128},[118,65521,65522,65524,65526,65528,65530,65532,65534,65536,65538,65540,65542,65544],{"class":120,"line":9911},[118,65523,55295],{"class":128},[118,65525,53814],{"class":51293},[118,65527,53817],{"class":1967},[118,65529,174],{"class":128},[118,65531,53822],{"class":233},[118,65533,14925],{"class":1967},[118,65535,174],{"class":128},[118,65537,65440],{"class":233},[118,65539,53479],{"class":1967},[118,65541,174],{"class":128},[118,65543,65447],{"class":233},[118,65545,51300],{"class":128},[118,65547,65548,65550,65552],{"class":120,"line":9917},[118,65549,55400],{"class":128},[118,65551,318],{"class":51293},[118,65553,51300],{"class":128},[118,65555,65556,65558,65560,65563,65565],{"class":120,"line":9925},[118,65557,55227],{"class":128},[118,65559,318],{"class":51293},[118,65561,65562],{"class":128},">小米净水器\u003C\u002F",[118,65564,318],{"class":51293},[118,65566,51300],{"class":128},[118,65568,65569,65571,65573,65575,65577],{"class":120,"line":9930},[118,65570,55227],{"class":128},[118,65572,318],{"class":51293},[118,65574,65478],{"class":128},[118,65576,318],{"class":51293},[118,65578,51300],{"class":128},[118,65580,65581,65583,65585,65588,65590],{"class":120,"line":16609},[118,65582,55227],{"class":128},[118,65584,318],{"class":51293},[118,65586,65587],{"class":128},">￥4999\u003C\u002F",[118,65589,318],{"class":51293},[118,65591,51300],{"class":128},[118,65593,65594,65596,65598],{"class":120,"line":16615},[118,65595,51769],{"class":128},[118,65597,272],{"class":51293},[118,65599,51300],{"class":128},[118,65601,65602,65604,65606],{"class":120,"line":16638},[118,65603,51334],{"class":128},[118,65605,272],{"class":51293},[118,65607,51300],{"class":128},[118,65609,65610,65612,65614],{"class":120,"line":16644},[118,65611,55227],{"class":128},[118,65613,318],{"class":51293},[118,65615,51300],{"class":128},[118,65617,65618,65620,65622,65624,65626,65628,65630,65632,65634,65636,65638,65640],{"class":120,"line":16667},[118,65619,55295],{"class":128},[118,65621,53814],{"class":51293},[118,65623,53817],{"class":1967},[118,65625,174],{"class":128},[118,65627,53822],{"class":233},[118,65629,14925],{"class":1967},[118,65631,174],{"class":128},[118,65633,65440],{"class":233},[118,65635,53479],{"class":1967},[118,65637,174],{"class":128},[118,65639,65447],{"class":233},[118,65641,51300],{"class":128},[118,65643,65644,65646,65648],{"class":120,"line":16681},[118,65645,55400],{"class":128},[118,65647,318],{"class":51293},[118,65649,51300],{"class":128},[118,65651,65652,65654,65656,65659,65661],{"class":120,"line":16701},[118,65653,55227],{"class":128},[118,65655,318],{"class":51293},[118,65657,65658],{"class":128},">小米电视\u003C\u002F",[118,65660,318],{"class":51293},[118,65662,51300],{"class":128},[118,65664,65665,65667,65669,65671,65673],{"class":120,"line":16707},[118,65666,55227],{"class":128},[118,65668,318],{"class":51293},[118,65670,65478],{"class":128},[118,65672,318],{"class":51293},[118,65674,51300],{"class":128},[118,65676,65677,65679,65681,65684,65686],{"class":120,"line":16718},[118,65678,55227],{"class":128},[118,65680,318],{"class":51293},[118,65682,65683],{"class":128},">￥5999\u003C\u002F",[118,65685,318],{"class":51293},[118,65687,51300],{"class":128},[118,65689,65690,65692,65694],{"class":120,"line":16741},[118,65691,51769],{"class":128},[118,65693,272],{"class":51293},[118,65695,51300],{"class":128},[118,65697,65698,65700,65702],{"class":120,"line":16763},[118,65699,52410],{"class":128},[118,65701,266],{"class":51293},[118,65703,51300],{"class":128},[118,65705,65706,65708,65710],{"class":120,"line":16768},[118,65707,52137],{"class":128},[118,65709,51806],{"class":51293},[118,65711,51300],{"class":128},[118,65713,65714],{"class":120,"line":16774},[118,65715,65716],{"class":187},"    \u002F\u002F 1. 获取大复选框\n",[118,65718,65719,65721,65724,65726,65728,65730,65732,65735],{"class":120,"line":16788},[118,65720,11226],{"class":124},[118,65722,65723],{"class":177}," checkAll",[118,65725,13569],{"class":124},[118,65727,54389],{"class":128},[118,65729,54392],{"class":1967},[118,65731,129],{"class":128},[118,65733,65734],{"class":233},"'#checkAll'",[118,65736,135],{"class":128},[118,65738,65739],{"class":120,"line":16801},[118,65740,65741],{"class":187},"    \u002F\u002F 2. 获取所有的小复选框\n",[118,65743,65744,65746,65749,65751,65753,65755,65757,65760],{"class":120,"line":16806},[118,65745,11226],{"class":124},[118,65747,65748],{"class":177}," cks",[118,65750,13569],{"class":124},[118,65752,54389],{"class":128},[118,65754,55674],{"class":1967},[118,65756,129],{"class":128},[118,65758,65759],{"class":233},"'.ck'",[118,65761,135],{"class":128},[118,65763,65764],{"class":120,"line":16820},[118,65765,65766],{"class":187},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[118,65768,65769,65772,65774,65776,65778,65780,65782],{"class":120,"line":16825},[118,65770,65771],{"class":128},"    checkAll.",[118,65773,57806],{"class":1967},[118,65775,129],{"class":128},[118,65777,57811],{"class":233},[118,65779,12440],{"class":128},[118,65781,54442],{"class":124},[118,65783,54445],{"class":128},[118,65785,65786],{"class":120,"line":16831},[118,65787,65788],{"class":187},"      \u002F\u002F 得到当前大复选框的选中状态\n",[118,65790,65791,65794],{"class":120,"line":16836},[118,65792,65793],{"class":187},"      \u002F\u002F console.log(checkAll.checked)",[118,65795,65796],{"class":187},"  \u002F\u002F 得到 是 true 或者是 false\n",[118,65798,65799],{"class":120,"line":16850},[118,65800,65801],{"class":187},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[118,65803,65804,65806,65808,65810,65812,65814,65816,65818,65820,65823,65825,65827,65829],{"class":120,"line":16855},[118,65805,52277],{"class":124},[118,65807,1662],{"class":128},[118,65809,51840],{"class":124},[118,65811,9443],{"class":128},[118,65813,174],{"class":124},[118,65815,4097],{"class":177},[118,65817,9450],{"class":128},[118,65819,1038],{"class":124},[118,65821,65822],{"class":128}," cks.",[118,65824,51961],{"class":177},[118,65826,3218],{"class":128},[118,65828,2296],{"class":124},[118,65830,12447],{"class":128},[118,65832,65833,65836,65838,65841],{"class":120,"line":16860},[118,65834,65835],{"class":128},"        cks[i].checked ",[118,65837,174],{"class":124},[118,65839,65840],{"class":177}," this",[118,65842,65843],{"class":128},".checked\n",[118,65845,65846],{"class":120,"line":16874},[118,65847,52391],{"class":128},[118,65849,65850],{"class":120,"line":16886},[118,65851,33454],{"class":128},[118,65853,65854],{"class":120,"line":16891},[118,65855,65856],{"class":187},"    \u002F\u002F 5. 小复选框控制大复选框\n",[118,65858,65859],{"class":120,"line":16904},[118,65860,2404],{"emptyLinePlaceholder":45},[118,65862,65863,65865,65867,65869,65871,65873,65875,65877,65879,65881,65883,65885,65887],{"class":120,"line":16909},[118,65864,3205],{"class":124},[118,65866,1662],{"class":128},[118,65868,51840],{"class":124},[118,65870,9443],{"class":128},[118,65872,174],{"class":124},[118,65874,4097],{"class":177},[118,65876,9450],{"class":128},[118,65878,1038],{"class":124},[118,65880,65822],{"class":128},[118,65882,51961],{"class":177},[118,65884,3218],{"class":128},[118,65886,2296],{"class":124},[118,65888,12447],{"class":128},[118,65890,65891],{"class":120,"line":16914},[118,65892,65893],{"class":187},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[118,65895,65896,65899,65901,65903,65905,65907,65909],{"class":120,"line":16919},[118,65897,65898],{"class":128},"      cks[i].",[118,65900,57806],{"class":1967},[118,65902,129],{"class":128},[118,65904,57811],{"class":233},[118,65906,12440],{"class":128},[118,65908,54442],{"class":124},[118,65910,54445],{"class":128},[118,65912,65913],{"class":120,"line":16932},[118,65914,65915],{"class":187},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[118,65917,65918],{"class":120,"line":16937},[118,65919,65920],{"class":187},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[118,65922,65923],{"class":120,"line":32626},[118,65924,65925],{"class":187},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[118,65927,65928],{"class":120,"line":32632},[118,65929,65930],{"class":187},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[118,65932,65933,65936,65938,65940,65942,65944,65947,65949,65951,65953,65955],{"class":120,"line":32638},[118,65934,65935],{"class":128},"        checkAll.checked ",[118,65937,174],{"class":124},[118,65939,54389],{"class":128},[118,65941,55674],{"class":1967},[118,65943,129],{"class":128},[118,65945,65946],{"class":233},"'.ck:checked'",[118,65948,30819],{"class":128},[118,65950,51961],{"class":177},[118,65952,57899],{"class":124},[118,65954,65822],{"class":128},[118,65956,55824],{"class":177},[118,65958,65959],{"class":120,"line":32644},[118,65960,64808],{"class":128},[118,65962,65963],{"class":120,"line":32650},[118,65964,2191],{"class":128},[118,65966,65967,65969,65971],{"class":120,"line":32661},[118,65968,52410],{"class":128},[118,65970,51806],{"class":51293},[118,65972,51300],{"class":128},[118,65974,65975,65977,65979],{"class":120,"line":32667},[118,65976,51778],{"class":128},[118,65978,51793],{"class":51293},[118,65980,51300],{"class":128},[118,65982,65983],{"class":120,"line":32687},[118,65984,2404],{"emptyLinePlaceholder":45},[118,65986,65987,65989,65991],{"class":120,"line":32693},[118,65988,51778],{"class":128},[118,65990,50628],{"class":51293},[118,65992,51300],{"class":128},[15,65994,65995],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[15,65997,65998],{},"用好之间比较得到的布尔值！！！",[15,66000,66001,66002,66005,66006,1662,66009,712,66011,66014],{},"在 JS 里访问的时候，",[115,66003,66004],{},"checkbox.checked"," 是一个 ",[278,66007,66008],{},"布尔值",[115,66010,1366],{},[115,66012,66013],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[15,66016,66017,66018,66021,66022],{},"HTML 的 ",[115,66019,66020],{},"checked=\"checked\""," 只是 ",[278,66023,66024,66025,66028],{},"初始值；JS 的 ",[115,66026,66027],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[15,66030,66031],{},"：checked是一个伪类选择器",[15,66033,66034],{},[1466,66035],{"alt":39,"src":66036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[15,66038,66039,66042],{},[66040,66041],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[15,66044,66045],{},[1466,66046],{"alt":39,"src":66047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[60,66049,66051],{"id":66050},"_33-dom事件进阶","3.3 DOM事件进阶",[89,66053,66055],{"id":66054},"_331-事件流","3.3.1 事件流",[15,66057,66058],{},[1466,66059],{"alt":39,"src":66060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22003,66062,66064],{"id":66063},"_3311-事件捕获","3.3.1.1 事件捕获",[15,66066,66067],{},[1466,66068],{"alt":39,"src":66069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[109,66071,66073],{"className":50626,"code":66072,"language":50628,"meta":39,"style":39},"\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",[115,66074,66075,66085,66099,66103,66111,66125,66145,66157,66165,66172,66184,66196,66206,66210,66214,66221,66233,66245,66255,66259,66267,66275,66279,66287,66302,66321,66329,66337,66357,66377,66393,66404,66412,66429,66440,66448,66465,66476,66484,66492,66500,66504],{"__ignoreMap":39},[118,66076,66077,66079,66081,66083],{"class":120,"line":121},[118,66078,51290],{"class":128},[118,66080,51294],{"class":51293},[118,66082,51297],{"class":1967},[118,66084,51300],{"class":128},[118,66086,66087,66089,66091,66093,66095,66097],{"class":120,"line":40},[118,66088,1038],{"class":128},[118,66090,50628],{"class":51293},[118,66092,51309],{"class":1967},[118,66094,174],{"class":128},[118,66096,51314],{"class":233},[118,66098,51300],{"class":128},[118,66100,66101],{"class":120,"line":1183},[118,66102,2404],{"emptyLinePlaceholder":45},[118,66104,66105,66107,66109],{"class":120,"line":1198},[118,66106,1038],{"class":128},[118,66108,51327],{"class":51293},[118,66110,51300],{"class":128},[118,66112,66113,66115,66117,66119,66121,66123],{"class":120,"line":1204},[118,66114,52137],{"class":128},[118,66116,51337],{"class":51293},[118,66118,51340],{"class":1967},[118,66120,174],{"class":128},[118,66122,51345],{"class":233},[118,66124,51300],{"class":128},[118,66126,66127,66129,66131,66133,66135,66137,66139,66141,66143],{"class":120,"line":1218},[118,66128,52137],{"class":128},[118,66130,51337],{"class":51293},[118,66132,14925],{"class":1967},[118,66134,174],{"class":128},[118,66136,51384],{"class":233},[118,66138,51364],{"class":1967},[118,66140,174],{"class":128},[118,66142,51391],{"class":233},[118,66144,51300],{"class":128},[118,66146,66147,66149,66151,66153,66155],{"class":120,"line":1224},[118,66148,52137],{"class":128},[118,66150,51400],{"class":51293},[118,66152,51403],{"class":128},[118,66154,51400],{"class":51293},[118,66156,51300],{"class":128},[118,66158,66159,66161,66163],{"class":120,"line":1315},[118,66160,52137],{"class":128},[118,66162,5131],{"class":51293},[118,66164,51300],{"class":128},[118,66166,66167,66170],{"class":120,"line":1321},[118,66168,66169],{"class":1967},"    .father",[118,66171,15577],{"class":128},[118,66173,66174,66176,66178,66180,66182],{"class":120,"line":1333},[118,66175,54764],{"class":177},[118,66177,51430],{"class":128},[118,66179,65067],{"class":177},[118,66181,51485],{"class":124},[118,66183,1294],{"class":128},[118,66185,66186,66188,66190,66192,66194],{"class":120,"line":1616},[118,66187,54778],{"class":177},[118,66189,51430],{"class":128},[118,66191,65067],{"class":177},[118,66193,51485],{"class":124},[118,66195,1294],{"class":128},[118,66197,66198,66200,66202,66204],{"class":120,"line":1621},[118,66199,54877],{"class":177},[118,66201,51430],{"class":128},[118,66203,51638],{"class":177},[118,66205,1294],{"class":128},[118,66207,66208],{"class":120,"line":1627},[118,66209,2191],{"class":128},[118,66211,66212],{"class":120,"line":1632},[118,66213,2404],{"emptyLinePlaceholder":45},[118,66215,66216,66219],{"class":120,"line":1646},[118,66217,66218],{"class":1967},"    .son",[118,66220,15577],{"class":128},[118,66222,66223,66225,66227,66229,66231],{"class":120,"line":1651},[118,66224,54764],{"class":177},[118,66226,51430],{"class":128},[118,66228,1726],{"class":177},[118,66230,51485],{"class":124},[118,66232,1294],{"class":128},[118,66234,66235,66237,66239,66241,66243],{"class":120,"line":1657},[118,66236,54778],{"class":177},[118,66238,51430],{"class":128},[118,66240,1726],{"class":177},[118,66242,51485],{"class":124},[118,66244,1294],{"class":128},[118,66246,66247,66249,66251,66253],{"class":120,"line":1678},[118,66248,54877],{"class":177},[118,66250,51430],{"class":128},[118,66252,54882],{"class":177},[118,66254,1294],{"class":128},[118,66256,66257],{"class":120,"line":1683},[118,66258,2191],{"class":128},[118,66260,66261,66263,66265],{"class":120,"line":1697},[118,66262,52410],{"class":128},[118,66264,5131],{"class":51293},[118,66266,51300],{"class":128},[118,66268,66269,66271,66273],{"class":120,"line":1702},[118,66270,51778],{"class":128},[118,66272,51327],{"class":51293},[118,66274,51300],{"class":128},[118,66276,66277],{"class":120,"line":1731},[118,66278,2404],{"emptyLinePlaceholder":45},[118,66280,66281,66283,66285],{"class":120,"line":1736},[118,66282,1038],{"class":128},[118,66284,51793],{"class":51293},[118,66286,51300],{"class":128},[118,66288,66289,66291,66293,66295,66297,66300],{"class":120,"line":1753},[118,66290,52137],{"class":128},[118,66292,51604],{"class":51293},[118,66294,53479],{"class":1967},[118,66296,174],{"class":128},[118,66298,66299],{"class":233},"\"father\"",[118,66301,51300],{"class":128},[118,66303,66304,66306,66308,66310,66312,66315,66317,66319],{"class":120,"line":1758},[118,66305,51334],{"class":128},[118,66307,51604],{"class":51293},[118,66309,53479],{"class":1967},[118,66311,174],{"class":128},[118,66313,66314],{"class":233},"\"son\"",[118,66316,55307],{"class":128},[118,66318,51604],{"class":51293},[118,66320,51300],{"class":128},[118,66322,66323,66325,66327],{"class":120,"line":1763},[118,66324,52410],{"class":128},[118,66326,51604],{"class":51293},[118,66328,51300],{"class":128},[118,66330,66331,66333,66335],{"class":120,"line":1768},[118,66332,52137],{"class":128},[118,66334,51806],{"class":51293},[118,66336,51300],{"class":128},[118,66338,66339,66341,66344,66346,66348,66350,66352,66355],{"class":120,"line":1782},[118,66340,11226],{"class":124},[118,66342,66343],{"class":177}," fa",[118,66345,13569],{"class":124},[118,66347,54389],{"class":128},[118,66349,54392],{"class":1967},[118,66351,129],{"class":128},[118,66353,66354],{"class":233},"'.father'",[118,66356,135],{"class":128},[118,66358,66359,66361,66364,66366,66368,66370,66372,66375],{"class":120,"line":1787},[118,66360,11226],{"class":124},[118,66362,66363],{"class":177}," son",[118,66365,13569],{"class":124},[118,66367,54389],{"class":128},[118,66369,54392],{"class":1967},[118,66371,129],{"class":128},[118,66373,66374],{"class":233},"'.son'",[118,66376,135],{"class":128},[118,66378,66379,66381,66383,66385,66387,66389,66391],{"class":120,"line":2581},[118,66380,52400],{"class":128},[118,66382,57806],{"class":1967},[118,66384,129],{"class":128},[118,66386,57811],{"class":233},[118,66388,12440],{"class":128},[118,66390,54442],{"class":124},[118,66392,54445],{"class":128},[118,66394,66395,66397,66399,66402],{"class":120,"line":2595},[118,66396,58918],{"class":1967},[118,66398,129],{"class":128},[118,66400,66401],{"class":233},"'woshiu1'",[118,66403,135],{"class":128},[118,66405,66406,66408,66410],{"class":120,"line":2603},[118,66407,54528],{"class":128},[118,66409,1366],{"class":177},[118,66411,135],{"class":128},[118,66413,66414,66417,66419,66421,66423,66425,66427],{"class":120,"line":2608},[118,66415,66416],{"class":128},"    fa.",[118,66418,57806],{"class":1967},[118,66420,129],{"class":128},[118,66422,57811],{"class":233},[118,66424,12440],{"class":128},[118,66426,54442],{"class":124},[118,66428,54445],{"class":128},[118,66430,66431,66433,66435,66438],{"class":120,"line":2614},[118,66432,58918],{"class":1967},[118,66434,129],{"class":128},[118,66436,66437],{"class":233},"'1'",[118,66439,135],{"class":128},[118,66441,66442,66444,66446],{"class":120,"line":2620},[118,66443,54528],{"class":128},[118,66445,1366],{"class":177},[118,66447,135],{"class":128},[118,66449,66450,66453,66455,66457,66459,66461,66463],{"class":120,"line":2625},[118,66451,66452],{"class":128},"    son.",[118,66454,57806],{"class":1967},[118,66456,129],{"class":128},[118,66458,57811],{"class":233},[118,66460,12440],{"class":128},[118,66462,54442],{"class":124},[118,66464,54445],{"class":128},[118,66466,66467,66469,66471,66474],{"class":120,"line":7953},[118,66468,58918],{"class":1967},[118,66470,129],{"class":128},[118,66472,66473],{"class":233},"'2'",[118,66475,135],{"class":128},[118,66477,66478,66480,66482],{"class":120,"line":7977},[118,66479,54528],{"class":128},[118,66481,1366],{"class":177},[118,66483,135],{"class":128},[118,66485,66486,66488,66490],{"class":120,"line":7982},[118,66487,52410],{"class":128},[118,66489,51806],{"class":51293},[118,66491,51300],{"class":128},[118,66493,66494,66496,66498],{"class":120,"line":7988},[118,66495,51778],{"class":128},[118,66497,51793],{"class":51293},[118,66499,51300],{"class":128},[118,66501,66502],{"class":120,"line":8015},[118,66503,2404],{"emptyLinePlaceholder":45},[118,66505,66506,66508,66510],{"class":120,"line":8020},[118,66507,51778],{"class":128},[118,66509,50628],{"class":51293},[118,66511,51300],{"class":128},[15,66513,66514],{},[1466,66515],{"alt":39,"src":66516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[15,66518,66519],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22003,66521,66523],{"id":66522},"_3312-事件冒泡","3.3.1.2 事件冒泡",[15,66525,66526],{},[1466,66527],{"alt":39,"src":66528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[15,66530,66531],{},"反着来",[15,66533,66534],{},"注意是同名事件，比如都是‘click’",[22003,66536,66538],{"id":66537},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[15,66540,66541],{},[1466,66542],{"alt":39,"src":66543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22003,66545,66547],{"id":66546},"_3314-解绑事件","3.3.1.4 解绑事件",[15,66549,66550],{},[1466,66551],{"alt":39,"src":66552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[15,66554,66555],{},[1466,66556],{"alt":39,"src":66557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22003,66559,66561],{"id":66560},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[72,66563,66564],{},[75,66565,66566],{},"事件类型的区别",[15,66568,66569],{},[1466,66570],{"alt":39,"src":66571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[15,66573,66574],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[72,66576,66577],{"start":40},[75,66578,66579],{},"注册事件的区别",[15,66581,66582],{},[1466,66583],{"alt":39,"src":66584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22003,66586,66588],{"id":66587},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[15,66590,66591],{},[1466,66592],{"alt":39,"src":66593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[15,66595,66596],{},[1466,66597],{"alt":39,"src":66598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[109,66600,66602],{"className":53060,"code":66601,"language":53062,"meta":39,"style":39},"\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",[115,66603,66604,66612,66629,66652,66660,66665,66670,66675,66679,66687,66695],{"__ignoreMap":39},[118,66605,66606,66608,66610],{"class":120,"line":121},[118,66607,1038],{"class":128},[118,66609,51793],{"class":51293},[118,66611,51300],{"class":128},[118,66613,66614,66616,66619,66622,66624,66627],{"class":120,"line":40},[118,66615,52137],{"class":128},[118,66617,66618],{"class":51293},"form",[118,66620,66621],{"class":1967}," action",[118,66623,174],{"class":128},[118,66625,66626],{"class":233},"\"http:\u002F\u002Fwww.itcast.cn\"",[118,66628,51300],{"class":128},[118,66630,66631,66633,66635,66637,66639,66642,66645,66647,66650],{"class":120,"line":1183},[118,66632,51334],{"class":128},[118,66634,53814],{"class":51293},[118,66636,53817],{"class":1967},[118,66638,174],{"class":128},[118,66640,66641],{"class":233},"\"submit\"",[118,66643,66644],{"class":1967}," value",[118,66646,174],{"class":128},[118,66648,66649],{"class":233},"\"免费注册\"",[118,66651,51300],{"class":128},[118,66653,66654,66656,66658],{"class":120,"line":1198},[118,66655,51334],{"class":128},[118,66657,51806],{"class":51293},[118,66659,51300],{"class":128},[118,66661,66662],{"class":120,"line":1204},[118,66663,66664],{"class":128},"      const form = document.querySelector('form')\n",[118,66666,66667],{"class":120,"line":1218},[118,66668,66669],{"class":128},"      form.addEventListener('submit', function (e) {\n",[118,66671,66672],{"class":120,"line":1224},[118,66673,66674],{"class":128},"        e.preventDefault()\n",[118,66676,66677],{"class":120,"line":1315},[118,66678,64808],{"class":128},[118,66680,66681,66683,66685],{"class":120,"line":1321},[118,66682,51769],{"class":128},[118,66684,51806],{"class":51293},[118,66686,51300],{"class":128},[118,66688,66689,66691,66693],{"class":120,"line":1333},[118,66690,52410],{"class":128},[118,66692,66618],{"class":51293},[118,66694,51300],{"class":128},[118,66696,66697,66699,66701],{"class":120,"line":1616},[118,66698,51778],{"class":128},[118,66700,51793],{"class":51293},[118,66702,51300],{"class":128},[15,66704,66705],{},"点击不在跳转！！！",[89,66707,66709],{"id":66708},"_332-事件委托","3.3.2 事件委托",[15,66711,66712],{},[1466,66713],{"alt":39,"src":66714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[109,66716,66718],{"className":50626,"code":66717,"language":50628,"meta":39,"style":39},"\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",[115,66719,66720,66730,66744,66748,66756,66770,66790,66802,66810,66814,66822,66830,66842,66854,66866,66878,66890,66903,66911,66919,66924,66943,66964,66969,66974,66979,66984,66993,66997,67007,67011,67016,67021,67035,67045,67049,67053,67061,67069,67073],{"__ignoreMap":39},[118,66721,66722,66724,66726,66728],{"class":120,"line":121},[118,66723,51290],{"class":128},[118,66725,51294],{"class":51293},[118,66727,51297],{"class":1967},[118,66729,51300],{"class":128},[118,66731,66732,66734,66736,66738,66740,66742],{"class":120,"line":40},[118,66733,1038],{"class":128},[118,66735,50628],{"class":51293},[118,66737,51309],{"class":1967},[118,66739,174],{"class":128},[118,66741,51314],{"class":233},[118,66743,51300],{"class":128},[118,66745,66746],{"class":120,"line":1183},[118,66747,2404],{"emptyLinePlaceholder":45},[118,66749,66750,66752,66754],{"class":120,"line":1198},[118,66751,1038],{"class":128},[118,66753,51327],{"class":51293},[118,66755,51300],{"class":128},[118,66757,66758,66760,66762,66764,66766,66768],{"class":120,"line":1204},[118,66759,52137],{"class":128},[118,66761,51337],{"class":51293},[118,66763,51340],{"class":1967},[118,66765,174],{"class":128},[118,66767,51345],{"class":233},[118,66769,51300],{"class":128},[118,66771,66772,66774,66776,66778,66780,66782,66784,66786,66788],{"class":120,"line":1218},[118,66773,52137],{"class":128},[118,66775,51337],{"class":51293},[118,66777,14925],{"class":1967},[118,66779,174],{"class":128},[118,66781,51384],{"class":233},[118,66783,51364],{"class":1967},[118,66785,174],{"class":128},[118,66787,51391],{"class":233},[118,66789,51300],{"class":128},[118,66791,66792,66794,66796,66798,66800],{"class":120,"line":1224},[118,66793,52137],{"class":128},[118,66795,51400],{"class":51293},[118,66797,51403],{"class":128},[118,66799,51400],{"class":51293},[118,66801,51300],{"class":128},[118,66803,66804,66806,66808],{"class":120,"line":1315},[118,66805,51778],{"class":128},[118,66807,51327],{"class":51293},[118,66809,51300],{"class":128},[118,66811,66812],{"class":120,"line":1321},[118,66813,2404],{"emptyLinePlaceholder":45},[118,66815,66816,66818,66820],{"class":120,"line":1333},[118,66817,1038],{"class":128},[118,66819,51793],{"class":51293},[118,66821,51300],{"class":128},[118,66823,66824,66826,66828],{"class":120,"line":1616},[118,66825,52137],{"class":128},[118,66827,1135],{"class":51293},[118,66829,51300],{"class":128},[118,66831,66832,66834,66836,66838,66840],{"class":120,"line":1621},[118,66833,51334],{"class":128},[118,66835,75],{"class":51293},[118,66837,53959],{"class":128},[118,66839,75],{"class":51293},[118,66841,51300],{"class":128},[118,66843,66844,66846,66848,66850,66852],{"class":120,"line":1627},[118,66845,51334],{"class":128},[118,66847,75],{"class":51293},[118,66849,53978],{"class":128},[118,66851,75],{"class":51293},[118,66853,51300],{"class":128},[118,66855,66856,66858,66860,66862,66864],{"class":120,"line":1632},[118,66857,51334],{"class":128},[118,66859,75],{"class":51293},[118,66861,53997],{"class":128},[118,66863,75],{"class":51293},[118,66865,51300],{"class":128},[118,66867,66868,66870,66872,66874,66876],{"class":120,"line":1646},[118,66869,51334],{"class":128},[118,66871,75],{"class":51293},[118,66873,54016],{"class":128},[118,66875,75],{"class":51293},[118,66877,51300],{"class":128},[118,66879,66880,66882,66884,66886,66888],{"class":120,"line":1651},[118,66881,51334],{"class":128},[118,66883,75],{"class":51293},[118,66885,54035],{"class":128},[118,66887,75],{"class":51293},[118,66889,51300],{"class":128},[118,66891,66892,66894,66896,66899,66901],{"class":120,"line":1657},[118,66893,51334],{"class":128},[118,66895,15],{"class":51293},[118,66897,66898],{"class":128},">我不需要变色\u003C\u002F",[118,66900,15],{"class":51293},[118,66902,51300],{"class":128},[118,66904,66905,66907,66909],{"class":120,"line":1678},[118,66906,52410],{"class":128},[118,66908,1135],{"class":51293},[118,66910,51300],{"class":128},[118,66912,66913,66915,66917],{"class":120,"line":1683},[118,66914,52137],{"class":128},[118,66916,51806],{"class":51293},[118,66918,51300],{"class":128},[118,66920,66921],{"class":120,"line":1697},[118,66922,66923],{"class":187},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[118,66925,66926,66928,66930,66932,66934,66936,66938,66941],{"class":120,"line":1702},[118,66927,11226],{"class":124},[118,66929,61285],{"class":177},[118,66931,13569],{"class":124},[118,66933,54389],{"class":128},[118,66935,54392],{"class":1967},[118,66937,129],{"class":128},[118,66939,66940],{"class":233},"'ul'",[118,66942,135],{"class":128},[118,66944,66945,66948,66950,66952,66954,66956,66958,66960,66962],{"class":120,"line":1731},[118,66946,66947],{"class":128},"    ul.",[118,66949,57806],{"class":1967},[118,66951,129],{"class":128},[118,66953,57811],{"class":233},[118,66955,12440],{"class":128},[118,66957,54442],{"class":124},[118,66959,1662],{"class":128},[118,66961,203],{"class":5221},[118,66963,12447],{"class":128},[118,66965,66966],{"class":120,"line":1736},[118,66967,66968],{"class":187},"      \u002F\u002F alert(1)\n",[118,66970,66971],{"class":120,"line":1753},[118,66972,66973],{"class":187},"      \u002F\u002F e.target就是我们点击的对象\n",[118,66975,66976],{"class":120,"line":1758},[118,66977,66978],{"class":187},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[118,66980,66981],{"class":120,"line":1763},[118,66982,66983],{"class":187},"      \u002F\u002F e.target.style.color = 'red'\n",[118,66985,66986,66988,66990],{"class":120,"line":1768},[118,66987,58237],{"class":128},[118,66989,58240],{"class":1967},[118,66991,66992],{"class":128},"(e)\n",[118,66994,66995],{"class":120,"line":1782},[118,66996,2404],{"emptyLinePlaceholder":45},[118,66998,66999,67001,67004],{"class":120,"line":1787},[118,67000,58237],{"class":128},[118,67002,67003],{"class":1967},"dir",[118,67005,67006],{"class":128},"(e.target)\n",[118,67008,67009],{"class":120,"line":2581},[118,67010,2404],{"emptyLinePlaceholder":45},[118,67012,67013],{"class":120,"line":2595},[118,67014,67015],{"class":187},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[118,67017,67018],{"class":120,"line":2603},[118,67019,67020],{"class":187},"      \u002F\u002F 通过tagName来进行判断\n",[118,67022,67023,67025,67028,67030,67033],{"class":120,"line":2608},[118,67024,54473],{"class":124},[118,67026,67027],{"class":128}," (e.target.tagName ",[118,67029,54479],{"class":124},[118,67031,67032],{"class":233}," 'LI'",[118,67034,12447],{"class":128},[118,67036,67037,67040,67042],{"class":120,"line":2614},[118,67038,67039],{"class":128},"        e.target.style.color ",[118,67041,174],{"class":124},[118,67043,67044],{"class":233}," 'red'\n",[118,67046,67047],{"class":120,"line":2620},[118,67048,52391],{"class":128},[118,67050,67051],{"class":120,"line":2625},[118,67052,33454],{"class":128},[118,67054,67055,67057,67059],{"class":120,"line":7953},[118,67056,52410],{"class":128},[118,67058,51806],{"class":51293},[118,67060,51300],{"class":128},[118,67062,67063,67065,67067],{"class":120,"line":7977},[118,67064,51778],{"class":128},[118,67066,51793],{"class":51293},[118,67068,51300],{"class":128},[118,67070,67071],{"class":120,"line":7982},[118,67072,2404],{"emptyLinePlaceholder":45},[118,67074,67075,67077,67079],{"class":120,"line":7988},[118,67076,51778],{"class":128},[118,67078,50628],{"class":51293},[118,67080,51300],{"class":128},[15,67082,67083],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[15,67085,67086],{},"if(e.target.ragName==='P') {}",[15,67088,67089],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[15,67091,67092],{},"通过事件委托的方式实现tab栏切换改造：",[15,67094,67095],{},"一定要记住自定义属性！！！！！！",[15,67097,67098],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[15,67100,67101],{},"id是自定义的属性名",[15,67103,67104],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[109,67106,67108],{"className":50626,"code":67107,"language":50628,"meta":39,"style":39},"\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",[115,67109,67110,67120,67134,67138,67146,67160,67180,67200,67212,67220,67226,67236,67246,67250,67254,67260,67272,67284,67296,67312,67316,67320,67326,67338,67350,67362,67372,67382,67386,67390,67398,67410,67420,67432,67436,67440,67448,67458,67468,67478,67482,67486,67496,67510,67522,67526,67530,67542,67552,67568,67578,67582,67586,67600,67610,67620,67624,67628,67634,67648,67652,67656,67664,67674,67678,67682,67691,67701,67705,67713,67721,67725,67733,67747,67761,67773,67781,67820,67852,67884,67916,67948,67956,67964,67978,68012,68046,68080,68114,68148,68156,68164,68172,68177,68182,68201,68206,68226,68234,68239,68252,68273,68286,68290,68295,68300,68313,68333,68361,68365,68369,68373,68381,68389,68393],{"__ignoreMap":39},[118,67111,67112,67114,67116,67118],{"class":120,"line":121},[118,67113,51290],{"class":128},[118,67115,51294],{"class":51293},[118,67117,51297],{"class":1967},[118,67119,51300],{"class":128},[118,67121,67122,67124,67126,67128,67130,67132],{"class":120,"line":40},[118,67123,1038],{"class":128},[118,67125,50628],{"class":51293},[118,67127,51309],{"class":1967},[118,67129,174],{"class":128},[118,67131,51314],{"class":233},[118,67133,51300],{"class":128},[118,67135,67136],{"class":120,"line":1183},[118,67137,2404],{"emptyLinePlaceholder":45},[118,67139,67140,67142,67144],{"class":120,"line":1198},[118,67141,1038],{"class":128},[118,67143,51327],{"class":51293},[118,67145,51300],{"class":128},[118,67147,67148,67150,67152,67154,67156,67158],{"class":120,"line":1204},[118,67149,52137],{"class":128},[118,67151,51337],{"class":51293},[118,67153,51340],{"class":1967},[118,67155,174],{"class":128},[118,67157,51345],{"class":233},[118,67159,59120],{"class":128},[118,67161,67162,67164,67166,67168,67170,67172,67174,67176,67178],{"class":120,"line":1218},[118,67163,52137],{"class":128},[118,67165,51337],{"class":51293},[118,67167,51356],{"class":1967},[118,67169,174],{"class":128},[118,67171,51361],{"class":233},[118,67173,51364],{"class":1967},[118,67175,174],{"class":128},[118,67177,51369],{"class":233},[118,67179,59120],{"class":128},[118,67181,67182,67184,67186,67188,67190,67192,67194,67196,67198],{"class":120,"line":1224},[118,67183,52137],{"class":128},[118,67185,51337],{"class":51293},[118,67187,14925],{"class":1967},[118,67189,174],{"class":128},[118,67191,51384],{"class":233},[118,67193,51364],{"class":1967},[118,67195,174],{"class":128},[118,67197,51391],{"class":233},[118,67199,59120],{"class":128},[118,67201,67202,67204,67206,67208,67210],{"class":120,"line":1315},[118,67203,52137],{"class":128},[118,67205,51400],{"class":51293},[118,67207,63618],{"class":128},[118,67209,51400],{"class":51293},[118,67211,51300],{"class":128},[118,67213,67214,67216,67218],{"class":120,"line":1321},[118,67215,52137],{"class":128},[118,67217,5131],{"class":51293},[118,67219,51300],{"class":128},[118,67221,67222,67224],{"class":120,"line":1333},[118,67223,6408],{"class":51293},[118,67225,15577],{"class":128},[118,67227,67228,67230,67232,67234],{"class":120,"line":1616},[118,67229,54699],{"class":177},[118,67231,51430],{"class":128},[118,67233,320],{"class":177},[118,67235,1294],{"class":128},[118,67237,67238,67240,67242,67244],{"class":120,"line":1621},[118,67239,54688],{"class":177},[118,67241,51430],{"class":128},[118,67243,320],{"class":177},[118,67245,1294],{"class":128},[118,67247,67248],{"class":120,"line":1627},[118,67249,2191],{"class":128},[118,67251,67252],{"class":120,"line":1632},[118,67253,2404],{"emptyLinePlaceholder":45},[118,67255,67256,67258],{"class":120,"line":1646},[118,67257,63669],{"class":1967},[118,67259,15577],{"class":128},[118,67261,67262,67264,67266,67268,67270],{"class":120,"line":1651},[118,67263,54764],{"class":177},[118,67265,51430],{"class":128},[118,67267,63680],{"class":177},[118,67269,51485],{"class":124},[118,67271,1294],{"class":128},[118,67273,67274,67276,67278,67280,67282],{"class":120,"line":1657},[118,67275,54778],{"class":177},[118,67277,51430],{"class":128},[118,67279,63693],{"class":177},[118,67281,51485],{"class":124},[118,67283,1294],{"class":128},[118,67285,67286,67288,67290,67292,67294],{"class":120,"line":1678},[118,67287,54699],{"class":177},[118,67289,51430],{"class":128},[118,67291,828],{"class":177},[118,67293,51485],{"class":124},[118,67295,1294],{"class":128},[118,67297,67298,67300,67302,67304,67306,67308,67310],{"class":120,"line":1683},[118,67299,61970],{"class":177},[118,67301,51430],{"class":128},[118,67303,346],{"class":177},[118,67305,51485],{"class":124},[118,67307,51514],{"class":177},[118,67309,62237],{"class":177},[118,67311,1294],{"class":128},[118,67313,67314],{"class":120,"line":1697},[118,67315,2191],{"class":128},[118,67317,67318],{"class":120,"line":1702},[118,67319,2404],{"emptyLinePlaceholder":45},[118,67321,67322,67324],{"class":120,"line":1731},[118,67323,63738],{"class":1967},[118,67325,15577],{"class":128},[118,67327,67328,67330,67332,67334,67336],{"class":120,"line":1736},[118,67329,54764],{"class":177},[118,67331,51430],{"class":128},[118,67333,439],{"class":177},[118,67335,456],{"class":124},[118,67337,1294],{"class":128},[118,67339,67340,67342,67344,67346,67348],{"class":120,"line":1753},[118,67341,54778],{"class":177},[118,67343,51430],{"class":128},[118,67345,1035],{"class":177},[118,67347,51485],{"class":124},[118,67349,1294],{"class":128},[118,67351,67352,67354,67356,67358,67360],{"class":120,"line":1758},[118,67353,57352],{"class":177},[118,67355,51430],{"class":128},[118,67357,1035],{"class":177},[118,67359,51485],{"class":124},[118,67361,1294],{"class":128},[118,67363,67364,67366,67368,67370],{"class":120,"line":1763},[118,67365,55002],{"class":177},[118,67367,51430],{"class":128},[118,67369,51470],{"class":177},[118,67371,1294],{"class":128},[118,67373,67374,67376,67378,67380],{"class":120,"line":1768},[118,67375,55013],{"class":177},[118,67377,51430],{"class":128},[118,67379,51661],{"class":177},[118,67381,1294],{"class":128},[118,67383,67384],{"class":120,"line":1782},[118,67385,2191],{"class":128},[118,67387,67388],{"class":120,"line":1787},[118,67389,2404],{"emptyLinePlaceholder":45},[118,67391,67392,67394,67396],{"class":120,"line":2581},[118,67393,63738],{"class":1967},[118,67395,63811],{"class":51293},[118,67397,15577],{"class":128},[118,67399,67400,67402,67404,67406,67408],{"class":120,"line":2595},[118,67401,54915],{"class":177},[118,67403,51430],{"class":128},[118,67405,928],{"class":177},[118,67407,51485],{"class":124},[118,67409,1294],{"class":128},[118,67411,67412,67414,67416,67418],{"class":120,"line":2603},[118,67413,62327],{"class":177},[118,67415,51430],{"class":128},[118,67417,63834],{"class":177},[118,67419,1294],{"class":128},[118,67421,67422,67424,67426,67428,67430],{"class":120,"line":2608},[118,67423,61993],{"class":177},[118,67425,51430],{"class":128},[118,67427,828],{"class":177},[118,67429,51485],{"class":124},[118,67431,1294],{"class":128},[118,67433,67434],{"class":120,"line":2614},[118,67435,2191],{"class":128},[118,67437,67438],{"class":120,"line":2620},[118,67439,2404],{"emptyLinePlaceholder":45},[118,67441,67442,67444,67446],{"class":120,"line":2625},[118,67443,63738],{"class":1967},[118,67445,61285],{"class":51293},[118,67447,15577],{"class":128},[118,67449,67450,67452,67454,67456],{"class":120,"line":7953},[118,67451,54725],{"class":177},[118,67453,51430],{"class":128},[118,67455,54730],{"class":177},[118,67457,1294],{"class":128},[118,67459,67460,67462,67464,67466],{"class":120,"line":7977},[118,67461,55002],{"class":177},[118,67463,51430],{"class":128},[118,67465,51470],{"class":177},[118,67467,1294],{"class":128},[118,67469,67470,67472,67474,67476],{"class":120,"line":7982},[118,67471,55013],{"class":177},[118,67473,51430],{"class":128},[118,67475,51573],{"class":177},[118,67477,1294],{"class":128},[118,67479,67480],{"class":120,"line":7988},[118,67481,2191],{"class":128},[118,67483,67484],{"class":120,"line":8015},[118,67485,2404],{"emptyLinePlaceholder":45},[118,67487,67488,67490,67492,67494],{"class":120,"line":8020},[118,67489,63738],{"class":1967},[118,67491,61285],{"class":51293},[118,67493,55068],{"class":51293},[118,67495,15577],{"class":128},[118,67497,67498,67500,67502,67504,67506,67508],{"class":120,"line":8026},[118,67499,54699],{"class":177},[118,67501,51430],{"class":128},[118,67503,320],{"class":177},[118,67505,8955],{"class":177},[118,67507,51485],{"class":124},[118,67509,1294],{"class":128},[118,67511,67512,67514,67516,67518,67520],{"class":120,"line":8038},[118,67513,54915],{"class":177},[118,67515,51430],{"class":128},[118,67517,677],{"class":177},[118,67519,51485],{"class":124},[118,67521,1294],{"class":128},[118,67523,67524],{"class":120,"line":8050},[118,67525,2191],{"class":128},[118,67527,67528],{"class":120,"line":8062},[118,67529,2404],{"emptyLinePlaceholder":45},[118,67531,67532,67534,67536,67538,67540],{"class":120,"line":9721},[118,67533,63738],{"class":1967},[118,67535,61285],{"class":51293},[118,67537,55068],{"class":51293},[118,67539,1402],{"class":51293},[118,67541,15577],{"class":128},[118,67543,67544,67546,67548,67550],{"class":120,"line":9746},[118,67545,63963],{"class":177},[118,67547,51430],{"class":128},[118,67549,54730],{"class":177},[118,67551,1294],{"class":128},[118,67553,67554,67556,67558,67560,67562,67564,67566],{"class":120,"line":9769},[118,67555,62225],{"class":177},[118,67557,51430],{"class":128},[118,67559,206],{"class":177},[118,67561,51485],{"class":124},[118,67563,51514],{"class":177},[118,67565,63984],{"class":177},[118,67567,1294],{"class":128},[118,67569,67570,67572,67574,67576],{"class":120,"line":9793},[118,67571,57409],{"class":177},[118,67573,51430],{"class":128},[118,67575,62362],{"class":177},[118,67577,1294],{"class":128},[118,67579,67580],{"class":120,"line":9798},[118,67581,2191],{"class":128},[118,67583,67584],{"class":120,"line":9803},[118,67585,2404],{"emptyLinePlaceholder":45},[118,67587,67588,67590,67592,67594,67596,67598],{"class":120,"line":9808},[118,67589,63738],{"class":1967},[118,67591,61285],{"class":51293},[118,67593,55068],{"class":51293},[118,67595,1402],{"class":51293},[118,67597,64017],{"class":1967},[118,67599,15577],{"class":128},[118,67601,67602,67604,67606,67608],{"class":120,"line":9817},[118,67603,61784],{"class":177},[118,67605,51430],{"class":128},[118,67607,64028],{"class":177},[118,67609,1294],{"class":128},[118,67611,67612,67614,67616,67618],{"class":120,"line":9822},[118,67613,57409],{"class":177},[118,67615,51430],{"class":128},[118,67617,64028],{"class":177},[118,67619,1294],{"class":128},[118,67621,67622],{"class":120,"line":9828},[118,67623,2191],{"class":128},[118,67625,67626],{"class":120,"line":9849},[118,67627,2404],{"emptyLinePlaceholder":45},[118,67629,67630,67632],{"class":120,"line":9855},[118,67631,64053],{"class":1967},[118,67633,15577],{"class":128},[118,67635,67636,67638,67640,67642,67644,67646],{"class":120,"line":9869},[118,67637,54688],{"class":177},[118,67639,51430],{"class":128},[118,67641,320],{"class":177},[118,67643,64066],{"class":177},[118,67645,51485],{"class":124},[118,67647,1294],{"class":128},[118,67649,67650],{"class":120,"line":9875},[118,67651,2191],{"class":128},[118,67653,67654],{"class":120,"line":9902},[118,67655,2404],{"emptyLinePlaceholder":45},[118,67657,67658,67660,67662],{"class":120,"line":9911},[118,67659,64053],{"class":1967},[118,67661,62167],{"class":1967},[118,67663,15577],{"class":128},[118,67665,67666,67668,67670,67672],{"class":120,"line":9917},[118,67667,55002],{"class":177},[118,67669,51430],{"class":128},[118,67671,54730],{"class":177},[118,67673,1294],{"class":128},[118,67675,67676],{"class":120,"line":9925},[118,67677,2191],{"class":128},[118,67679,67680],{"class":120,"line":9930},[118,67681,2404],{"emptyLinePlaceholder":45},[118,67683,67684,67686,67689],{"class":120,"line":16609},[118,67685,64053],{"class":1967},[118,67687,67688],{"class":1967}," .active",[118,67690,15577],{"class":128},[118,67692,67693,67695,67697,67699],{"class":120,"line":16615},[118,67694,55002],{"class":177},[118,67696,51430],{"class":128},[118,67698,60862],{"class":177},[118,67700,1294],{"class":128},[118,67702,67703],{"class":120,"line":16638},[118,67704,2191],{"class":128},[118,67706,67707,67709,67711],{"class":120,"line":16644},[118,67708,52410],{"class":128},[118,67710,5131],{"class":51293},[118,67712,51300],{"class":128},[118,67714,67715,67717,67719],{"class":120,"line":16667},[118,67716,51778],{"class":128},[118,67718,51327],{"class":51293},[118,67720,51300],{"class":128},[118,67722,67723],{"class":120,"line":16681},[118,67724,2404],{"emptyLinePlaceholder":45},[118,67726,67727,67729,67731],{"class":120,"line":16701},[118,67728,1038],{"class":128},[118,67730,51793],{"class":51293},[118,67732,51300],{"class":128},[118,67734,67735,67737,67739,67741,67743,67745],{"class":120,"line":16707},[118,67736,52137],{"class":128},[118,67738,51604],{"class":51293},[118,67740,53479],{"class":1967},[118,67742,174],{"class":128},[118,67744,64168],{"class":233},[118,67746,51300],{"class":128},[118,67748,67749,67751,67753,67755,67757,67759],{"class":120,"line":16718},[118,67750,51334],{"class":128},[118,67752,51604],{"class":51293},[118,67754,53479],{"class":1967},[118,67756,174],{"class":128},[118,67758,64183],{"class":233},[118,67760,51300],{"class":128},[118,67762,67763,67765,67767,67769,67771],{"class":120,"line":16741},[118,67764,55227],{"class":128},[118,67766,89],{"class":51293},[118,67768,64194],{"class":128},[118,67770,89],{"class":51293},[118,67772,51300],{"class":128},[118,67774,67775,67777,67779],{"class":120,"line":16763},[118,67776,55227],{"class":128},[118,67778,1135],{"class":51293},[118,67780,51300],{"class":128},[118,67782,67783,67785,67787,67789,67791,67793,67795,67797,67799,67801,67803,67805,67807,67810,67812,67814,67816,67818],{"class":120,"line":16768},[118,67784,55295],{"class":128},[118,67786,75],{"class":51293},[118,67788,61045],{"class":128},[118,67790,21],{"class":51293},[118,67792,53479],{"class":1967},[118,67794,174],{"class":128},[118,67796,59699],{"class":233},[118,67798,61050],{"class":1967},[118,67800,174],{"class":128},[118,67802,64229],{"class":233},[118,67804,53944],{"class":1967},[118,67806,174],{"class":128},[118,67808,67809],{"class":233},"\"0\"",[118,67811,64232],{"class":128},[118,67813,21],{"class":51293},[118,67815,55307],{"class":128},[118,67817,75],{"class":51293},[118,67819,51300],{"class":128},[118,67821,67822,67824,67826,67828,67830,67832,67834,67836,67838,67840,67842,67844,67846,67848,67850],{"class":120,"line":16774},[118,67823,55295],{"class":128},[118,67825,75],{"class":51293},[118,67827,61045],{"class":128},[118,67829,21],{"class":51293},[118,67831,61050],{"class":1967},[118,67833,174],{"class":128},[118,67835,64229],{"class":233},[118,67837,53944],{"class":1967},[118,67839,174],{"class":128},[118,67841,3682],{"class":233},[118,67843,64259],{"class":128},[118,67845,21],{"class":51293},[118,67847,55307],{"class":128},[118,67849,75],{"class":51293},[118,67851,51300],{"class":128},[118,67853,67854,67856,67858,67860,67862,67864,67866,67868,67870,67872,67874,67876,67878,67880,67882],{"class":120,"line":16788},[118,67855,55295],{"class":128},[118,67857,75],{"class":51293},[118,67859,61045],{"class":128},[118,67861,21],{"class":51293},[118,67863,61050],{"class":1967},[118,67865,174],{"class":128},[118,67867,64229],{"class":233},[118,67869,53944],{"class":1967},[118,67871,174],{"class":128},[118,67873,3705],{"class":233},[118,67875,64286],{"class":128},[118,67877,21],{"class":51293},[118,67879,55307],{"class":128},[118,67881,75],{"class":51293},[118,67883,51300],{"class":128},[118,67885,67886,67888,67890,67892,67894,67896,67898,67900,67902,67904,67906,67908,67910,67912,67914],{"class":120,"line":16801},[118,67887,55295],{"class":128},[118,67889,75],{"class":51293},[118,67891,61045],{"class":128},[118,67893,21],{"class":51293},[118,67895,61050],{"class":1967},[118,67897,174],{"class":128},[118,67899,64229],{"class":233},[118,67901,53944],{"class":1967},[118,67903,174],{"class":128},[118,67905,3718],{"class":233},[118,67907,64313],{"class":128},[118,67909,21],{"class":51293},[118,67911,55307],{"class":128},[118,67913,75],{"class":51293},[118,67915,51300],{"class":128},[118,67917,67918,67920,67922,67924,67926,67928,67930,67932,67934,67936,67938,67940,67942,67944,67946],{"class":120,"line":16806},[118,67919,55295],{"class":128},[118,67921,75],{"class":51293},[118,67923,61045],{"class":128},[118,67925,21],{"class":51293},[118,67927,61050],{"class":1967},[118,67929,174],{"class":128},[118,67931,64229],{"class":233},[118,67933,53944],{"class":1967},[118,67935,174],{"class":128},[118,67937,3731],{"class":233},[118,67939,64340],{"class":128},[118,67941,21],{"class":51293},[118,67943,55307],{"class":128},[118,67945,75],{"class":51293},[118,67947,51300],{"class":128},[118,67949,67950,67952,67954],{"class":120,"line":16820},[118,67951,55400],{"class":128},[118,67953,1135],{"class":51293},[118,67955,51300],{"class":128},[118,67957,67958,67960,67962],{"class":120,"line":16825},[118,67959,51769],{"class":128},[118,67961,51604],{"class":51293},[118,67963,51300],{"class":128},[118,67965,67966,67968,67970,67972,67974,67976],{"class":120,"line":16831},[118,67967,51334],{"class":128},[118,67969,51604],{"class":51293},[118,67971,53479],{"class":1967},[118,67973,174],{"class":128},[118,67975,64377],{"class":233},[118,67977,51300],{"class":128},[118,67979,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002,68004,68006,68008,68010],{"class":120,"line":16836},[118,67981,55227],{"class":128},[118,67983,51604],{"class":51293},[118,67985,53479],{"class":1967},[118,67987,174],{"class":128},[118,67989,64392],{"class":233},[118,67991,61045],{"class":128},[118,67993,1466],{"class":51293},[118,67995,55232],{"class":1967},[118,67997,174],{"class":128},[118,67999,64403],{"class":233},[118,68001,55240],{"class":1967},[118,68003,174],{"class":128},[118,68005,7657],{"class":233},[118,68007,64412],{"class":128},[118,68009,51604],{"class":51293},[118,68011,51300],{"class":128},[118,68013,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034,68036,68038,68040,68042,68044],{"class":120,"line":16850},[118,68015,55227],{"class":128},[118,68017,51604],{"class":51293},[118,68019,53479],{"class":1967},[118,68021,174],{"class":128},[118,68023,62616],{"class":233},[118,68025,61045],{"class":128},[118,68027,1466],{"class":51293},[118,68029,55232],{"class":1967},[118,68031,174],{"class":128},[118,68033,64439],{"class":233},[118,68035,55240],{"class":1967},[118,68037,174],{"class":128},[118,68039,7657],{"class":233},[118,68041,64412],{"class":128},[118,68043,51604],{"class":51293},[118,68045,51300],{"class":128},[118,68047,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076,68078],{"class":120,"line":16855},[118,68049,55227],{"class":128},[118,68051,51604],{"class":51293},[118,68053,53479],{"class":1967},[118,68055,174],{"class":128},[118,68057,62616],{"class":233},[118,68059,61045],{"class":128},[118,68061,1466],{"class":51293},[118,68063,55232],{"class":1967},[118,68065,174],{"class":128},[118,68067,64474],{"class":233},[118,68069,55240],{"class":1967},[118,68071,174],{"class":128},[118,68073,7657],{"class":233},[118,68075,64412],{"class":128},[118,68077,51604],{"class":51293},[118,68079,51300],{"class":128},[118,68081,68082,68084,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112],{"class":120,"line":16860},[118,68083,55227],{"class":128},[118,68085,51604],{"class":51293},[118,68087,53479],{"class":1967},[118,68089,174],{"class":128},[118,68091,62616],{"class":233},[118,68093,61045],{"class":128},[118,68095,1466],{"class":51293},[118,68097,55232],{"class":1967},[118,68099,174],{"class":128},[118,68101,64509],{"class":233},[118,68103,55240],{"class":1967},[118,68105,174],{"class":128},[118,68107,7657],{"class":233},[118,68109,64412],{"class":128},[118,68111,51604],{"class":51293},[118,68113,51300],{"class":128},[118,68115,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146],{"class":120,"line":16874},[118,68117,55227],{"class":128},[118,68119,51604],{"class":51293},[118,68121,53479],{"class":1967},[118,68123,174],{"class":128},[118,68125,62616],{"class":233},[118,68127,61045],{"class":128},[118,68129,1466],{"class":51293},[118,68131,55232],{"class":1967},[118,68133,174],{"class":128},[118,68135,64544],{"class":233},[118,68137,55240],{"class":1967},[118,68139,174],{"class":128},[118,68141,7657],{"class":233},[118,68143,64412],{"class":128},[118,68145,51604],{"class":51293},[118,68147,51300],{"class":128},[118,68149,68150,68152,68154],{"class":120,"line":16886},[118,68151,51769],{"class":128},[118,68153,51604],{"class":51293},[118,68155,51300],{"class":128},[118,68157,68158,68160,68162],{"class":120,"line":16891},[118,68159,52410],{"class":128},[118,68161,51604],{"class":51293},[118,68163,51300],{"class":128},[118,68165,68166,68168,68170],{"class":120,"line":16904},[118,68167,52137],{"class":128},[118,68169,51806],{"class":51293},[118,68171,51300],{"class":128},[118,68173,68174],{"class":120,"line":16909},[118,68175,68176],{"class":187},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[118,68178,68179],{"class":120,"line":16914},[118,68180,68181],{"class":187},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[118,68183,68184,68186,68188,68190,68192,68194,68196,68199],{"class":120,"line":16919},[118,68185,11226],{"class":124},[118,68187,61285],{"class":177},[118,68189,13569],{"class":124},[118,68191,54389],{"class":128},[118,68193,54392],{"class":1967},[118,68195,129],{"class":128},[118,68197,68198],{"class":233},"'.tab-nav ul'",[118,68200,135],{"class":128},[118,68202,68203],{"class":120,"line":16932},[118,68204,68205],{"class":187},"    \u002F\u002F 2.添加事件\n",[118,68207,68208,68210,68212,68214,68216,68218,68220,68222,68224],{"class":120,"line":16937},[118,68209,66947],{"class":128},[118,68211,57806],{"class":1967},[118,68213,129],{"class":128},[118,68215,57811],{"class":233},[118,68217,12440],{"class":128},[118,68219,54442],{"class":124},[118,68221,1662],{"class":128},[118,68223,203],{"class":5221},[118,68225,12447],{"class":128},[118,68227,68228,68230,68232],{"class":120,"line":32626},[118,68229,58237],{"class":128},[118,68231,67003],{"class":1967},[118,68233,67006],{"class":128},[118,68235,68236],{"class":120,"line":32632},[118,68237,68238],{"class":187},"      \u002F\u002Fe.targer是我们点击的对象\n",[118,68240,68241,68243,68245,68247,68250],{"class":120,"line":32638},[118,68242,54473],{"class":124},[118,68244,67027],{"class":128},[118,68246,54479],{"class":124},[118,68248,68249],{"class":233}," 'A'",[118,68251,12447],{"class":128},[118,68253,68254,68256,68258,68260,68263,68265,68267,68269,68271],{"class":120,"line":32644},[118,68255,51918],{"class":128},[118,68257,54392],{"class":1967},[118,68259,129],{"class":128},[118,68261,68262],{"class":233},"'.active'",[118,68264,56996],{"class":128},[118,68266,56999],{"class":1967},[118,68268,129],{"class":128},[118,68270,64707],{"class":233},[118,68272,135],{"class":128},[118,68274,68275,68278,68280,68282,68284],{"class":120,"line":32650},[118,68276,68277],{"class":128},"        e.target.classList.",[118,68279,5339],{"class":1967},[118,68281,129],{"class":128},[118,68283,64707],{"class":233},[118,68285,135],{"class":128},[118,68287,68288],{"class":120,"line":32661},[118,68289,2404],{"emptyLinePlaceholder":45},[118,68291,68292],{"class":120,"line":32667},[118,68293,68294],{"class":187},"        \u002F\u002F 下面大盒子模块\n",[118,68296,68297],{"class":120,"line":32687},[118,68298,68299],{"class":187},"        \u002F\u002F console.log(e.target.dataset.id)\n",[118,68301,68302,68304,68306,68308,68310],{"class":120,"line":32693},[118,68303,61263],{"class":124},[118,68305,3036],{"class":177},[118,68307,13569],{"class":124},[118,68309,45559],{"class":124},[118,68311,68312],{"class":128},"e.target.dataset.id\n",[118,68314,68315,68317,68319,68321,68323,68325,68327,68329,68331],{"class":120,"line":32704},[118,68316,51918],{"class":128},[118,68318,54392],{"class":1967},[118,68320,129],{"class":128},[118,68322,64755],{"class":233},[118,68324,56996],{"class":128},[118,68326,56999],{"class":1967},[118,68328,129],{"class":128},[118,68330,64707],{"class":233},[118,68332,135],{"class":128},[118,68334,68335,68337,68339,68341,68343,68345,68347,68349,68351,68353,68355,68357,68359],{"class":120,"line":32710},[118,68336,51918],{"class":128},[118,68338,54392],{"class":1967},[118,68340,129],{"class":128},[118,68342,64781],{"class":233},[118,68344,569],{"class":128},[118,68346,45559],{"class":124},[118,68348,25123],{"class":177},[118,68350,57025],{"class":233},[118,68352,56996],{"class":128},[118,68354,5339],{"class":1967},[118,68356,129],{"class":128},[118,68358,64707],{"class":233},[118,68360,135],{"class":128},[118,68362,68363],{"class":120,"line":32716},[118,68364,2404],{"emptyLinePlaceholder":45},[118,68366,68367],{"class":120,"line":32722},[118,68368,52391],{"class":128},[118,68370,68371],{"class":120,"line":32728},[118,68372,33454],{"class":128},[118,68374,68375,68377,68379],{"class":120,"line":32734},[118,68376,52410],{"class":128},[118,68378,51806],{"class":51293},[118,68380,51300],{"class":128},[118,68382,68383,68385,68387],{"class":120,"line":32740},[118,68384,51778],{"class":128},[118,68386,51793],{"class":51293},[118,68388,51300],{"class":128},[118,68390,68391],{"class":120,"line":32746},[118,68392,2404],{"emptyLinePlaceholder":45},[118,68394,68395,68397,68399],{"class":120,"line":32766},[118,68396,51778],{"class":128},[118,68398,50628],{"class":51293},[118,68400,51300],{"class":128},[89,68402,68404],{"id":68403},"_333-页面加载事件","3.3.3 页面加载事件",[72,68406,68407],{},[75,68408,68409],{},"load",[15,68411,68412],{},[1466,68413],{"alt":39,"src":68414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[15,68416,68417],{},"window代表整个窗口，比document还要大",[15,68419,68420],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[15,68422,68423],{},"img.addEventListener('load', function () {",[15,68425,68426],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[15,68428,52457],{},[72,68430,68431],{"start":40},[75,68432,68433],{},"DOMContentLoaded",[15,68435,68436],{},[1466,68437],{"alt":39,"src":68438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[15,68440,68441],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[89,68443,68445],{"id":68444},"_334-元素滚动事件","3.3.4 元素滚动事件",[15,68447,68448],{},[1466,68449],{"alt":39,"src":68450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[15,68452,68453],{},[1466,68454],{"alt":39,"src":68455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[15,68457,68458],{},[1466,68459],{"alt":39,"src":68460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[15,68462,68463],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[15,68465,68466],{},"获得的是数字型数据，不带单位",[15,68468,68469],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[15,68471,68472],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[15,68474,68475],{},"它是通过document.documentElement来获取",[15,68477,68478],{},[1466,68479],{"alt":39,"src":68480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[15,68482,68483],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[89,68485,68487],{"id":68486},"_335-页面缩放事件","3.3.5 页面缩放事件",[15,68489,68490],{},[1466,68491],{"alt":39,"src":68492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[15,68494,68495],{},[1466,68496],{"alt":39,"src":68497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[89,68499,68501],{"id":68500},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[15,68503,68504],{},[1466,68505],{"alt":39,"src":68506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[15,68508,68509],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[15,68511,68512],{},[1466,68513],{"alt":39,"src":68514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[15,68516,68517],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[15,68519,68520],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[15,68522,68523],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[15,68525,68526],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[15,68528,68529],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[15,68531,68532],{},[1466,68533],{"alt":39,"src":68534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[15,68536,68537],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[15,68539,68540],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[15,68542,68543],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[15,68545,68546],{},"e.pageX-box.getBoundingClientRect()",[89,68548,68550],{"id":68549},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[15,68552,68553],{},[1466,68554],{"alt":39,"src":68555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[15,68557,68558],{},"这个是相对于视口来说的，它是个方法，不是属性值",[89,68560,68562],{"id":68561},"_338-总结","3.3.8 总结",[15,68564,68565],{},[1466,68566],{"alt":39,"src":68567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[15,68569,68570],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[15,68572,68573],{},"修改盒子的宽高只能通过width和height来实现",[89,68575,68577],{"id":68576},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[109,68579,68581],{"className":50626,"code":68580,"language":50628,"meta":39,"style":39},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[115,68582,68583,68588,68593,68598,68603],{"__ignoreMap":39},[118,68584,68585],{"class":120,"line":121},[118,68586,68587],{"class":128},"\u002F* 页面滑动 *\u002F\n",[118,68589,68590],{"class":120,"line":40},[118,68591,68592],{"class":128},"html {\n",[118,68594,68595],{"class":120,"line":1183},[118,68596,68597],{"class":128},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[118,68599,68600],{"class":120,"line":1198},[118,68601,68602],{"class":128},"  scroll-behavior: smooth;\n",[118,68604,68605],{"class":120,"line":1204},[118,68606,1569],{"class":128},[15,68608,68609],{},"默认是auto",[89,68611,68613],{"id":68612},"_3310-日期对象","3.3.10 日期对象",[22003,68615,68617],{"id":68616},"_33101-实例化","3.3.10.1 实例化",[15,68619,68620],{},[1466,68621],{"alt":39,"src":68622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22003,68624,68626],{"id":68625},"_33102-时期对象方法","3.3.10.2 时期对象方法",[15,68628,68629],{},[1466,68630],{"alt":39,"src":68631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[15,68633,68634],{},"月份+1",[15,68636,68637],{},"老外认为第一天为0，星期天",[15,68639,68640],{},"方法使用的时候必须要跟括号",[15,68642,68643],{},"快速获得日期",[15,68645,68646],{},"\u002F\u002F 得到年月日",[15,68648,68649],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[15,68651,68652],{},"\u002F\u002F 得到当地日期",[15,68654,68655],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[15,68657,68658],{},"\u002F\u002F 得到当地时间",[15,68660,68661],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[15,68663,68664],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[15,68666,68667],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51806,68669,68670],{},"\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",[15,68672,68673],{},"学会去封装函数！",[22003,68675,68677],{"id":68676},"_33103-时间戳","3.3.10.3 时间戳",[15,68679,68680],{},[1466,68681],{"alt":39,"src":68682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[15,68684,68685],{},[1466,68686],{"alt":39,"src":68687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[15,68689,68690],{},"三种方法记住一个就可以",[89,68692,68694],{"id":68693},"_3311-节点操作","3.3.11 节点操作",[22003,68696,68698],{"id":68697},"_33111-dom节点","3.3.11.1 DOM节点",[15,68700,68701],{},[1466,68702],{"alt":39,"src":68703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[15,68705,68706],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22003,68708,68710],{"id":68709},"_33112-查找节点","3.3.11.2 查找节点",[15,68712,68713],{},"前边的document.querySelector()是获取的元素",[15,68715,68716],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[15,68718,68719],{},[1466,68720],{"alt":39,"src":68721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[72,68723,68724],{},[75,68725,68726],{},"父节点",[15,68728,68729],{},[1466,68730],{"alt":39,"src":68731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[72,68733,68734],{"start":40},[75,68735,68736],{},"子节点",[15,68738,68739],{},[1466,68740],{"alt":39,"src":68741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[15,68743,68744],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[15,68746,68747],{},"children获得的是伪数组，是亲儿子",[72,68749,68750],{"start":1183},[75,68751,68752],{},"兄弟节点",[15,68754,68755],{},[1466,68756],{"alt":39,"src":68757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22003,68759,68761],{"id":68760},"_33113-增加节点","3.3.11.3 增加节点",[15,68763,68764],{},[1466,68765],{"alt":39,"src":68766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[15,68768,68769],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[15,68771,68772],{},[1466,68773],{"alt":39,"src":68774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[15,68776,68777],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[15,68779,68780],{},"下面是写法的部分展示，就按照下边的格式来写",[15,68782,68783],{},"例：",[51806,68785,68786],{},"\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",[15,68788,68789],{},[1466,68790],{"alt":39,"src":68791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[15,68793,68794],{},"false只克隆标签，里边的内容不会克隆过来",[109,68796,68798],{"className":50626,"code":68797,"language":50628,"meta":39,"style":39},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[115,68799,68800],{"__ignoreMap":39},[118,68801,68802],{"class":120,"line":121},[118,68803,68797],{"class":128},[22003,68805,68807],{"id":68806},"_33114-删除节点","3.3.11.4 删除节点",[15,68809,68810],{},[1466,68811],{"alt":39,"src":68812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[15,68814,68815],{},"父亲删儿子",[15,68817,68818],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[89,68820,68822],{"id":68821},"_3312-m端事件","3.3.12 M端事件",[15,68824,68825],{},"M端就是移动端",[15,68827,68828],{},[1466,68829],{"alt":39,"src":68830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[89,68832,68834],{"id":68833},"_3313-插件","3.3.13 插件",[15,68836,68837],{},"要熟悉官网！！！",[15,68839,68840],{},[21,68841,68842],{"href":68842,"rel":68843},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25],[15,68845,68846],{},[21,68847,68848],{"href":68848,"rel":68849},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25],[89,68851,68853],{"id":68852},"_3314-学生信息表","3.3.14 学生信息表",[72,68855,68856,68859,68862,68865,68868,68871,68874,68877],{},[75,68857,68858],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[75,68860,68861],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[75,68863,68864],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[75,68866,68867],{},"用好表单元素自带的属性，value,name等",[75,68869,68870],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[75,68872,68873],{},"不要忘记事件对象",[75,68875,68876],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[75,68878,68879],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[15,68881,68882],{},"结构：",[109,68884,68886],{"className":50626,"code":68885,"language":50628,"meta":39,"style":39},"\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",[115,68887,68888,68898,68912,68916,68924,68938,68958,68979,68992,69016,69024,69028,69036,69049,69070,69098,69126,69131,69153,69173,69192,69200,69228,69250,69270,69290,69310,69330,69350,69358,69378,69386,69390,69403,69411,69419,69427,69440,69453,69466,69479,69492,69505,69518,69526,69534,69542,69547,69552,69557,69562,69567,69572,69577,69582,69587,69592,69597,69602,69607,69615,69623,69631,69635,69655,69674,69694,69714,69734,69754,69758,69763,69783,69788,69798,69803,69808,69828,69850,69855,69865,69869,69873,69878,69883,69912,69926,69941,69945,69949,69953,69958,69969,69982,69987,69992,69997,70002,70007,70011,70016,70021,70030,70035,70040,70052,70057,70064,70068,70073,70083,70088,70098,70103,70131,70152,70162,70182,70200,70217,70234,70251,70268,70272,70282,70287,70292,70297,70308,70312,70316,70320,70325,70330,70351,70363,70368,70373,70378,70392,70397,70404,70408,70412,70420,70424,70432,70436],{"__ignoreMap":39},[118,68889,68890,68892,68894,68896],{"class":120,"line":121},[118,68891,51290],{"class":128},[118,68893,51294],{"class":51293},[118,68895,51297],{"class":1967},[118,68897,51300],{"class":128},[118,68899,68900,68902,68904,68906,68908,68910],{"class":120,"line":40},[118,68901,1038],{"class":128},[118,68903,50628],{"class":51293},[118,68905,51309],{"class":1967},[118,68907,174],{"class":128},[118,68909,51314],{"class":233},[118,68911,51300],{"class":128},[118,68913,68914],{"class":120,"line":1183},[118,68915,2404],{"emptyLinePlaceholder":45},[118,68917,68918,68920,68922],{"class":120,"line":1198},[118,68919,1038],{"class":128},[118,68921,51327],{"class":51293},[118,68923,51300],{"class":128},[118,68925,68926,68928,68930,68932,68934,68936],{"class":120,"line":1204},[118,68927,52137],{"class":128},[118,68929,51337],{"class":51293},[118,68931,51340],{"class":1967},[118,68933,174],{"class":128},[118,68935,51345],{"class":233},[118,68937,59120],{"class":128},[118,68939,68940,68942,68944,68946,68948,68950,68952,68954,68956],{"class":120,"line":1218},[118,68941,52137],{"class":128},[118,68943,51337],{"class":51293},[118,68945,14925],{"class":1967},[118,68947,174],{"class":128},[118,68949,51384],{"class":233},[118,68951,51364],{"class":1967},[118,68953,174],{"class":128},[118,68955,51391],{"class":233},[118,68957,59120],{"class":128},[118,68959,68960,68962,68964,68966,68968,68970,68972,68974,68977],{"class":120,"line":1224},[118,68961,52137],{"class":128},[118,68963,51337],{"class":51293},[118,68965,51356],{"class":1967},[118,68967,174],{"class":128},[118,68969,51361],{"class":233},[118,68971,51364],{"class":1967},[118,68973,174],{"class":128},[118,68975,68976],{"class":233},"\"ie=edge\"",[118,68978,59120],{"class":128},[118,68980,68981,68983,68985,68988,68990],{"class":120,"line":1315},[118,68982,52137],{"class":128},[118,68984,51400],{"class":51293},[118,68986,68987],{"class":128},">学生信息管理\u003C\u002F",[118,68989,51400],{"class":51293},[118,68991,51300],{"class":128},[118,68993,68994,68996,68999,69002,69004,69007,69009,69011,69014],{"class":120,"line":1321},[118,68995,52137],{"class":128},[118,68997,68998],{"class":51293},"link",[118,69000,69001],{"class":1967}," rel",[118,69003,174],{"class":128},[118,69005,69006],{"class":233},"\"stylesheet\"",[118,69008,61050],{"class":1967},[118,69010,174],{"class":128},[118,69012,69013],{"class":233},"\"css\u002Findex.css\"",[118,69015,59120],{"class":128},[118,69017,69018,69020,69022],{"class":120,"line":1333},[118,69019,51778],{"class":128},[118,69021,51327],{"class":51293},[118,69023,51300],{"class":128},[118,69025,69026],{"class":120,"line":1616},[118,69027,2404],{"emptyLinePlaceholder":45},[118,69029,69030,69032,69034],{"class":120,"line":1621},[118,69031,1038],{"class":128},[118,69033,51793],{"class":51293},[118,69035,51300],{"class":128},[118,69037,69038,69040,69042,69045,69047],{"class":120,"line":1627},[118,69039,52137],{"class":128},[118,69041,10],{"class":51293},[118,69043,69044],{"class":128},">新增学员\u003C\u002F",[118,69046,10],{"class":51293},[118,69048,51300],{"class":128},[118,69050,69051,69053,69055,69057,69059,69061,69064,69066,69068],{"class":120,"line":1632},[118,69052,52137],{"class":128},[118,69054,66618],{"class":51293},[118,69056,53479],{"class":1967},[118,69058,174],{"class":128},[118,69060,62657],{"class":233},[118,69062,69063],{"class":1967}," autocomplete",[118,69065,174],{"class":128},[118,69067,31769],{"class":233},[118,69069,51300],{"class":128},[118,69071,69072,69075,69077,69079,69081,69083,69085,69087,69090,69092,69094,69096],{"class":120,"line":1646},[118,69073,69074],{"class":128},"    姓名：\u003C",[118,69076,53814],{"class":51293},[118,69078,53817],{"class":1967},[118,69080,174],{"class":128},[118,69082,62692],{"class":233},[118,69084,53479],{"class":1967},[118,69086,174],{"class":128},[118,69088,69089],{"class":233},"\"uname\"",[118,69091,14925],{"class":1967},[118,69093,174],{"class":128},[118,69095,69089],{"class":233},[118,69097,59120],{"class":128},[118,69099,69100,69103,69105,69107,69109,69111,69113,69115,69118,69120,69122,69124],{"class":120,"line":1651},[118,69101,69102],{"class":128},"    年龄：\u003C",[118,69104,53814],{"class":51293},[118,69106,53817],{"class":1967},[118,69108,174],{"class":128},[118,69110,62692],{"class":233},[118,69112,53479],{"class":1967},[118,69114,174],{"class":128},[118,69116,69117],{"class":233},"\"age\"",[118,69119,14925],{"class":1967},[118,69121,174],{"class":128},[118,69123,69117],{"class":233},[118,69125,59120],{"class":128},[118,69127,69128],{"class":120,"line":1657},[118,69129,69130],{"class":128},"    性别:\n",[118,69132,69133,69135,69138,69140,69142,69145,69147,69149,69151],{"class":120,"line":1678},[118,69134,51334],{"class":128},[118,69136,69137],{"class":51293},"select",[118,69139,14925],{"class":1967},[118,69141,174],{"class":128},[118,69143,69144],{"class":233},"\"gender\"",[118,69146,53479],{"class":1967},[118,69148,174],{"class":128},[118,69150,69144],{"class":233},[118,69152,51300],{"class":128},[118,69154,69155,69157,69160,69162,69164,69166,69169,69171],{"class":120,"line":1683},[118,69156,55227],{"class":128},[118,69158,69159],{"class":51293},"option",[118,69161,66644],{"class":1967},[118,69163,174],{"class":128},[118,69165,9966],{"class":233},[118,69167,69168],{"class":128},">男\u003C\u002F",[118,69170,69159],{"class":51293},[118,69172,51300],{"class":128},[118,69174,69175,69177,69179,69181,69183,69185,69188,69190],{"class":120,"line":1697},[118,69176,55227],{"class":128},[118,69178,69159],{"class":51293},[118,69180,66644],{"class":1967},[118,69182,174],{"class":128},[118,69184,10035],{"class":233},[118,69186,69187],{"class":128},">女\u003C\u002F",[118,69189,69159],{"class":51293},[118,69191,51300],{"class":128},[118,69193,69194,69196,69198],{"class":120,"line":1702},[118,69195,51769],{"class":128},[118,69197,69137],{"class":51293},[118,69199,51300],{"class":128},[118,69201,69202,69205,69207,69209,69211,69213,69215,69217,69220,69222,69224,69226],{"class":120,"line":1731},[118,69203,69204],{"class":128},"    薪资：\u003C",[118,69206,53814],{"class":51293},[118,69208,53817],{"class":1967},[118,69210,174],{"class":128},[118,69212,62692],{"class":233},[118,69214,53479],{"class":1967},[118,69216,174],{"class":128},[118,69218,69219],{"class":233},"\"salary\"",[118,69221,14925],{"class":1967},[118,69223,174],{"class":128},[118,69225,69219],{"class":233},[118,69227,59120],{"class":128},[118,69229,69230,69233,69235,69237,69239,69242,69244,69246,69248],{"class":120,"line":1736},[118,69231,69232],{"class":128},"    就业城市：\u003C",[118,69234,69137],{"class":51293},[118,69236,14925],{"class":1967},[118,69238,174],{"class":128},[118,69240,69241],{"class":233},"\"city\"",[118,69243,53479],{"class":1967},[118,69245,174],{"class":128},[118,69247,69241],{"class":233},[118,69249,51300],{"class":128},[118,69251,69252,69254,69256,69258,69260,69263,69266,69268],{"class":120,"line":1753},[118,69253,55227],{"class":128},[118,69255,69159],{"class":51293},[118,69257,66644],{"class":1967},[118,69259,174],{"class":128},[118,69261,69262],{"class":233},"\"北京\"",[118,69264,69265],{"class":128},">北京\u003C\u002F",[118,69267,69159],{"class":51293},[118,69269,51300],{"class":128},[118,69271,69272,69274,69276,69278,69280,69283,69286,69288],{"class":120,"line":1758},[118,69273,55227],{"class":128},[118,69275,69159],{"class":51293},[118,69277,66644],{"class":1967},[118,69279,174],{"class":128},[118,69281,69282],{"class":233},"\"上海\"",[118,69284,69285],{"class":128},">上海\u003C\u002F",[118,69287,69159],{"class":51293},[118,69289,51300],{"class":128},[118,69291,69292,69294,69296,69298,69300,69303,69306,69308],{"class":120,"line":1763},[118,69293,55227],{"class":128},[118,69295,69159],{"class":51293},[118,69297,66644],{"class":1967},[118,69299,174],{"class":128},[118,69301,69302],{"class":233},"\"广州\"",[118,69304,69305],{"class":128},">广州\u003C\u002F",[118,69307,69159],{"class":51293},[118,69309,51300],{"class":128},[118,69311,69312,69314,69316,69318,69320,69323,69326,69328],{"class":120,"line":1768},[118,69313,55227],{"class":128},[118,69315,69159],{"class":51293},[118,69317,66644],{"class":1967},[118,69319,174],{"class":128},[118,69321,69322],{"class":233},"\"深圳\"",[118,69324,69325],{"class":128},">深圳\u003C\u002F",[118,69327,69159],{"class":51293},[118,69329,51300],{"class":128},[118,69331,69332,69334,69336,69338,69340,69343,69346,69348],{"class":120,"line":1782},[118,69333,55227],{"class":128},[118,69335,69159],{"class":51293},[118,69337,66644],{"class":1967},[118,69339,174],{"class":128},[118,69341,69342],{"class":233},"\"曹县\"",[118,69344,69345],{"class":128},">曹县\u003C\u002F",[118,69347,69159],{"class":51293},[118,69349,51300],{"class":128},[118,69351,69352,69354,69356],{"class":120,"line":1787},[118,69353,51769],{"class":128},[118,69355,69137],{"class":51293},[118,69357,51300],{"class":128},[118,69359,69360,69362,69364,69366,69368,69371,69374,69376],{"class":120,"line":2581},[118,69361,51334],{"class":128},[118,69363,53880],{"class":51293},[118,69365,53479],{"class":1967},[118,69367,174],{"class":128},[118,69369,69370],{"class":233},"\"add\"",[118,69372,69373],{"class":128},">录入\u003C\u002F",[118,69375,53880],{"class":51293},[118,69377,51300],{"class":128},[118,69379,69380,69382,69384],{"class":120,"line":2595},[118,69381,52410],{"class":128},[118,69383,66618],{"class":51293},[118,69385,51300],{"class":128},[118,69387,69388],{"class":120,"line":2603},[118,69389,2404],{"emptyLinePlaceholder":45},[118,69391,69392,69394,69396,69399,69401],{"class":120,"line":2608},[118,69393,52137],{"class":128},[118,69395,10],{"class":51293},[118,69397,69398],{"class":128},">就业榜\u003C\u002F",[118,69400,10],{"class":51293},[118,69402,51300],{"class":128},[118,69404,69405,69407,69409],{"class":120,"line":2614},[118,69406,52137],{"class":128},[118,69408,266],{"class":51293},[118,69410,51300],{"class":128},[118,69412,69413,69415,69417],{"class":120,"line":2620},[118,69414,51334],{"class":128},[118,69416,269],{"class":51293},[118,69418,51300],{"class":128},[118,69420,69421,69423,69425],{"class":120,"line":2625},[118,69422,55227],{"class":128},[118,69424,272],{"class":51293},[118,69426,51300],{"class":128},[118,69428,69429,69431,69433,69436,69438],{"class":120,"line":7953},[118,69430,55295],{"class":128},[118,69432,275],{"class":51293},[118,69434,69435],{"class":128},">序号\u003C\u002F",[118,69437,275],{"class":51293},[118,69439,51300],{"class":128},[118,69441,69442,69444,69446,69449,69451],{"class":120,"line":7977},[118,69443,55295],{"class":128},[118,69445,275],{"class":51293},[118,69447,69448],{"class":128},">姓名\u003C\u002F",[118,69450,275],{"class":51293},[118,69452,51300],{"class":128},[118,69454,69455,69457,69459,69462,69464],{"class":120,"line":7982},[118,69456,55295],{"class":128},[118,69458,275],{"class":51293},[118,69460,69461],{"class":128},">年龄\u003C\u002F",[118,69463,275],{"class":51293},[118,69465,51300],{"class":128},[118,69467,69468,69470,69472,69475,69477],{"class":120,"line":7988},[118,69469,55295],{"class":128},[118,69471,275],{"class":51293},[118,69473,69474],{"class":128},">性别\u003C\u002F",[118,69476,275],{"class":51293},[118,69478,51300],{"class":128},[118,69480,69481,69483,69485,69488,69490],{"class":120,"line":8015},[118,69482,55295],{"class":128},[118,69484,275],{"class":51293},[118,69486,69487],{"class":128},">薪资\u003C\u002F",[118,69489,275],{"class":51293},[118,69491,51300],{"class":128},[118,69493,69494,69496,69498,69501,69503],{"class":120,"line":8020},[118,69495,55295],{"class":128},[118,69497,275],{"class":51293},[118,69499,69500],{"class":128},">就业城市\u003C\u002F",[118,69502,275],{"class":51293},[118,69504,51300],{"class":128},[118,69506,69507,69509,69511,69514,69516],{"class":120,"line":8026},[118,69508,55295],{"class":128},[118,69510,275],{"class":51293},[118,69512,69513],{"class":128},">操作\u003C\u002F",[118,69515,275],{"class":51293},[118,69517,51300],{"class":128},[118,69519,69520,69522,69524],{"class":120,"line":8038},[118,69521,55400],{"class":128},[118,69523,272],{"class":51293},[118,69525,51300],{"class":128},[118,69527,69528,69530,69532],{"class":120,"line":8050},[118,69529,51769],{"class":128},[118,69531,269],{"class":51293},[118,69533,51300],{"class":128},[118,69535,69536,69538,69540],{"class":120,"line":8062},[118,69537,51334],{"class":128},[118,69539,313],{"class":51293},[118,69541,51300],{"class":128},[118,69543,69544],{"class":120,"line":9721},[118,69545,69546],{"class":187},"      \u003C!-- \n",[118,69548,69549],{"class":120,"line":9746},[118,69550,69551],{"class":187},"        \u003Ctr>\n",[118,69553,69554],{"class":120,"line":9769},[118,69555,69556],{"class":187},"          \u003Ctd>1001\u003C\u002Ftd>\n",[118,69558,69559],{"class":120,"line":9793},[118,69560,69561],{"class":187},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[118,69563,69564],{"class":120,"line":9798},[118,69565,69566],{"class":187},"          \u003Ctd>19\u003C\u002Ftd>\n",[118,69568,69569],{"class":120,"line":9803},[118,69570,69571],{"class":187},"          \u003Ctd>男\u003C\u002Ftd>\n",[118,69573,69574],{"class":120,"line":9808},[118,69575,69576],{"class":187},"          \u003Ctd>15000\u003C\u002Ftd>\n",[118,69578,69579],{"class":120,"line":9817},[118,69580,69581],{"class":187},"          \u003Ctd>上海\u003C\u002Ftd>\n",[118,69583,69584],{"class":120,"line":9822},[118,69585,69586],{"class":187},"          \u003Ctd>\n",[118,69588,69589],{"class":120,"line":9828},[118,69590,69591],{"class":187},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[118,69593,69594],{"class":120,"line":9849},[118,69595,69596],{"class":187},"          \u003C\u002Ftd>\n",[118,69598,69599],{"class":120,"line":9855},[118,69600,69601],{"class":187},"        \u003C\u002Ftr> \n",[118,69603,69604],{"class":120,"line":9869},[118,69605,69606],{"class":187},"        -->\n",[118,69608,69609,69611,69613],{"class":120,"line":9875},[118,69610,51769],{"class":128},[118,69612,313],{"class":51293},[118,69614,51300],{"class":128},[118,69616,69617,69619,69621],{"class":120,"line":9902},[118,69618,52410],{"class":128},[118,69620,266],{"class":51293},[118,69622,51300],{"class":128},[118,69624,69625,69627,69629],{"class":120,"line":9911},[118,69626,52137],{"class":128},[118,69628,51806],{"class":51293},[118,69630,51300],{"class":128},[118,69632,69633],{"class":120,"line":9917},[118,69634,59951],{"class":187},[118,69636,69637,69639,69642,69644,69646,69648,69650,69653],{"class":120,"line":9925},[118,69638,11226],{"class":124},[118,69640,69641],{"class":177}," uname",[118,69643,13569],{"class":124},[118,69645,54389],{"class":128},[118,69647,54392],{"class":1967},[118,69649,129],{"class":128},[118,69651,69652],{"class":233},"'.uname'",[118,69654,135],{"class":128},[118,69656,69657,69659,69661,69663,69665,69667,69669,69672],{"class":120,"line":9930},[118,69658,11226],{"class":124},[118,69660,15694],{"class":177},[118,69662,13569],{"class":124},[118,69664,54389],{"class":128},[118,69666,54392],{"class":1967},[118,69668,129],{"class":128},[118,69670,69671],{"class":233},"'.age'",[118,69673,135],{"class":128},[118,69675,69676,69678,69681,69683,69685,69687,69689,69692],{"class":120,"line":16609},[118,69677,11226],{"class":124},[118,69679,69680],{"class":177}," gender",[118,69682,13569],{"class":124},[118,69684,54389],{"class":128},[118,69686,54392],{"class":1967},[118,69688,129],{"class":128},[118,69690,69691],{"class":233},"'.gender'",[118,69693,135],{"class":128},[118,69695,69696,69698,69701,69703,69705,69707,69709,69712],{"class":120,"line":16615},[118,69697,11226],{"class":124},[118,69699,69700],{"class":177}," salary",[118,69702,13569],{"class":124},[118,69704,54389],{"class":128},[118,69706,54392],{"class":1967},[118,69708,129],{"class":128},[118,69710,69711],{"class":233},"'.salary'",[118,69713,135],{"class":128},[118,69715,69716,69718,69721,69723,69725,69727,69729,69732],{"class":120,"line":16638},[118,69717,11226],{"class":124},[118,69719,69720],{"class":177}," city",[118,69722,13569],{"class":124},[118,69724,54389],{"class":128},[118,69726,54392],{"class":1967},[118,69728,129],{"class":128},[118,69730,69731],{"class":233},"'.city'",[118,69733,135],{"class":128},[118,69735,69736,69738,69741,69743,69745,69747,69749,69752],{"class":120,"line":16644},[118,69737,11226],{"class":124},[118,69739,69740],{"class":177}," tbody",[118,69742,13569],{"class":124},[118,69744,54389],{"class":128},[118,69746,54392],{"class":1967},[118,69748,129],{"class":128},[118,69750,69751],{"class":233},"'tbody'",[118,69753,135],{"class":128},[118,69755,69756],{"class":120,"line":16667},[118,69757,2404],{"emptyLinePlaceholder":45},[118,69759,69760],{"class":120,"line":16681},[118,69761,69762],{"class":187},"    \u002F\u002F 获取所有带有name属性的元素\n",[118,69764,69765,69767,69770,69772,69774,69776,69778,69781],{"class":120,"line":16701},[118,69766,11226],{"class":124},[118,69768,69769],{"class":177}," items",[118,69771,13569],{"class":124},[118,69773,54389],{"class":128},[118,69775,55674],{"class":1967},[118,69777,129],{"class":128},[118,69779,69780],{"class":233},"'[name]'",[118,69782,135],{"class":128},[118,69784,69785],{"class":120,"line":16707},[118,69786,69787],{"class":187},"    \u002F\u002F 声明一个空的数组\n",[118,69789,69790,69792,69794,69796],{"class":120,"line":16718},[118,69791,11226],{"class":124},[118,69793,57688],{"class":177},[118,69795,13569],{"class":124},[118,69797,51831],{"class":128},[118,69799,69800],{"class":120,"line":16741},[118,69801,69802],{"class":187},"    \u002F\u002F 1.录入模块\n",[118,69804,69805],{"class":120,"line":16763},[118,69806,69807],{"class":187},"    \u002F\u002F 1.1这是一个表单提交事件\n",[118,69809,69810,69812,69815,69817,69819,69821,69823,69826],{"class":120,"line":16768},[118,69811,11226],{"class":124},[118,69813,69814],{"class":177}," info",[118,69816,13569],{"class":124},[118,69818,54389],{"class":128},[118,69820,54392],{"class":1967},[118,69822,129],{"class":128},[118,69824,69825],{"class":233},"'.info'",[118,69827,135],{"class":128},[118,69829,69830,69833,69835,69837,69840,69842,69844,69846,69848],{"class":120,"line":16774},[118,69831,69832],{"class":128},"    info.",[118,69834,57806],{"class":1967},[118,69836,129],{"class":128},[118,69838,69839],{"class":233},"'submit'",[118,69841,12440],{"class":128},[118,69843,54442],{"class":124},[118,69845,1662],{"class":128},[118,69847,203],{"class":5221},[118,69849,12447],{"class":128},[118,69851,69852],{"class":120,"line":16788},[118,69853,69854],{"class":187},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[118,69856,69857,69860,69863],{"class":120,"line":16801},[118,69858,69859],{"class":128},"      e.",[118,69861,69862],{"class":1967},"preventDefault",[118,69864,1980],{"class":128},[118,69866,69867],{"class":120,"line":16806},[118,69868,60005],{"class":187},[118,69870,69871],{"class":120,"line":16820},[118,69872,2404],{"emptyLinePlaceholder":45},[118,69874,69875],{"class":120,"line":16825},[118,69876,69877],{"class":187},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[118,69879,69880],{"class":120,"line":16831},[118,69881,69882],{"class":187},"      \u002F\u002F 先遍历循环\n",[118,69884,69885,69887,69889,69891,69893,69895,69897,69899,69901,69904,69906,69908,69910],{"class":120,"line":16836},[118,69886,52277],{"class":124},[118,69888,1662],{"class":128},[118,69890,51840],{"class":124},[118,69892,9443],{"class":128},[118,69894,174],{"class":124},[118,69896,4097],{"class":177},[118,69898,9450],{"class":128},[118,69900,1038],{"class":124},[118,69902,69903],{"class":128}," items.",[118,69905,51961],{"class":177},[118,69907,3218],{"class":128},[118,69909,2296],{"class":124},[118,69911,12447],{"class":128},[118,69913,69914,69916,69919,69921,69924],{"class":120,"line":16850},[118,69915,2501],{"class":124},[118,69917,69918],{"class":128}," (items[i].value ",[118,69920,54479],{"class":124},[118,69922,69923],{"class":233}," ''",[118,69925,12447],{"class":128},[118,69927,69928,69931,69934,69936,69939],{"class":120,"line":16855},[118,69929,69930],{"class":124},"          return",[118,69932,69933],{"class":1967}," alert",[118,69935,129],{"class":128},[118,69937,69938],{"class":233},"'输入内容不能为空'",[118,69940,135],{"class":128},[118,69942,69943],{"class":120,"line":16860},[118,69944,2533],{"class":128},[118,69946,69947],{"class":120,"line":16874},[118,69948,52391],{"class":128},[118,69950,69951],{"class":120,"line":16886},[118,69952,2404],{"emptyLinePlaceholder":45},[118,69954,69955],{"class":120,"line":16891},[118,69956,69957],{"class":187},"      \u002F\u002F 创建新的对象\n",[118,69959,69960,69962,69965,69967],{"class":120,"line":16904},[118,69961,58221],{"class":124},[118,69963,69964],{"class":177}," obj",[118,69966,13569],{"class":124},[118,69968,15577],{"class":128},[118,69970,69971,69974,69976,69978,69980],{"class":120,"line":16909},[118,69972,69973],{"class":128},"        stuID: arr.",[118,69975,51961],{"class":177},[118,69977,45559],{"class":124},[118,69979,25123],{"class":177},[118,69981,31459],{"class":128},[118,69983,69984],{"class":120,"line":16914},[118,69985,69986],{"class":128},"        uname: uname.value,\n",[118,69988,69989],{"class":120,"line":16919},[118,69990,69991],{"class":128},"        age: age.value,\n",[118,69993,69994],{"class":120,"line":16932},[118,69995,69996],{"class":128},"        gender: gender.value,\n",[118,69998,69999],{"class":120,"line":16937},[118,70000,70001],{"class":128},"        salary: salary.value,\n",[118,70003,70004],{"class":120,"line":32626},[118,70005,70006],{"class":128},"        city: city.value\n",[118,70008,70009],{"class":120,"line":32632},[118,70010,52391],{"class":128},[118,70012,70013],{"class":120,"line":32638},[118,70014,70015],{"class":187},"      \u002F\u002F console.log(obj);\n",[118,70017,70018],{"class":120,"line":32644},[118,70019,70020],{"class":187},"      \u002F\u002F 追加到数组里面\n",[118,70022,70023,70025,70027],{"class":120,"line":32650},[118,70024,58000],{"class":128},[118,70026,51877],{"class":1967},[118,70028,70029],{"class":128},"(obj)\n",[118,70031,70032],{"class":120,"line":32661},[118,70033,70034],{"class":187},"      \u002F\u002F console.log(arr);\n",[118,70036,70037],{"class":120,"line":32667},[118,70038,70039],{"class":187},"      \u002F\u002F 清空表单  reset重置表单\n",[118,70041,70042,70045,70047,70050],{"class":120,"line":32687},[118,70043,70044],{"class":177},"      this",[118,70046,686],{"class":128},[118,70048,70049],{"class":1967},"reset",[118,70051,1980],{"class":128},[118,70053,70054],{"class":120,"line":32693},[118,70055,70056],{"class":187},"      \u002F\u002F 调用渲染函数\n",[118,70058,70059,70062],{"class":120,"line":32704},[118,70060,70061],{"class":1967},"      render",[118,70063,1980],{"class":128},[118,70065,70066],{"class":120,"line":32710},[118,70067,33454],{"class":128},[118,70069,70070],{"class":120,"line":32716},[118,70071,70072],{"class":187},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[118,70074,70075,70078,70081],{"class":120,"line":32722},[118,70076,70077],{"class":124},"    function",[118,70079,70080],{"class":1967}," render",[118,70082,10858],{"class":128},[118,70084,70085],{"class":120,"line":32728},[118,70086,70087],{"class":187},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[118,70089,70090,70093,70095],{"class":120,"line":32734},[118,70091,70092],{"class":128},"      tbody.innerHTML ",[118,70094,174],{"class":124},[118,70096,70097],{"class":233}," ''\n",[118,70099,70100],{"class":120,"line":32740},[118,70101,70102],{"class":187},"      \u002F\u002F 遍历数组\n",[118,70104,70105,70107,70109,70111,70113,70115,70117,70119,70121,70123,70125,70127,70129],{"class":120,"line":32746},[118,70106,52277],{"class":124},[118,70108,1662],{"class":128},[118,70110,51840],{"class":124},[118,70112,9443],{"class":128},[118,70114,174],{"class":124},[118,70116,4097],{"class":177},[118,70118,9450],{"class":128},[118,70120,1038],{"class":124},[118,70122,51958],{"class":128},[118,70124,51961],{"class":177},[118,70126,3218],{"class":128},[118,70128,2296],{"class":124},[118,70130,12447],{"class":128},[118,70132,70133,70135,70138,70140,70142,70145,70147,70150],{"class":120,"line":32766},[118,70134,61263],{"class":124},[118,70136,70137],{"class":177}," tr",[118,70139,13569],{"class":124},[118,70141,54389],{"class":128},[118,70143,70144],{"class":1967},"createElement",[118,70146,129],{"class":128},[118,70148,70149],{"class":233},"'tr'",[118,70151,135],{"class":128},[118,70153,70154,70157,70159],{"class":120,"line":32772},[118,70155,70156],{"class":128},"        tr.innerHTML ",[118,70158,174],{"class":124},[118,70160,70161],{"class":233}," `\n",[118,70163,70164,70167,70169,70171,70173,70176,70179],{"class":120,"line":32788},[118,70165,70166],{"class":233},"        \u003Ctd>${",[118,70168,3884],{"class":128},[118,70170,1018],{"class":233},[118,70172,569],{"class":128},[118,70174,70175],{"class":233},"].",[118,70177,70178],{"class":128},"stuID",[118,70180,70181],{"class":233},"}\u003C\u002Ftd>\n",[118,70183,70184,70187,70189,70191,70193,70195,70198],{"class":120,"line":32794},[118,70185,70186],{"class":233},"          \u003Ctd>${",[118,70188,3884],{"class":128},[118,70190,1018],{"class":233},[118,70192,569],{"class":128},[118,70194,70175],{"class":233},[118,70196,70197],{"class":128},"uname",[118,70199,70181],{"class":233},[118,70201,70202,70204,70206,70208,70210,70212,70215],{"class":120,"line":32808},[118,70203,70186],{"class":233},[118,70205,3884],{"class":128},[118,70207,1018],{"class":233},[118,70209,569],{"class":128},[118,70211,70175],{"class":233},[118,70213,70214],{"class":128},"age",[118,70216,70181],{"class":233},[118,70218,70219,70221,70223,70225,70227,70229,70232],{"class":120,"line":32814},[118,70220,70186],{"class":233},[118,70222,3884],{"class":128},[118,70224,1018],{"class":233},[118,70226,569],{"class":128},[118,70228,70175],{"class":233},[118,70230,70231],{"class":128},"gender",[118,70233,70181],{"class":233},[118,70235,70236,70238,70240,70242,70244,70246,70249],{"class":120,"line":32829},[118,70237,70186],{"class":233},[118,70239,3884],{"class":128},[118,70241,1018],{"class":233},[118,70243,569],{"class":128},[118,70245,70175],{"class":233},[118,70247,70248],{"class":128},"salary",[118,70250,70181],{"class":233},[118,70252,70253,70255,70257,70259,70261,70263,70266],{"class":120,"line":32835},[118,70254,70186],{"class":233},[118,70256,3884],{"class":128},[118,70258,1018],{"class":233},[118,70260,569],{"class":128},[118,70262,70175],{"class":233},[118,70264,70265],{"class":128},"city",[118,70267,70181],{"class":233},[118,70269,70270],{"class":120,"line":32844},[118,70271,69586],{"class":233},[118,70273,70274,70277,70279],{"class":120,"line":32850},[118,70275,70276],{"class":233},"            \u003Ca href=\"javascript:\" data-id=${",[118,70278,569],{"class":128},[118,70280,70281],{"class":233},"}>删除\u003C\u002Fa>\n",[118,70283,70284],{"class":120,"line":32859},[118,70285,70286],{"class":233},"          \u003C\u002Ftd> \n",[118,70288,70289],{"class":120,"line":32865},[118,70290,70291],{"class":233},"          `\n",[118,70293,70294],{"class":120,"line":32871},[118,70295,70296],{"class":187},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[118,70298,70299,70302,70305],{"class":120,"line":32880},[118,70300,70301],{"class":128},"        tbody.",[118,70303,70304],{"class":1967},"appendChild",[118,70306,70307],{"class":128},"(tr)\n",[118,70309,70310],{"class":120,"line":32886},[118,70311,52391],{"class":128},[118,70313,70314],{"class":120,"line":32897},[118,70315,2191],{"class":128},[118,70317,70318],{"class":120,"line":32903},[118,70319,2404],{"emptyLinePlaceholder":45},[118,70321,70322],{"class":120,"line":32922},[118,70323,70324],{"class":187},"    \u002F\u002F 3.删除委托\n",[118,70326,70327],{"class":120,"line":32928},[118,70328,70329],{"class":187},"    \u002F\u002F 3.1 事件委托 tbody\n",[118,70331,70332,70335,70337,70339,70341,70343,70345,70347,70349],{"class":120,"line":32939},[118,70333,70334],{"class":128},"    tbody.",[118,70336,57806],{"class":1967},[118,70338,129],{"class":128},[118,70340,57811],{"class":233},[118,70342,12440],{"class":128},[118,70344,54442],{"class":124},[118,70346,1662],{"class":128},[118,70348,203],{"class":5221},[118,70350,12447],{"class":128},[118,70352,70353,70355,70357,70359,70361],{"class":120,"line":32945},[118,70354,54473],{"class":124},[118,70356,67027],{"class":128},[118,70358,54479],{"class":124},[118,70360,68249],{"class":233},[118,70362,12447],{"class":128},[118,70364,70365],{"class":120,"line":32965},[118,70366,70367],{"class":187},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[118,70369,70370],{"class":120,"line":32981},[118,70371,70372],{"class":187},"        \u002F\u002F console.log(e.target.dataset.id);\n",[118,70374,70375],{"class":120,"line":32987},[118,70376,70377],{"class":187},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[118,70379,70380,70383,70385,70388,70390],{"class":120,"line":33001},[118,70381,70382],{"class":128},"        arr.",[118,70384,58003],{"class":1967},[118,70386,70387],{"class":128},"(e.target.dataset.id, ",[118,70389,346],{"class":177},[118,70391,135],{"class":128},[118,70393,70394],{"class":120,"line":33007},[118,70395,70396],{"class":187},"        \u002F\u002F 重新渲染一次\n",[118,70398,70399,70402],{"class":120,"line":33013},[118,70400,70401],{"class":1967},"        render",[118,70403,1980],{"class":128},[118,70405,70406],{"class":120,"line":33024},[118,70407,52391],{"class":128},[118,70409,70410],{"class":120,"line":33030},[118,70411,33454],{"class":128},[118,70413,70414,70416,70418],{"class":120,"line":33036},[118,70415,52410],{"class":128},[118,70417,51806],{"class":51293},[118,70419,51300],{"class":128},[118,70421,70422],{"class":120,"line":33046},[118,70423,2404],{"emptyLinePlaceholder":45},[118,70425,70426,70428,70430],{"class":120,"line":33052},[118,70427,51778],{"class":128},[118,70429,51793],{"class":51293},[118,70431,51300],{"class":128},[118,70433,70434],{"class":120,"line":33063},[118,70435,2404],{"emptyLinePlaceholder":45},[118,70437,70438,70440,70442],{"class":120,"line":33069},[118,70439,51778],{"class":128},[118,70441,50628],{"class":51293},[118,70443,51300],{"class":128},[15,70445,70446],{},"样式：",[109,70448,70452],{"className":70449,"code":70450,"language":70451,"meta":39,"style":39},"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",[115,70453,70454,70459,70469,70478,70482,70486,70491,70501,70506,70510,70515,70525,70530,70539,70543,70547,70552,70557,70567,70577,70582,70586,70591,70600,70610,70615,70625,70635,70639,70644,70652,70656,70661,70666,70671,70679,70688,70692,70697,70706,70710,70715,70724,70728,70733,70742,70751,70759,70763,70768,70777,70787,70796,70806,70812,70821,70831,70841,70845,70850,70859,70867,70877,70885,70894,70903,70913,70921,70925,70930,70939],{"__ignoreMap":39},[118,70455,70456],{"class":120,"line":121},[118,70457,70458],{"class":128},"* {\n",[118,70460,70461,70464,70466],{"class":120,"line":40},[118,70462,70463],{"class":51293},"  margin",[118,70465,51430],{"class":128},[118,70467,70468],{"class":233},"0;\n",[118,70470,70471,70474,70476],{"class":120,"line":1183},[118,70472,70473],{"class":233},"  padding",[118,70475,51430],{"class":128},[118,70477,70468],{"class":233},[118,70479,70480],{"class":120,"line":1198},[118,70481,1569],{"class":128},[118,70483,70484],{"class":120,"line":1204},[118,70485,2404],{"emptyLinePlaceholder":45},[118,70487,70488],{"class":120,"line":1218},[118,70489,70490],{"class":233},"a {\n",[118,70492,70493,70496,70498],{"class":120,"line":1224},[118,70494,70495],{"class":51293},"  text-decoration",[118,70497,51430],{"class":128},[118,70499,70500],{"class":233},"none;\n",[118,70502,70503],{"class":120,"line":1315},[118,70504,70505],{"class":233},"  color:#721c24;\n",[118,70507,70508],{"class":120,"line":1321},[118,70509,1569],{"class":128},[118,70511,70512],{"class":120,"line":1333},[118,70513,70514],{"class":233},"h1 {\n",[118,70516,70517,70520,70522],{"class":120,"line":1616},[118,70518,70519],{"class":51293},"  text-align",[118,70521,51430],{"class":128},[118,70523,70524],{"class":233},"center;\n",[118,70526,70527],{"class":120,"line":1621},[118,70528,70529],{"class":233},"  color:#333;\n",[118,70531,70532,70534,70536],{"class":120,"line":1627},[118,70533,70463],{"class":51293},[118,70535,51430],{"class":128},[118,70537,70538],{"class":233},"20px 0;\n",[118,70540,70541],{"class":120,"line":1632},[118,70542,2678],{"class":128},[118,70544,70545],{"class":120,"line":1646},[118,70546,1569],{"class":128},[118,70548,70549],{"class":120,"line":1651},[118,70550,70551],{"class":233},"table {\n",[118,70553,70554],{"class":120,"line":1657},[118,70555,70556],{"class":233},"  margin:0 auto;\n",[118,70558,70559,70562,70564],{"class":120,"line":1678},[118,70560,70561],{"class":51293},"  width",[118,70563,51430],{"class":128},[118,70565,70566],{"class":233},"800px;\n",[118,70568,70569,70572,70574],{"class":120,"line":1683},[118,70570,70571],{"class":51293},"  border-collapse",[118,70573,51430],{"class":128},[118,70575,70576],{"class":233},"collapse;\n",[118,70578,70579],{"class":120,"line":1697},[118,70580,70581],{"class":233},"  color:#004085;\n",[118,70583,70584],{"class":120,"line":1702},[118,70585,1569],{"class":128},[118,70587,70588],{"class":120,"line":1731},[118,70589,70590],{"class":233},"th {\n",[118,70592,70593,70595,70597],{"class":120,"line":1736},[118,70594,70473],{"class":51293},[118,70596,51430],{"class":128},[118,70598,70599],{"class":233},"10px;\n",[118,70601,70602,70605,70607],{"class":120,"line":1753},[118,70603,70604],{"class":51293},"  background",[118,70606,51430],{"class":128},[118,70608,70609],{"class":187},"#cfe5ff;\n",[118,70611,70612],{"class":120,"line":1758},[118,70613,70614],{"class":128},"  \n",[118,70616,70617,70620,70622],{"class":120,"line":1763},[118,70618,70619],{"class":51293},"  font-size",[118,70621,51430],{"class":128},[118,70623,70624],{"class":233},"20px;\n",[118,70626,70627,70630,70632],{"class":120,"line":1768},[118,70628,70629],{"class":51293},"  font-weight",[118,70631,51430],{"class":128},[118,70633,70634],{"class":233},"400;\n",[118,70636,70637],{"class":120,"line":1782},[118,70638,1569],{"class":128},[118,70640,70641],{"class":120,"line":1787},[118,70642,70643],{"class":233},"td,th {\n",[118,70645,70646,70649],{"class":120,"line":2581},[118,70647,70648],{"class":233},"  border:1px solid",[118,70650,70651],{"class":187}," #b8daff;\n",[118,70653,70654],{"class":120,"line":2595},[118,70655,1569],{"class":128},[118,70657,70658],{"class":120,"line":2603},[118,70659,70660],{"class":233},"td {\n",[118,70662,70663],{"class":120,"line":2608},[118,70664,70665],{"class":233},"  padding:10px;\n",[118,70667,70668],{"class":120,"line":2614},[118,70669,70670],{"class":233},"  color:#666;\n",[118,70672,70673,70675,70677],{"class":120,"line":2620},[118,70674,70519],{"class":51293},[118,70676,51430],{"class":128},[118,70678,70524],{"class":233},[118,70680,70681,70683,70685],{"class":120,"line":2625},[118,70682,70619],{"class":51293},[118,70684,51430],{"class":128},[118,70686,70687],{"class":233},"16px;\n",[118,70689,70690],{"class":120,"line":7953},[118,70691,1569],{"class":128},[118,70693,70694],{"class":120,"line":7977},[118,70695,70696],{"class":233},"tbody tr {\n",[118,70698,70699,70701,70703],{"class":120,"line":7982},[118,70700,70604],{"class":51293},[118,70702,51430],{"class":128},[118,70704,70705],{"class":187},"#fff;\n",[118,70707,70708],{"class":120,"line":7988},[118,70709,1569],{"class":128},[118,70711,70712],{"class":120,"line":8015},[118,70713,70714],{"class":233},"tbody tr:hover {\n",[118,70716,70717,70719,70721],{"class":120,"line":8020},[118,70718,70604],{"class":51293},[118,70720,51430],{"class":128},[118,70722,70723],{"class":187},"#e1ecf8;\n",[118,70725,70726],{"class":120,"line":8026},[118,70727,1569],{"class":128},[118,70729,70730],{"class":120,"line":8038},[118,70731,70732],{"class":233},".info {\n",[118,70734,70735,70737,70739],{"class":120,"line":8050},[118,70736,70561],{"class":51293},[118,70738,51430],{"class":128},[118,70740,70741],{"class":233},"900px;\n",[118,70743,70744,70746,70748],{"class":120,"line":8062},[118,70745,70463],{"class":51293},[118,70747,51430],{"class":128},[118,70749,70750],{"class":233},"50px auto;\n",[118,70752,70753,70755,70757],{"class":120,"line":9721},[118,70754,70519],{"class":51293},[118,70756,51430],{"class":128},[118,70758,70524],{"class":233},[118,70760,70761],{"class":120,"line":9746},[118,70762,1569],{"class":128},[118,70764,70765],{"class":120,"line":9769},[118,70766,70767],{"class":233},".info  input, .info select {\n",[118,70769,70770,70772,70774],{"class":120,"line":9793},[118,70771,70561],{"class":51293},[118,70773,51430],{"class":128},[118,70775,70776],{"class":233},"80px;\n",[118,70778,70779,70782,70784],{"class":120,"line":9798},[118,70780,70781],{"class":51293},"  height",[118,70783,51430],{"class":128},[118,70785,70786],{"class":233},"27px;\n",[118,70788,70789,70792,70794],{"class":120,"line":9803},[118,70790,70791],{"class":51293},"  outline",[118,70793,51430],{"class":128},[118,70795,70500],{"class":233},[118,70797,70798,70801,70803],{"class":120,"line":9808},[118,70799,70800],{"class":51293},"  border-radius",[118,70802,51430],{"class":128},[118,70804,70805],{"class":233},"5px;\n",[118,70807,70808,70810],{"class":120,"line":9817},[118,70809,70648],{"class":233},[118,70811,70651],{"class":187},[118,70813,70814,70817,70819],{"class":120,"line":9822},[118,70815,70816],{"class":51293},"  padding-left",[118,70818,51430],{"class":128},[118,70820,70805],{"class":233},[118,70822,70823,70826,70828],{"class":120,"line":9828},[118,70824,70825],{"class":51293},"  box-sizing",[118,70827,51430],{"class":128},[118,70829,70830],{"class":233},"border-box;\n",[118,70832,70833,70836,70838],{"class":120,"line":9849},[118,70834,70835],{"class":51293},"  margin-right",[118,70837,51430],{"class":128},[118,70839,70840],{"class":233},"15px;\n",[118,70842,70843],{"class":120,"line":9855},[118,70844,1569],{"class":128},[118,70846,70847],{"class":120,"line":9869},[118,70848,70849],{"class":233},".info button {\n",[118,70851,70852,70854,70856],{"class":120,"line":9875},[118,70853,70561],{"class":51293},[118,70855,51430],{"class":128},[118,70857,70858],{"class":233},"60px;\n",[118,70860,70861,70863,70865],{"class":120,"line":9902},[118,70862,70781],{"class":51293},[118,70864,51430],{"class":128},[118,70866,70786],{"class":233},[118,70868,70869,70872,70874],{"class":120,"line":9911},[118,70870,70871],{"class":51293},"  background-color",[118,70873,51430],{"class":128},[118,70875,70876],{"class":187},"#004085;\n",[118,70878,70879,70881,70883],{"class":120,"line":9917},[118,70880,70791],{"class":51293},[118,70882,51430],{"class":128},[118,70884,70500],{"class":233},[118,70886,70887,70890,70892],{"class":120,"line":9925},[118,70888,70889],{"class":51293},"  border",[118,70891,51430],{"class":128},[118,70893,70468],{"class":233},[118,70895,70896,70899,70901],{"class":120,"line":9930},[118,70897,70898],{"class":51293},"  color",[118,70900,51430],{"class":128},[118,70902,70705],{"class":187},[118,70904,70905,70908,70910],{"class":120,"line":16609},[118,70906,70907],{"class":51293},"  cursor",[118,70909,51430],{"class":128},[118,70911,70912],{"class":233},"pointer;\n",[118,70914,70915,70917,70919],{"class":120,"line":16615},[118,70916,70800],{"class":51293},[118,70918,51430],{"class":128},[118,70920,70805],{"class":233},[118,70922,70923],{"class":120,"line":16638},[118,70924,1569],{"class":128},[118,70926,70927],{"class":120,"line":16644},[118,70928,70929],{"class":233},".info .age {\n",[118,70931,70932,70934,70936],{"class":120,"line":16667},[118,70933,70561],{"class":51293},[118,70935,51430],{"class":128},[118,70937,70938],{"class":233},"50px;\n",[118,70940,70941],{"class":120,"line":16681},[118,70942,1569],{"class":128},[15,70944,70945],{},"思路：",[15,70947,70948],{},[1466,70949],{"alt":39,"src":70950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[15,70952,70953],{},[1466,70954],{"alt":39,"src":70955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[15,70957,70958],{},[1466,70959],{"alt":39,"src":70960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[89,70962,70964],{"id":70963},"_3315-重绘回流","3.3.15 重绘回流",[15,70966,70967],{},[1466,70968],{"alt":39,"src":70969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[15,70971,70972],{},[1466,70973],{"alt":39,"src":70974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[15,70976,70977],{},[1466,70978],{"alt":39,"src":70979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[60,70981,70983],{"id":70982},"_34-bom","3.4 BOM",[15,70985,70986],{},[1466,70987],{"alt":39,"src":70988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[15,70990,70991],{},"平时写的document省略了window而已，实际上是window.document",[15,70993,70994],{},"函数也是这样，调用的时候实际为window.fn()",[15,70996,70997],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[15,70999,71000],{},"window大部分情况下可以省略",[89,71002,71004],{"id":71003},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[15,71006,71007],{},"只执行一次",[15,71009,71010],{},[1466,71011],{"alt":39,"src":71012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[15,71014,71015],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[15,71017,71018],{},[1466,71019],{"alt":39,"src":71020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[89,71022,71024],{"id":71023},"_342-js执行机制","3.4.2 JS执行机制",[15,71026,71027],{},[1466,71028],{"alt":39,"src":71029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[15,71031,71032],{},"两个的结果都是1111 3333 2222",[15,71034,71035],{},[1466,71036],{"alt":39,"src":71037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[15,71039,71040],{},[1466,71041],{"alt":39,"src":71042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[15,71044,71045],{},[1466,71046],{"alt":39,"src":71047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[15,71049,71050],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[15,71052,71053],{},"工作流程：",[15,71055,71056],{},[1466,71057],{"alt":39,"src":71058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[15,71060,71061],{},[1466,71062],{"alt":39,"src":71063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[15,71065,71066],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[15,71068,71069],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[89,71071,71073],{"id":71072},"_343-location对象","3.4.3 location对象",[15,71075,71076],{},"location对象属于window这个全局对象下的，可以 省略window",[15,71078,71079],{},[1466,71080],{"alt":39,"src":71081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[15,71083,71084],{},"href可以跳转页面",[72,71086,71087],{},[75,71088,71089],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[15,71091,71092],{},"search得到提交信息之后网站后边的地址",[15,71094,71095],{},[1466,71096],{"alt":39,"src":71097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[15,71099,71100],{},[1466,71101],{"alt":39,"src":71102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[72,71104,71105],{"start":40},[75,71106,71107],{},"hash:这个获取单页面应用#后边的地址",[15,71109,71110],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[15,71112,71113],{},[1466,71114],{"alt":39,"src":71115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[109,71117,71119],{"className":53060,"code":71118,"language":53062,"meta":39,"style":39},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[115,71120,71121,71141,71161],{"__ignoreMap":39},[118,71122,71123,71125,71127,71129,71131,71134,71137,71139],{"class":120,"line":121},[118,71124,52137],{"class":128},[118,71126,21],{"class":51293},[118,71128,61050],{"class":1967},[118,71130,174],{"class":128},[118,71132,71133],{"class":233},"\"#\u002Fmy\"",[118,71135,71136],{"class":128},">我的\u003C\u002F",[118,71138,21],{"class":51293},[118,71140,51300],{"class":128},[118,71142,71143,71145,71147,71149,71151,71154,71157,71159],{"class":120,"line":40},[118,71144,52137],{"class":128},[118,71146,21],{"class":51293},[118,71148,61050],{"class":1967},[118,71150,174],{"class":128},[118,71152,71153],{"class":233},"\"#\u002Ffriend\"",[118,71155,71156],{"class":128},">关注\u003C\u002F",[118,71158,21],{"class":51293},[118,71160,51300],{"class":128},[118,71162,71163,71165,71167,71169,71171,71174,71177,71179],{"class":120,"line":1183},[118,71164,52137],{"class":128},[118,71166,21],{"class":51293},[118,71168,61050],{"class":1967},[118,71170,174],{"class":128},[118,71172,71173],{"class":233},"\"#\u002Fdownload\"",[118,71175,71176],{"class":128},">下载\u003C\u002F",[118,71178,21],{"class":51293},[118,71180,51300],{"class":128},[15,71182,71183],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[72,71185,71186],{"start":1183},[75,71187,71188,71189,71191,71192,71194],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53709,71190],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53709,71193],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[89,71196,71198],{"id":71197},"_345-navigator对象","3.4.5 navigator对象",[15,71200,71201],{},[1466,71202],{"alt":39,"src":71203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[109,71205,71209],{"className":71206,"code":71207,"language":71208,"meta":39,"style":39},"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",[115,71210,71211,71216,71227,71239,71244,71295,71336,71341,71354,71366,71371],{"__ignoreMap":39},[118,71212,71213],{"class":120,"line":121},[118,71214,71215],{"class":187},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[118,71217,71218,71220,71222,71224],{"class":120,"line":40},[118,71219,355],{"class":124},[118,71221,129],{"class":128},[118,71223,54442],{"class":124},[118,71225,71226],{"class":128}," () { \n",[118,71228,71229,71231,71234,71236],{"class":120,"line":1183},[118,71230,6797],{"class":124},[118,71232,71233],{"class":177}," userAgent",[118,71235,13569],{"class":124},[118,71237,71238],{"class":128}," navigator.userAgent \n",[118,71240,71241],{"class":120,"line":1198},[118,71242,71243],{"class":187},"\u002F\u002F 验证是否为Android或iPhone \n",[118,71245,71246,71248,71251,71253,71256,71259,71261,71263,71266,71268,71271,71275,71277,71279,71281,71284,71286,71288,71290,71292],{"class":120,"line":1204},[118,71247,6797],{"class":124},[118,71249,71250],{"class":177}," android",[118,71252,13569],{"class":124},[118,71254,71255],{"class":128}," userAgent.",[118,71257,71258],{"class":1967},"match",[118,71260,129],{"class":128},[118,71262,712],{"class":233},[118,71264,71265],{"class":47970},"(Android);",[118,71267,1114],{"class":124},[118,71269,71270],{"class":177},"[\\s",[118,71272,71274],{"class":71273},"snhLl","\\\u002F",[118,71276,1068],{"class":177},[118,71278,609],{"class":124},[118,71280,129],{"class":47970},[118,71282,71283],{"class":177},"[\\d.]",[118,71285,609],{"class":124},[118,71287,557],{"class":47970},[118,71289,1114],{"class":124},[118,71291,712],{"class":233},[118,71293,71294],{"class":128},") \n",[118,71296,71297,71299,71302,71304,71306,71308,71310,71312,71315,71318,71321,71323,71325,71328,71330,71332,71334],{"class":120,"line":1218},[118,71298,6797],{"class":124},[118,71300,71301],{"class":177}," iphone",[118,71303,13569],{"class":124},[118,71305,71255],{"class":128},[118,71307,71258],{"class":1967},[118,71309,129],{"class":128},[118,71311,712],{"class":233},[118,71313,71314],{"class":47970},"(iPhone",[118,71316,71317],{"class":177},"\\s",[118,71319,71320],{"class":47970},"OS)",[118,71322,71317],{"class":177},[118,71324,129],{"class":47970},[118,71326,71327],{"class":177},"[\\d_]",[118,71329,609],{"class":124},[118,71331,557],{"class":47970},[118,71333,712],{"class":233},[118,71335,71294],{"class":128},[118,71337,71338],{"class":120,"line":1224},[118,71339,71340],{"class":187},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[118,71342,71343,71345,71348,71351],{"class":120,"line":1315},[118,71344,1535],{"class":124},[118,71346,71347],{"class":128}," (android ",[118,71349,71350],{"class":124},"||",[118,71352,71353],{"class":128}," iphone) { \n",[118,71355,71356,71359,71361,71364],{"class":120,"line":1321},[118,71357,71358],{"class":128},"location.href ",[118,71360,174],{"class":124},[118,71362,71363],{"class":233}," 'http:\u002F\u002Fm.itcast.cn'",[118,71365,2678],{"class":128},[118,71367,71368],{"class":120,"line":1333},[118,71369,71370],{"class":128},"} \n",[118,71372,71373],{"class":120,"line":1616},[118,71374,71375],{"class":128},"})()\n",[89,71377,71379],{"id":71378},"_346-histroy对象","3.4.6 histroy对象",[15,71381,71382],{},[1466,71383],{"alt":39,"src":71384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[15,71386,71387],{},"浏览器地址的前进与后退!!!",[15,71389,71390],{},"history.back() 等效于 history.go(-1)",[15,71392,71393],{},"history.forward() 等效于 history.go(1)",[60,71395,71397],{"id":71396},"_35-本地存储","3.5 本地存储",[72,71399,71400,71403,71406],{},[75,71401,71402],{},"数据存储在用户浏览器中",[75,71404,71405],{},"设置、读取方便、甚至页面刷新不丢失数据",[75,71407,71408],{},"容量较大，sessionStorage和localStorage约 5M 左右",[89,71410,71412],{"id":71411},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[15,71414,71415],{},"只能存储字符串",[15,71417,71418],{},[1466,71419],{"alt":39,"src":71420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[15,71422,71423],{},[1466,71424],{"alt":39,"src":71425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[15,71427,71428],{},"键值对要加引号,不然就会当变量来看了",[15,71430,71431],{},"localStorage.setItem('uname', 'pink')",[15,71433,71434],{},"刷新之后信息不再丢失",[15,71436,71437],{},"操作key,value会跟着变",[15,71439,71440],{},"删除只删除键就可以,即名字",[15,71442,71431],{},[15,71444,71445],{},"改:",[15,71447,71448],{},"localStorage.setItem('uname','red')",[15,71450,71451],{},"有这个键就是改,没有这个键就是改",[15,71453,71454],{},[1466,71455],{"alt":39,"src":71456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[15,71458,71459],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[15,71461,71462],{},[1466,71463],{"alt":39,"src":71464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[15,71466,71467],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[89,71469,71471],{"id":71470},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[15,71473,71474],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[15,71476,71477],{},"特性:",[72,71479,71480,71483,71486,71489],{},[75,71481,71482],{},"生命周期为关闭浏览器窗口",[75,71484,71485],{},"在同一个窗口(页面)下数据可以共享",[75,71487,71488],{},"以键值对的形式存储使用",[75,71490,71491],{},"用法跟localStorage 基本相同",[89,71493,71495],{"id":71494},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[15,71497,71498],{},"本地只能存储字符串,无法直接存储复杂数据类型",[109,71500,71502],{"className":53060,"code":71501,"language":53062,"meta":39,"style":39},"\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",[115,71503,71504,71512,71517,71522,71527,71532,71536,71541,71546],{"__ignoreMap":39},[118,71505,71506,71508,71510],{"class":120,"line":121},[118,71507,1038],{"class":128},[118,71509,51806],{"class":51293},[118,71511,51300],{"class":128},[118,71513,71514],{"class":120,"line":40},[118,71515,71516],{"class":128},"    const obj = {\n",[118,71518,71519],{"class":120,"line":1183},[118,71520,71521],{"class":128},"      uname: 'pink老师',\n",[118,71523,71524],{"class":120,"line":1198},[118,71525,71526],{"class":128},"      age: 18,\n",[118,71528,71529],{"class":120,"line":1204},[118,71530,71531],{"class":128},"      gender: '女'\n",[118,71533,71534],{"class":120,"line":1218},[118,71535,2191],{"class":128},[118,71537,71538],{"class":120,"line":1224},[118,71539,71540],{"class":128},"    \u002F\u002F 存储复杂数据类型\n",[118,71542,71543],{"class":120,"line":1315},[118,71544,71545],{"class":128},"    localStorage.setItem('obj', obj)\n",[118,71547,71548,71550,71552],{"class":120,"line":1321},[118,71549,52410],{"class":128},[118,71551,51806],{"class":51293},[118,71553,51300],{"class":128},[15,71555,71556],{},[1466,71557],{"alt":39,"src":71558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[15,71560,71561],{},"如果获取一下数据:",[15,71563,71564],{},"log(localStorage.getItem('obj'))",[15,71566,71567],{},[1466,71568],{"alt":39,"src":71569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[15,71571,71572],{},"发现直接存对象是使用不了的!!!",[22003,71574,71576],{"id":71575},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[15,71578,71579],{},[1466,71580],{"alt":39,"src":71581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[109,71583,71585],{"className":50626,"code":71584,"language":50628,"meta":39,"style":39},"\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",[115,71586,71587,71595,71605,71615,71624,71632,71636,71640,71666,71685,71693,71697,71702,71707],{"__ignoreMap":39},[118,71588,71589,71591,71593],{"class":120,"line":121},[118,71590,1038],{"class":128},[118,71592,51806],{"class":51293},[118,71594,51300],{"class":128},[118,71596,71597,71599,71601,71603],{"class":120,"line":40},[118,71598,11226],{"class":124},[118,71600,69964],{"class":177},[118,71602,13569],{"class":124},[118,71604,15577],{"class":128},[118,71606,71607,71610,71613],{"class":120,"line":1183},[118,71608,71609],{"class":128},"      uname: ",[118,71611,71612],{"class":233},"'pink老师'",[118,71614,31459],{"class":128},[118,71616,71617,71620,71622],{"class":120,"line":1198},[118,71618,71619],{"class":128},"      age: ",[118,71621,778],{"class":177},[118,71623,31459],{"class":128},[118,71625,71626,71629],{"class":120,"line":1204},[118,71627,71628],{"class":128},"      gender: ",[118,71630,71631],{"class":233},"'女'\n",[118,71633,71634],{"class":120,"line":1218},[118,71635,2191],{"class":128},[118,71637,71638],{"class":120,"line":1224},[118,71639,71540],{"class":187},[118,71641,71642,71645,71648,71650,71653,71655,71658,71660,71663],{"class":120,"line":1315},[118,71643,71644],{"class":128},"  localStorage.",[118,71646,71647],{"class":1967},"setItem",[118,71649,129],{"class":128},[118,71651,71652],{"class":233},"'obj'",[118,71654,12440],{"class":128},[118,71656,71657],{"class":177},"JSON",[118,71659,686],{"class":128},[118,71661,71662],{"class":1967},"stringify",[118,71664,71665],{"class":128},"(obj))\n",[118,71667,71668,71671,71673,71676,71679,71681,71683],{"class":120,"line":1321},[118,71669,71670],{"class":128},"  console.",[118,71672,58240],{"class":1967},[118,71674,71675],{"class":128},"(localStorage.",[118,71677,71678],{"class":1967},"getItem",[118,71680,129],{"class":128},[118,71682,71652],{"class":233},[118,71684,30490],{"class":128},[118,71686,71687,71689,71691],{"class":120,"line":1333},[118,71688,52410],{"class":128},[118,71690,51806],{"class":51293},[118,71692,51300],{"class":128},[118,71694,71695],{"class":120,"line":1616},[118,71696,70614],{"class":128},[118,71698,71699],{"class":120,"line":1621},[118,71700,71701],{"class":128},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[118,71703,71704],{"class":120,"line":1627},[118,71705,71706],{"class":128},"  类型是字符串的\n",[118,71708,71709],{"class":120,"line":1632},[118,71710,71711],{"class":128},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22003,71713,71715],{"id":71714},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[15,71717,71718],{},[1466,71719],{"alt":39,"src":71720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[15,71722,71723],{},[1466,71724],{"alt":39,"src":71725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[109,71727,71729],{"className":53060,"code":71728,"language":53062,"meta":39,"style":39},"  \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",[115,71730,71731,71739,71743,71747,71751,71755,71759,71764,71769,71774,71779,71784,71789,71794,71799],{"__ignoreMap":39},[118,71732,71733,71735,71737],{"class":120,"line":121},[118,71734,52137],{"class":128},[118,71736,51806],{"class":51293},[118,71738,51300],{"class":128},[118,71740,71741],{"class":120,"line":40},[118,71742,71516],{"class":128},[118,71744,71745],{"class":120,"line":1183},[118,71746,71521],{"class":128},[118,71748,71749],{"class":120,"line":1198},[118,71750,71526],{"class":128},[118,71752,71753],{"class":120,"line":1204},[118,71754,71531],{"class":128},[118,71756,71757],{"class":120,"line":1218},[118,71758,2191],{"class":128},[118,71760,71761],{"class":120,"line":1224},[118,71762,71763],{"class":128},"    \u002F\u002F 1.存储复杂数据类型\n",[118,71765,71766],{"class":120,"line":1315},[118,71767,71768],{"class":128},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[118,71770,71771],{"class":120,"line":1321},[118,71772,71773],{"class":128},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[118,71775,71776],{"class":120,"line":1333},[118,71777,71778],{"class":128},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[118,71780,71781],{"class":120,"line":1616},[118,71782,71783],{"class":128},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[118,71785,71786],{"class":120,"line":1621},[118,71787,71788],{"class":128},"    \u002F\u002F 取\n",[118,71790,71791],{"class":120,"line":1627},[118,71792,71793],{"class":128},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[118,71795,71796],{"class":120,"line":1632},[118,71797,71798],{"class":128},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[118,71800,71801,71803,71805],{"class":120,"line":1646},[118,71802,52410],{"class":128},[118,71804,51806],{"class":51293},[118,71806,51300],{"class":128},[15,71808,71809],{},[1466,71810],{"alt":39,"src":71811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[89,71813,71815],{"id":71814},"_356-数组map方法","3.5.6 数组map方法",[15,71817,71818],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[15,71820,71821],{},[1466,71822],{"alt":39,"src":71823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[15,71825,71826],{},[1466,71827],{"alt":39,"src":71828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[15,71830,71831,71834],{},[278,71832,71833],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[15,71836,71837],{},"map有返回值，但是forEach没有返回值",[15,71839,71840],{},"map是个方法。用的时候要加 ()",[15,71842,71843],{},"map返回的是一个数组",[89,71845,71847],{"id":71846},"_357-数组中join方法","3.5.7 数组中join方法",[15,71849,71850],{},[1466,71851],{"alt":39,"src":71852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[15,71854,71855],{},"类似于python中拼接字符串一样！",[72,71857,71858,71861,71864],{},[75,71859,71860],{},"小括号为空则逗号分开",[75,71862,71863],{},"小括号为空字符串 ''，则元素之间没有分隔符",[75,71865,71866],{},"小括号用啥符号就用进行分割",[89,71868,71870],{"id":71869},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[72,71872,71873,71876,71879,71882,71885],{},[75,71874,71875],{},"记住本地时间获取快速方式：new Date().toDateString()",[75,71877,71878],{},"尽量减少DOM操作，用好map+join的渲染方式",[75,71880,71881],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[75,71883,71884],{},"return可以实现函数的结束",[75,71886,71887],{},"禁止跳转是 preventDefault() 不要忘记",[109,71889,71891],{"className":50626,"code":71890,"language":50628,"meta":39,"style":39},"\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",[115,71892,71893,71903,71917,71921,71929,71943,71963,71975,71983,71989,71999,72009,72013,72017,72023,72033,72045,72049,72053,72060,72072,72086,72096,72100,72104,72111,72118,72125,72137,72149,72159,72171,72175,72179,72186,72193,72205,72217,72227,72239,72269,72273,72277,72284,72296,72308,72332,72342,72352,72356,72360,72368,72379,72391,72403,72415,72432,72444,72456,72460,72464,72471,72483,72495,72507,72518,72536,72549,72561,72585,72596,72600,72604,72612,72622,72626,72630,72636,72648,72659,72669,72673,72677,72683,72705,72709,72713,72719,72725,72737,72747,72759,72789,72802,72819,72823,72827,72838,72860,72870,72874,72878,72891,72901,72913,72925,72937,72949,72959,72969,72979,72990,73003,73007,73015,73023,73027,73035,73048,73068,73101,73134,73167,73193,73211,73229,73237,73263,73281,73299,73317,73335,73353,73361,73369,73387,73395,73424,73432,73440,73448,73461,73473,73485,73497,73509,73521,73534,73546,73554,73562,73570,73575,73580,73584,73588,73592,73596,73600,73604,73609,73614,73619,73624,73632,73640,73648,73653,73658,73663,73668,73673,73678,73683,73688,73693,73698,73703,73708,73713,73718,73722,73727,73732,73742,73751,73755,73760,73769,73785,73827,73867,73906,73971,73979,73983,73988,74006,74014,74019,74024,74054,74060,74065,74078,74090,74102,74114,74126,74138,74150,74154,74164,74168,74173,74178,74182,74191,74195,74200,74205,74224,74229,74249,74253,74258,74262,74267,74285,74303,74321,74340,74359,74378,74383,74389,74410,74416,74425,74431,74437,74443,74470,74483,74488,74498,74504,74510,74516,74522,74527,74533,74539,74545,74551,74584,74589,74594,74599,74604,74610,74616,74622,74633,74638,74644,74651,74665,74671,74695,74700,74705,74711,74717,74738,74744,74757,74763,74769,74775,74781,74786,74792,74798,74804,74822,74836,74842,74850,74856,74878,74883,74888,74893,74898,74903,74912,74921,74926],{"__ignoreMap":39},[118,71894,71895,71897,71899,71901],{"class":120,"line":121},[118,71896,51290],{"class":128},[118,71898,51294],{"class":51293},[118,71900,51297],{"class":1967},[118,71902,51300],{"class":128},[118,71904,71905,71907,71909,71911,71913,71915],{"class":120,"line":40},[118,71906,1038],{"class":128},[118,71908,50628],{"class":51293},[118,71910,51309],{"class":1967},[118,71912,174],{"class":128},[118,71914,51314],{"class":233},[118,71916,51300],{"class":128},[118,71918,71919],{"class":120,"line":1183},[118,71920,2404],{"emptyLinePlaceholder":45},[118,71922,71923,71925,71927],{"class":120,"line":1198},[118,71924,1038],{"class":128},[118,71926,51327],{"class":51293},[118,71928,51300],{"class":128},[118,71930,71931,71933,71935,71937,71939,71941],{"class":120,"line":1204},[118,71932,52137],{"class":128},[118,71934,51337],{"class":51293},[118,71936,51340],{"class":1967},[118,71938,174],{"class":128},[118,71940,51345],{"class":233},[118,71942,51300],{"class":128},[118,71944,71945,71947,71949,71951,71953,71955,71957,71959,71961],{"class":120,"line":1218},[118,71946,52137],{"class":128},[118,71948,51337],{"class":51293},[118,71950,14925],{"class":1967},[118,71952,174],{"class":128},[118,71954,51384],{"class":233},[118,71956,51364],{"class":1967},[118,71958,174],{"class":128},[118,71960,51391],{"class":233},[118,71962,51300],{"class":128},[118,71964,71965,71967,71969,71971,71973],{"class":120,"line":1224},[118,71966,52137],{"class":128},[118,71968,51400],{"class":51293},[118,71970,51403],{"class":128},[118,71972,51400],{"class":51293},[118,71974,51300],{"class":128},[118,71976,71977,71979,71981],{"class":120,"line":1315},[118,71978,52137],{"class":128},[118,71980,5131],{"class":51293},[118,71982,51300],{"class":128},[118,71984,71985,71987],{"class":120,"line":1321},[118,71986,6408],{"class":51293},[118,71988,15577],{"class":128},[118,71990,71991,71993,71995,71997],{"class":120,"line":1333},[118,71992,54688],{"class":177},[118,71994,51430],{"class":128},[118,71996,320],{"class":177},[118,71998,1294],{"class":128},[118,72000,72001,72003,72005,72007],{"class":120,"line":1616},[118,72002,54699],{"class":177},[118,72004,51430],{"class":128},[118,72006,320],{"class":177},[118,72008,1294],{"class":128},[118,72010,72011],{"class":120,"line":1621},[118,72012,2191],{"class":128},[118,72014,72015],{"class":120,"line":1627},[118,72016,2404],{"emptyLinePlaceholder":45},[118,72018,72019,72021],{"class":120,"line":1632},[118,72020,57272],{"class":51293},[118,72022,15577],{"class":128},[118,72024,72025,72027,72029,72031],{"class":120,"line":1646},[118,72026,57279],{"class":177},[118,72028,51430],{"class":128},[118,72030,51585],{"class":177},[118,72032,1294],{"class":128},[118,72034,72035,72037,72039,72041,72043],{"class":120,"line":1651},[118,72036,62070],{"class":177},[118,72038,51430],{"class":128},[118,72040,828],{"class":177},[118,72042,51485],{"class":124},[118,72044,1294],{"class":128},[118,72046,72047],{"class":120,"line":1657},[118,72048,2191],{"class":128},[118,72050,72051],{"class":120,"line":1678},[118,72052,2404],{"emptyLinePlaceholder":45},[118,72054,72055,72058],{"class":120,"line":1683},[118,72056,72057],{"class":1967},"    .info",[118,72059,15577],{"class":128},[118,72061,72062,72064,72066,72068,72070],{"class":120,"line":1697},[118,72063,54764],{"class":177},[118,72065,51430],{"class":128},[118,72067,51482],{"class":177},[118,72069,51485],{"class":124},[118,72071,1294],{"class":128},[118,72073,72074,72076,72078,72080,72082,72084],{"class":120,"line":1702},[118,72075,54699],{"class":177},[118,72077,51430],{"class":128},[118,72079,574],{"class":177},[118,72081,51485],{"class":124},[118,72083,51549],{"class":177},[118,72085,1294],{"class":128},[118,72087,72088,72090,72092,72094],{"class":120,"line":1731},[118,72089,57279],{"class":177},[118,72091,51430],{"class":128},[118,72093,51585],{"class":177},[118,72095,1294],{"class":128},[118,72097,72098],{"class":120,"line":1736},[118,72099,2191],{"class":128},[118,72101,72102],{"class":120,"line":1753},[118,72103,2404],{"emptyLinePlaceholder":45},[118,72105,72106,72109],{"class":120,"line":1758},[118,72107,72108],{"class":1967},"    .uname",[118,72110,31459],{"class":128},[118,72112,72113,72116],{"class":120,"line":1763},[118,72114,72115],{"class":1967},"    .age",[118,72117,31459],{"class":128},[118,72119,72120,72123],{"class":120,"line":1768},[118,72121,72122],{"class":1967},"    .salary",[118,72124,15577],{"class":128},[118,72126,72127,72129,72131,72133,72135],{"class":120,"line":1782},[118,72128,54764],{"class":177},[118,72130,51430],{"class":128},[118,72132,439],{"class":177},[118,72134,51485],{"class":124},[118,72136,1294],{"class":128},[118,72138,72139,72141,72143,72145,72147],{"class":120,"line":1787},[118,72140,54778],{"class":177},[118,72142,51430],{"class":128},[118,72144,828],{"class":177},[118,72146,51485],{"class":124},[118,72148,1294],{"class":128},[118,72150,72151,72153,72155,72157],{"class":120,"line":2581},[118,72152,61773],{"class":177},[118,72154,51430],{"class":128},[118,72156,54730],{"class":177},[118,72158,1294],{"class":128},[118,72160,72161,72163,72165,72167,72169],{"class":120,"line":2595},[118,72162,61743],{"class":177},[118,72164,51430],{"class":128},[118,72166,703],{"class":177},[118,72168,51485],{"class":124},[118,72170,1294],{"class":128},[118,72172,72173],{"class":120,"line":2603},[118,72174,2191],{"class":128},[118,72176,72177],{"class":120,"line":2608},[118,72178,2404],{"emptyLinePlaceholder":45},[118,72180,72181,72184],{"class":120,"line":2614},[118,72182,72183],{"class":1967},"    .gender",[118,72185,31459],{"class":128},[118,72187,72188,72191],{"class":120,"line":2620},[118,72189,72190],{"class":1967},"    .city",[118,72192,15577],{"class":128},[118,72194,72195,72197,72199,72201,72203],{"class":120,"line":2625},[118,72196,54764],{"class":177},[118,72198,51430],{"class":128},[118,72200,439],{"class":177},[118,72202,51485],{"class":124},[118,72204,1294],{"class":128},[118,72206,72207,72209,72211,72213,72215],{"class":120,"line":7953},[118,72208,54778],{"class":177},[118,72210,51430],{"class":128},[118,72212,953],{"class":177},[118,72214,51485],{"class":124},[118,72216,1294],{"class":128},[118,72218,72219,72221,72223,72225],{"class":120,"line":7977},[118,72220,61773],{"class":177},[118,72222,51430],{"class":128},[118,72224,54730],{"class":177},[118,72226,1294],{"class":128},[118,72228,72229,72231,72233,72235,72237],{"class":120,"line":7982},[118,72230,61743],{"class":177},[118,72232,51430],{"class":128},[118,72234,703],{"class":177},[118,72236,51485],{"class":124},[118,72238,1294],{"class":128},[118,72240,72241,72243,72245,72247,72249,72251,72254,72256,72258,72260,72263,72265,72267],{"class":120,"line":7988},[118,72242,61970],{"class":177},[118,72244,51430],{"class":128},[118,72246,346],{"class":177},[118,72248,51485],{"class":124},[118,72250,51514],{"class":177},[118,72252,72253],{"class":177}," rgb",[118,72255,129],{"class":128},[118,72257,1726],{"class":177},[118,72259,12440],{"class":128},[118,72261,72262],{"class":177},"197",[118,72264,12440],{"class":128},[118,72266,72262],{"class":177},[118,72268,2723],{"class":128},[118,72270,72271],{"class":120,"line":8015},[118,72272,2191],{"class":128},[118,72274,72275],{"class":120,"line":8020},[118,72276,2404],{"emptyLinePlaceholder":45},[118,72278,72279,72282],{"class":120,"line":8026},[118,72280,72281],{"class":51293},"    button",[118,72283,15577],{"class":128},[118,72285,72286,72288,72290,72292,72294],{"class":120,"line":8038},[118,72287,54778],{"class":177},[118,72289,51430],{"class":128},[118,72291,953],{"class":177},[118,72293,51485],{"class":124},[118,72295,1294],{"class":128},[118,72297,72298,72300,72302,72304,72306],{"class":120,"line":8050},[118,72299,54764],{"class":177},[118,72301,51430],{"class":128},[118,72303,612],{"class":177},[118,72305,51485],{"class":124},[118,72307,1294],{"class":128},[118,72309,72310,72312,72314,72317,72319,72321,72323,72326,72328,72330],{"class":120,"line":8062},[118,72311,54877],{"class":177},[118,72313,51430],{"class":128},[118,72315,72316],{"class":177},"rgb",[118,72318,129],{"class":128},[118,72320,1097],{"class":177},[118,72322,12440],{"class":128},[118,72324,72325],{"class":177},"187",[118,72327,12440],{"class":128},[118,72329,427],{"class":177},[118,72331,2723],{"class":128},[118,72333,72334,72336,72338,72340],{"class":120,"line":9721},[118,72335,57409],{"class":177},[118,72337,51430],{"class":128},[118,72339,60835],{"class":177},[118,72341,1294],{"class":128},[118,72343,72344,72346,72348,72350],{"class":120,"line":9746},[118,72345,61970],{"class":177},[118,72347,51430],{"class":128},[118,72349,320],{"class":177},[118,72351,1294],{"class":128},[118,72353,72354],{"class":120,"line":9769},[118,72355,2191],{"class":128},[118,72357,72358],{"class":120,"line":9793},[118,72359,2404],{"emptyLinePlaceholder":45},[118,72361,72362,72364,72366],{"class":120,"line":9798},[118,72363,72281],{"class":51293},[118,72365,51681],{"class":51293},[118,72367,15577],{"class":128},[118,72369,72370,72372,72374,72377],{"class":120,"line":9803},[118,72371,55002],{"class":177},[118,72373,51430],{"class":128},[118,72375,72376],{"class":177},"inline-block",[118,72378,1294],{"class":128},[118,72380,72381,72383,72385,72387,72389],{"class":120,"line":9808},[118,72382,54764],{"class":177},[118,72384,51430],{"class":128},[118,72386,574],{"class":177},[118,72388,51485],{"class":124},[118,72390,1294],{"class":128},[118,72392,72393,72395,72397,72399,72401],{"class":120,"line":9817},[118,72394,54778],{"class":177},[118,72396,51430],{"class":128},[118,72398,574],{"class":177},[118,72400,51485],{"class":124},[118,72402,1294],{"class":128},[118,72404,72405,72407,72409,72411,72413],{"class":120,"line":9822},[118,72406,57352],{"class":177},[118,72408,51430],{"class":128},[118,72410,600],{"class":177},[118,72412,51485],{"class":124},[118,72414,1294],{"class":128},[118,72416,72417,72419,72421,72423,72425,72427,72430],{"class":120,"line":9828},[118,72418,61970],{"class":177},[118,72420,51430],{"class":128},[118,72422,346],{"class":177},[118,72424,51485],{"class":124},[118,72426,51514],{"class":177},[118,72428,72429],{"class":177}," #fff",[118,72431,1294],{"class":128},[118,72433,72434,72436,72438,72440,72442],{"class":120,"line":9849},[118,72435,55127],{"class":177},[118,72437,51430],{"class":128},[118,72439,447],{"class":177},[118,72441,51485],{"class":124},[118,72443,1294],{"class":128},[118,72445,72446,72448,72450,72452,72454],{"class":120,"line":9855},[118,72447,61743],{"class":177},[118,72449,51430],{"class":128},[118,72451,346],{"class":177},[118,72453,51485],{"class":124},[118,72455,1294],{"class":128},[118,72457,72458],{"class":120,"line":9869},[118,72459,2191],{"class":128},[118,72461,72462],{"class":120,"line":9875},[118,72463,2404],{"emptyLinePlaceholder":45},[118,72465,72466,72469],{"class":120,"line":9902},[118,72467,72468],{"class":1967},"    .total",[118,72470,15577],{"class":128},[118,72472,72473,72475,72477,72479,72481],{"class":120,"line":9911},[118,72474,54764],{"class":177},[118,72476,51430],{"class":128},[118,72478,61622],{"class":177},[118,72480,51485],{"class":124},[118,72482,1294],{"class":128},[118,72484,72485,72487,72489,72491,72493],{"class":120,"line":9917},[118,72486,54778],{"class":177},[118,72488,51430],{"class":128},[118,72490,529],{"class":177},[118,72492,51485],{"class":124},[118,72494,1294],{"class":128},[118,72496,72497,72499,72501,72503,72505],{"class":120,"line":9925},[118,72498,57352],{"class":177},[118,72500,51430],{"class":128},[118,72502,529],{"class":177},[118,72504,51485],{"class":124},[118,72506,1294],{"class":128},[118,72508,72509,72511,72513,72516],{"class":120,"line":9930},[118,72510,57279],{"class":177},[118,72512,51430],{"class":128},[118,72514,72515],{"class":177},"right",[118,72517,1294],{"class":128},[118,72519,72520,72522,72524,72526,72528,72530,72532,72534],{"class":120,"line":16609},[118,72521,54699],{"class":177},[118,72523,51430],{"class":128},[118,72525,529],{"class":177},[118,72527,51485],{"class":124},[118,72529,51549],{"class":177},[118,72531,2042],{"class":177},[118,72533,51485],{"class":124},[118,72535,1294],{"class":128},[118,72537,72538,72541,72543,72545,72547],{"class":120,"line":16615},[118,72539,72540],{"class":177},"      padding-right",[118,72542,51430],{"class":128},[118,72544,574],{"class":177},[118,72546,51485],{"class":124},[118,72548,1294],{"class":128},[118,72550,72551,72553,72555,72557,72559],{"class":120,"line":16638},[118,72552,54915],{"class":177},[118,72554,51430],{"class":128},[118,72556,651],{"class":177},[118,72558,51485],{"class":124},[118,72560,1294],{"class":128},[118,72562,72563,72565,72567,72569,72571,72574,72576,72579,72581,72583],{"class":120,"line":16644},[118,72564,54877],{"class":177},[118,72566,51430],{"class":128},[118,72568,72316],{"class":177},[118,72570,129],{"class":128},[118,72572,72573],{"class":177},"237",[118,72575,12440],{"class":128},[118,72577,72578],{"class":177},"235",[118,72580,12440],{"class":128},[118,72582,72578],{"class":177},[118,72584,2723],{"class":128},[118,72586,72587,72590,72592,72594],{"class":120,"line":16667},[118,72588,72589],{"class":177},"      box-sizing",[118,72591,51430],{"class":128},[118,72593,60498],{"class":177},[118,72595,1294],{"class":128},[118,72597,72598],{"class":120,"line":16681},[118,72599,2191],{"class":128},[118,72601,72602],{"class":120,"line":16701},[118,72603,2404],{"emptyLinePlaceholder":45},[118,72605,72606,72608,72610],{"class":120,"line":16707},[118,72607,72468],{"class":1967},[118,72609,51681],{"class":51293},[118,72611,15577],{"class":128},[118,72613,72614,72616,72618,72620],{"class":120,"line":16718},[118,72615,57409],{"class":177},[118,72617,51430],{"class":128},[118,72619,57414],{"class":177},[118,72621,1294],{"class":128},[118,72623,72624],{"class":120,"line":16741},[118,72625,2191],{"class":128},[118,72627,72628],{"class":120,"line":16763},[118,72629,2404],{"emptyLinePlaceholder":45},[118,72631,72632,72634],{"class":120,"line":16768},[118,72633,65016],{"class":51293},[118,72635,15577],{"class":128},[118,72637,72638,72640,72642,72644,72646],{"class":120,"line":16774},[118,72639,54764],{"class":177},[118,72641,51430],{"class":128},[118,72643,61622],{"class":177},[118,72645,51485],{"class":124},[118,72647,1294],{"class":128},[118,72649,72650,72652,72654,72657],{"class":120,"line":16788},[118,72651,54699],{"class":177},[118,72653,51430],{"class":128},[118,72655,72656],{"class":177},"auto",[118,72658,1294],{"class":128},[118,72660,72661,72663,72665,72667],{"class":120,"line":16801},[118,72662,65023],{"class":177},[118,72664,51430],{"class":128},[118,72666,65028],{"class":177},[118,72668,1294],{"class":128},[118,72670,72671],{"class":120,"line":16806},[118,72672,2191],{"class":128},[118,72674,72675],{"class":120,"line":16820},[118,72676,2404],{"emptyLinePlaceholder":45},[118,72678,72679,72681],{"class":120,"line":16825},[118,72680,65108],{"class":51293},[118,72682,15577],{"class":128},[118,72684,72685,72687,72689,72691,72693,72695,72697,72699,72701,72703],{"class":120,"line":16831},[118,72686,54877],{"class":177},[118,72688,51430],{"class":128},[118,72690,72316],{"class":177},[118,72692,129],{"class":128},[118,72694,72573],{"class":177},[118,72696,12440],{"class":128},[118,72698,72578],{"class":177},[118,72700,12440],{"class":128},[118,72702,72578],{"class":177},[118,72704,2723],{"class":128},[118,72706,72707],{"class":120,"line":16836},[118,72708,2191],{"class":128},[118,72710,72711],{"class":120,"line":16850},[118,72712,2404],{"emptyLinePlaceholder":45},[118,72714,72715,72717],{"class":120,"line":16855},[118,72716,65108],{"class":51293},[118,72718,31459],{"class":128},[118,72720,72721,72723],{"class":120,"line":16860},[118,72722,65174],{"class":51293},[118,72724,15577],{"class":128},[118,72726,72727,72729,72731,72733,72735],{"class":120,"line":16874},[118,72728,54778],{"class":177},[118,72730,51430],{"class":128},[118,72732,401],{"class":177},[118,72734,51485],{"class":124},[118,72736,1294],{"class":128},[118,72738,72739,72741,72743,72745],{"class":120,"line":16886},[118,72740,57279],{"class":177},[118,72742,51430],{"class":128},[118,72744,23741],{"class":177},[118,72746,1294],{"class":128},[118,72748,72749,72751,72753,72755,72757],{"class":120,"line":16891},[118,72750,54915],{"class":177},[118,72752,51430],{"class":128},[118,72754,677],{"class":177},[118,72756,51485],{"class":124},[118,72758,1294],{"class":128},[118,72760,72761,72763,72765,72767,72769,72771,72773,72775,72778,72780,72783,72785,72787],{"class":120,"line":16904},[118,72762,61970],{"class":177},[118,72764,51430],{"class":128},[118,72766,346],{"class":177},[118,72768,51485],{"class":124},[118,72770,51514],{"class":177},[118,72772,72253],{"class":177},[118,72774,129],{"class":128},[118,72776,72777],{"class":177},"228",[118,72779,12440],{"class":128},[118,72781,72782],{"class":177},"225",[118,72784,12440],{"class":128},[118,72786,72782],{"class":177},[118,72788,2723],{"class":128},[118,72790,72791,72794,72796,72798,72800],{"class":120,"line":16909},[118,72792,72793],{"class":177},"      padding-left",[118,72795,51430],{"class":128},[118,72797,447],{"class":177},[118,72799,51485],{"class":124},[118,72801,1294],{"class":128},[118,72803,72804,72806,72808,72810,72813,72815,72817],{"class":120,"line":16914},[118,72805,61853],{"class":177},[118,72807,51430],{"class":128},[118,72809,28114],{"class":177},[118,72811,72812],{"class":177}," linear",[118,72814,61860],{"class":177},[118,72816,823],{"class":124},[118,72818,1294],{"class":128},[118,72820,72821],{"class":120,"line":16919},[118,72822,2191],{"class":128},[118,72824,72825],{"class":120,"line":16932},[118,72826,2404],{"emptyLinePlaceholder":45},[118,72828,72829,72832,72834,72836],{"class":120,"line":16937},[118,72830,72831],{"class":51293},"    tbody",[118,72833,70137],{"class":51293},[118,72835,60933],{"class":1967},[118,72837,15577],{"class":128},[118,72839,72840,72842,72844,72846,72848,72850,72852,72854,72856,72858],{"class":120,"line":32626},[118,72841,54877],{"class":177},[118,72843,51430],{"class":128},[118,72845,72316],{"class":177},[118,72847,129],{"class":128},[118,72849,72573],{"class":177},[118,72851,12440],{"class":128},[118,72853,72578],{"class":177},[118,72855,12440],{"class":128},[118,72857,72578],{"class":177},[118,72859,2723],{"class":128},[118,72861,72862,72864,72866,72868],{"class":120,"line":32632},[118,72863,62018],{"class":177},[118,72865,51430],{"class":128},[118,72867,62023],{"class":177},[118,72869,1294],{"class":128},[118,72871,72872],{"class":120,"line":32638},[118,72873,2191],{"class":128},[118,72875,72876],{"class":120,"line":32644},[118,72877,2404],{"emptyLinePlaceholder":45},[118,72879,72880,72882,72884,72887,72889],{"class":120,"line":32650},[118,72881,72831],{"class":51293},[118,72883,70137],{"class":51293},[118,72885,72886],{"class":51293}," td",[118,72888,1402],{"class":51293},[118,72890,15577],{"class":128},[118,72892,72893,72895,72897,72899],{"class":120,"line":32661},[118,72894,55002],{"class":177},[118,72896,51430],{"class":128},[118,72898,60862],{"class":177},[118,72900,1294],{"class":128},[118,72902,72903,72905,72907,72909,72911],{"class":120,"line":32667},[118,72904,54764],{"class":177},[118,72906,51430],{"class":128},[118,72908,1035],{"class":177},[118,72910,51485],{"class":124},[118,72912,1294],{"class":128},[118,72914,72915,72917,72919,72921,72923],{"class":120,"line":32687},[118,72916,54778],{"class":177},[118,72918,51430],{"class":128},[118,72920,953],{"class":177},[118,72922,51485],{"class":124},[118,72924,1294],{"class":128},[118,72926,72927,72929,72931,72933,72935],{"class":120,"line":32693},[118,72928,57352],{"class":177},[118,72930,51430],{"class":128},[118,72932,953],{"class":177},[118,72934,51485],{"class":124},[118,72936,1294],{"class":128},[118,72938,72939,72941,72943,72945,72947],{"class":120,"line":32704},[118,72940,62070],{"class":177},[118,72942,51430],{"class":128},[118,72944,206],{"class":177},[118,72946,51485],{"class":124},[118,72948,1294],{"class":128},[118,72950,72951,72953,72955,72957],{"class":120,"line":32710},[118,72952,57409],{"class":177},[118,72954,51430],{"class":128},[118,72956,60835],{"class":177},[118,72958,1294],{"class":128},[118,72960,72961,72963,72965,72967],{"class":120,"line":32716},[118,72962,57279],{"class":177},[118,72964,51430],{"class":128},[118,72966,51585],{"class":177},[118,72968,1294],{"class":128},[118,72970,72971,72973,72975,72977],{"class":120,"line":32722},[118,72972,63963],{"class":177},[118,72974,51430],{"class":128},[118,72976,54730],{"class":177},[118,72978,1294],{"class":128},[118,72980,72981,72983,72985,72988],{"class":120,"line":32728},[118,72982,54877],{"class":177},[118,72984,51430],{"class":128},[118,72986,72987],{"class":177},"orange",[118,72989,1294],{"class":128},[118,72991,72992,72994,72996,72999,73001],{"class":120,"line":32734},[118,72993,55127],{"class":177},[118,72995,51430],{"class":128},[118,72997,72998],{"class":177},"12.5",[118,73000,51485],{"class":124},[118,73002,1294],{"class":128},[118,73004,73005],{"class":120,"line":32740},[118,73006,2191],{"class":128},[118,73008,73009,73011,73013],{"class":120,"line":32746},[118,73010,52410],{"class":128},[118,73012,5131],{"class":51293},[118,73014,51300],{"class":128},[118,73016,73017,73019,73021],{"class":120,"line":32766},[118,73018,51778],{"class":128},[118,73020,51327],{"class":51293},[118,73022,51300],{"class":128},[118,73024,73025],{"class":120,"line":32772},[118,73026,2404],{"emptyLinePlaceholder":45},[118,73028,73029,73031,73033],{"class":120,"line":32788},[118,73030,1038],{"class":128},[118,73032,51793],{"class":51293},[118,73034,51300],{"class":128},[118,73036,73037,73039,73041,73044,73046],{"class":120,"line":32794},[118,73038,52137],{"class":128},[118,73040,60],{"class":51293},[118,73042,73043],{"class":128},">学生就业统计表\u003C\u002F",[118,73045,60],{"class":51293},[118,73047,51300],{"class":128},[118,73049,73050,73052,73054,73056,73058,73060,73062,73064,73066],{"class":120,"line":32808},[118,73051,52137],{"class":128},[118,73053,66618],{"class":51293},[118,73055,53479],{"class":1967},[118,73057,174],{"class":128},[118,73059,62657],{"class":233},[118,73061,69063],{"class":1967},[118,73063,174],{"class":128},[118,73065,31769],{"class":233},[118,73067,51300],{"class":128},[118,73069,73070,73072,73074,73076,73078,73080,73082,73084,73086,73088,73090,73093,73095,73097,73099],{"class":120,"line":32814},[118,73071,51334],{"class":128},[118,73073,53814],{"class":51293},[118,73075,53817],{"class":1967},[118,73077,174],{"class":128},[118,73079,62692],{"class":233},[118,73081,14925],{"class":1967},[118,73083,174],{"class":128},[118,73085,69089],{"class":233},[118,73087,61013],{"class":1967},[118,73089,174],{"class":128},[118,73091,73092],{"class":233},"\"姓名\"",[118,73094,53479],{"class":1967},[118,73096,174],{"class":128},[118,73098,69089],{"class":233},[118,73100,51300],{"class":128},[118,73102,73103,73105,73107,73109,73111,73113,73115,73117,73119,73121,73123,73126,73128,73130,73132],{"class":120,"line":32829},[118,73104,51334],{"class":128},[118,73106,53814],{"class":51293},[118,73108,53817],{"class":1967},[118,73110,174],{"class":128},[118,73112,62692],{"class":233},[118,73114,14925],{"class":1967},[118,73116,174],{"class":128},[118,73118,69117],{"class":233},[118,73120,61013],{"class":1967},[118,73122,174],{"class":128},[118,73124,73125],{"class":233},"\"年龄\"",[118,73127,53479],{"class":1967},[118,73129,174],{"class":128},[118,73131,69117],{"class":233},[118,73133,51300],{"class":128},[118,73135,73136,73138,73140,73142,73144,73146,73148,73150,73152,73154,73156,73159,73161,73163,73165],{"class":120,"line":32835},[118,73137,51334],{"class":128},[118,73139,53814],{"class":51293},[118,73141,53817],{"class":1967},[118,73143,174],{"class":128},[118,73145,62692],{"class":233},[118,73147,14925],{"class":1967},[118,73149,174],{"class":128},[118,73151,69219],{"class":233},[118,73153,61013],{"class":1967},[118,73155,174],{"class":128},[118,73157,73158],{"class":233},"\"薪资\"",[118,73160,53479],{"class":1967},[118,73162,174],{"class":128},[118,73164,69219],{"class":233},[118,73166,51300],{"class":128},[118,73168,73169,73171,73173,73175,73177,73179,73181,73183,73185,73187,73189,73191],{"class":120,"line":32844},[118,73170,51334],{"class":128},[118,73172,69137],{"class":51293},[118,73174,14925],{"class":1967},[118,73176,174],{"class":128},[118,73178,69144],{"class":233},[118,73180,14964],{"class":1967},[118,73182,174],{"class":128},[118,73184,7657],{"class":233},[118,73186,53479],{"class":1967},[118,73188,174],{"class":128},[118,73190,69144],{"class":233},[118,73192,51300],{"class":128},[118,73194,73195,73197,73199,73201,73203,73205,73207,73209],{"class":120,"line":32850},[118,73196,55227],{"class":128},[118,73198,69159],{"class":51293},[118,73200,66644],{"class":1967},[118,73202,174],{"class":128},[118,73204,9966],{"class":233},[118,73206,69168],{"class":128},[118,73208,69159],{"class":51293},[118,73210,51300],{"class":128},[118,73212,73213,73215,73217,73219,73221,73223,73225,73227],{"class":120,"line":32859},[118,73214,55227],{"class":128},[118,73216,69159],{"class":51293},[118,73218,66644],{"class":1967},[118,73220,174],{"class":128},[118,73222,10035],{"class":233},[118,73224,69187],{"class":128},[118,73226,69159],{"class":51293},[118,73228,51300],{"class":128},[118,73230,73231,73233,73235],{"class":120,"line":32865},[118,73232,51769],{"class":128},[118,73234,69137],{"class":51293},[118,73236,51300],{"class":128},[118,73238,73239,73241,73243,73245,73247,73249,73251,73253,73255,73257,73259,73261],{"class":120,"line":32871},[118,73240,51334],{"class":128},[118,73242,69137],{"class":51293},[118,73244,14925],{"class":1967},[118,73246,174],{"class":128},[118,73248,69241],{"class":233},[118,73250,14964],{"class":1967},[118,73252,174],{"class":128},[118,73254,7657],{"class":233},[118,73256,53479],{"class":1967},[118,73258,174],{"class":128},[118,73260,69241],{"class":233},[118,73262,51300],{"class":128},[118,73264,73265,73267,73269,73271,73273,73275,73277,73279],{"class":120,"line":32880},[118,73266,55227],{"class":128},[118,73268,69159],{"class":51293},[118,73270,66644],{"class":1967},[118,73272,174],{"class":128},[118,73274,69262],{"class":233},[118,73276,69265],{"class":128},[118,73278,69159],{"class":51293},[118,73280,51300],{"class":128},[118,73282,73283,73285,73287,73289,73291,73293,73295,73297],{"class":120,"line":32886},[118,73284,55227],{"class":128},[118,73286,69159],{"class":51293},[118,73288,66644],{"class":1967},[118,73290,174],{"class":128},[118,73292,69282],{"class":233},[118,73294,69285],{"class":128},[118,73296,69159],{"class":51293},[118,73298,51300],{"class":128},[118,73300,73301,73303,73305,73307,73309,73311,73313,73315],{"class":120,"line":32897},[118,73302,55227],{"class":128},[118,73304,69159],{"class":51293},[118,73306,66644],{"class":1967},[118,73308,174],{"class":128},[118,73310,69302],{"class":233},[118,73312,69305],{"class":128},[118,73314,69159],{"class":51293},[118,73316,51300],{"class":128},[118,73318,73319,73321,73323,73325,73327,73329,73331,73333],{"class":120,"line":32903},[118,73320,55227],{"class":128},[118,73322,69159],{"class":51293},[118,73324,66644],{"class":1967},[118,73326,174],{"class":128},[118,73328,69322],{"class":233},[118,73330,69325],{"class":128},[118,73332,69159],{"class":51293},[118,73334,51300],{"class":128},[118,73336,73337,73339,73341,73343,73345,73347,73349,73351],{"class":120,"line":32922},[118,73338,55227],{"class":128},[118,73340,69159],{"class":51293},[118,73342,66644],{"class":1967},[118,73344,174],{"class":128},[118,73346,69342],{"class":233},[118,73348,69345],{"class":128},[118,73350,69159],{"class":51293},[118,73352,51300],{"class":128},[118,73354,73355,73357,73359],{"class":120,"line":32928},[118,73356,51769],{"class":128},[118,73358,69137],{"class":51293},[118,73360,51300],{"class":128},[118,73362,73363,73365,73367],{"class":120,"line":32939},[118,73364,51334],{"class":128},[118,73366,53880],{"class":51293},[118,73368,51300],{"class":128},[118,73370,73371,73373,73375,73378,73380,73383,73385],{"class":120,"line":32945},[118,73372,55227],{"class":128},[118,73374,118],{"class":51293},[118,73376,73377],{"class":128},">+\u003C\u002F",[118,73379,118],{"class":51293},[118,73381,73382],{"class":128},">添加\u003C\u002F",[118,73384,53880],{"class":51293},[118,73386,51300],{"class":128},[118,73388,73389,73391,73393],{"class":120,"line":32965},[118,73390,52410],{"class":128},[118,73392,66618],{"class":51293},[118,73394,51300],{"class":128},[118,73396,73397,73399,73401,73403,73405,73407,73410,73412,73415,73417,73420,73422],{"class":120,"line":32981},[118,73398,52137],{"class":128},[118,73400,51604],{"class":51293},[118,73402,53479],{"class":1967},[118,73404,174],{"class":128},[118,73406,62573],{"class":233},[118,73408,73409],{"class":128},">共有数据 \u003C",[118,73411,118],{"class":51293},[118,73413,73414],{"class":128},">0\u003C\u002F",[118,73416,118],{"class":51293},[118,73418,73419],{"class":128},"> 条\u003C\u002F",[118,73421,51604],{"class":51293},[118,73423,51300],{"class":128},[118,73425,73426,73428,73430],{"class":120,"line":32987},[118,73427,52137],{"class":128},[118,73429,266],{"class":51293},[118,73431,51300],{"class":128},[118,73433,73434,73436,73438],{"class":120,"line":33001},[118,73435,51334],{"class":128},[118,73437,269],{"class":51293},[118,73439,51300],{"class":128},[118,73441,73442,73444,73446],{"class":120,"line":33007},[118,73443,55227],{"class":128},[118,73445,272],{"class":51293},[118,73447,51300],{"class":128},[118,73449,73450,73452,73454,73457,73459],{"class":120,"line":33013},[118,73451,55295],{"class":128},[118,73453,275],{"class":51293},[118,73455,73456],{"class":128},">ID\u003C\u002F",[118,73458,275],{"class":51293},[118,73460,51300],{"class":128},[118,73462,73463,73465,73467,73469,73471],{"class":120,"line":33024},[118,73464,55295],{"class":128},[118,73466,275],{"class":51293},[118,73468,69448],{"class":128},[118,73470,275],{"class":51293},[118,73472,51300],{"class":128},[118,73474,73475,73477,73479,73481,73483],{"class":120,"line":33030},[118,73476,55295],{"class":128},[118,73478,275],{"class":51293},[118,73480,69461],{"class":128},[118,73482,275],{"class":51293},[118,73484,51300],{"class":128},[118,73486,73487,73489,73491,73493,73495],{"class":120,"line":33036},[118,73488,55295],{"class":128},[118,73490,275],{"class":51293},[118,73492,69474],{"class":128},[118,73494,275],{"class":51293},[118,73496,51300],{"class":128},[118,73498,73499,73501,73503,73505,73507],{"class":120,"line":33046},[118,73500,55295],{"class":128},[118,73502,275],{"class":51293},[118,73504,69487],{"class":128},[118,73506,275],{"class":51293},[118,73508,51300],{"class":128},[118,73510,73511,73513,73515,73517,73519],{"class":120,"line":33052},[118,73512,55295],{"class":128},[118,73514,275],{"class":51293},[118,73516,69500],{"class":128},[118,73518,275],{"class":51293},[118,73520,51300],{"class":128},[118,73522,73523,73525,73527,73530,73532],{"class":120,"line":33063},[118,73524,55295],{"class":128},[118,73526,275],{"class":51293},[118,73528,73529],{"class":128},">录入时间\u003C\u002F",[118,73531,275],{"class":51293},[118,73533,51300],{"class":128},[118,73535,73536,73538,73540,73542,73544],{"class":120,"line":33069},[118,73537,55295],{"class":128},[118,73539,275],{"class":51293},[118,73541,69513],{"class":128},[118,73543,275],{"class":51293},[118,73545,51300],{"class":128},[118,73547,73548,73550,73552],{"class":120,"line":33079},[118,73549,55400],{"class":128},[118,73551,272],{"class":51293},[118,73553,51300],{"class":128},[118,73555,73556,73558,73560],{"class":120,"line":33084},[118,73557,51769],{"class":128},[118,73559,269],{"class":51293},[118,73561,51300],{"class":128},[118,73563,73564,73566,73568],{"class":120,"line":33090},[118,73565,51334],{"class":128},[118,73567,313],{"class":51293},[118,73569,51300],{"class":128},[118,73571,73572],{"class":120,"line":33139},[118,73573,73574],{"class":187},"      \u003C!-- \u003Ctr>\n",[118,73576,73577],{"class":120,"line":33186},[118,73578,73579],{"class":187},"        \u003Ctd>1\u003C\u002Ftd>\n",[118,73581,73582],{"class":120,"line":33191},[118,73583,73579],{"class":187},[118,73585,73586],{"class":120,"line":33197},[118,73587,73579],{"class":187},[118,73589,73590],{"class":120,"line":33216},[118,73591,73579],{"class":187},[118,73593,73594],{"class":120,"line":33222},[118,73595,73579],{"class":187},[118,73597,73598],{"class":120,"line":33242},[118,73599,73579],{"class":187},[118,73601,73602],{"class":120,"line":33248},[118,73603,73579],{"class":187},[118,73605,73606],{"class":120,"line":33254},[118,73607,73608],{"class":187},"        \u003Ctd>\n",[118,73610,73611],{"class":120,"line":33264},[118,73612,73613],{"class":187},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[118,73615,73616],{"class":120,"line":33269},[118,73617,73618],{"class":187},"        \u003C\u002Ftd>\n",[118,73620,73621],{"class":120,"line":33275},[118,73622,73623],{"class":187},"      \u003C\u002Ftr> -->\n",[118,73625,73626,73628,73630],{"class":120,"line":33291},[118,73627,51769],{"class":128},[118,73629,313],{"class":51293},[118,73631,51300],{"class":128},[118,73633,73634,73636,73638],{"class":120,"line":33336},[118,73635,52410],{"class":128},[118,73637,266],{"class":51293},[118,73639,51300],{"class":128},[118,73641,73642,73644,73646],{"class":120,"line":33342},[118,73643,52137],{"class":128},[118,73645,51806],{"class":51293},[118,73647,51300],{"class":128},[118,73649,73650],{"class":120,"line":33348},[118,73651,73652],{"class":187},"    \u002F\u002F const initData = [{\n",[118,73654,73655],{"class":120,"line":33354},[118,73656,73657],{"class":187},"    \u002F\u002F   unameId: 1,\n",[118,73659,73660],{"class":120,"line":33365},[118,73661,73662],{"class":187},"    \u002F\u002F   uname: '华晨宇',\n",[118,73664,73665],{"class":120,"line":33371},[118,73666,73667],{"class":187},"    \u002F\u002F   age: 22,\n",[118,73669,73670],{"class":120,"line":33377},[118,73671,73672],{"class":187},"    \u002F\u002F   salary: 12000,\n",[118,73674,73675],{"class":120,"line":33383},[118,73676,73677],{"class":187},"    \u002F\u002F   gender: '男',\n",[118,73679,73680],{"class":120,"line":33401},[118,73681,73682],{"class":187},"    \u002F\u002F   city: '北京',\n",[118,73684,73685],{"class":120,"line":33415},[118,73686,73687],{"class":187},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[118,73689,73690],{"class":120,"line":33424},[118,73691,73692],{"class":187},"    \u002F\u002F }]\n",[118,73694,73695],{"class":120,"line":33433},[118,73696,73697],{"class":187},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[118,73699,73700],{"class":120,"line":33442},[118,73701,73702],{"class":187},"    \u002F\u002F 1.渲染业务\n",[118,73704,73705],{"class":120,"line":33451},[118,73706,73707],{"class":187},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[118,73709,73710],{"class":120,"line":33457},[118,73711,73712],{"class":187},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[118,73714,73715],{"class":120,"line":33463},[118,73716,73717],{"class":187},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[118,73719,73720],{"class":120,"line":33471},[118,73721,2404],{"emptyLinePlaceholder":45},[118,73723,73724],{"class":120,"line":33476},[118,73725,73726],{"class":187},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[118,73728,73729],{"class":120,"line":33482},[118,73730,73731],{"class":187},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[118,73733,73734,73736,73738,73740],{"class":120,"line":33493},[118,73735,11226],{"class":124},[118,73737,57688],{"class":177},[118,73739,13569],{"class":124},[118,73741,51831],{"class":128},[118,73743,73744,73747,73749],{"class":120,"line":33499},[118,73745,73746],{"class":128},"    console.",[118,73748,58240],{"class":1967},[118,73750,52405],{"class":128},[118,73752,73753],{"class":120,"line":33519},[118,73754,2404],{"emptyLinePlaceholder":45},[118,73756,73757],{"class":120,"line":33525},[118,73758,73759],{"class":187},"    \u002F\u002F 时间函数\n",[118,73761,73762,73764,73767],{"class":120,"line":33531},[118,73763,70077],{"class":124},[118,73765,73766],{"class":1967}," getTime",[118,73768,10858],{"class":128},[118,73770,73771,73773,73776,73778,73780,73783],{"class":120,"line":33537},[118,73772,58221],{"class":124},[118,73774,73775],{"class":177}," date",[118,73777,13569],{"class":124},[118,73779,11583],{"class":124},[118,73781,73782],{"class":1967}," Date",[118,73784,1980],{"class":128},[118,73786,73787,73789,73791,73793,73796,73799,73801,73803,73805,73808,73811,73813,73815,73817,73819,73821,73823,73825],{"class":120,"line":33554},[118,73788,58221],{"class":124},[118,73790,16096],{"class":177},[118,73792,13569],{"class":124},[118,73794,73795],{"class":128}," date.",[118,73797,73798],{"class":1967},"getHours",[118,73800,13055],{"class":128},[118,73802,1038],{"class":124},[118,73804,2042],{"class":177},[118,73806,73807],{"class":124}," ?",[118,73809,73810],{"class":233}," '0'",[118,73812,45559],{"class":124},[118,73814,73795],{"class":128},[118,73816,73798],{"class":1967},[118,73818,13055],{"class":128},[118,73820,987],{"class":124},[118,73822,73795],{"class":128},[118,73824,73798],{"class":1967},[118,73826,1980],{"class":128},[118,73828,73829,73831,73834,73836,73838,73841,73843,73845,73847,73849,73851,73853,73855,73857,73859,73861,73863,73865],{"class":120,"line":33560},[118,73830,58221],{"class":124},[118,73832,73833],{"class":177}," m",[118,73835,13569],{"class":124},[118,73837,73795],{"class":128},[118,73839,73840],{"class":1967},"getMinutes",[118,73842,13055],{"class":128},[118,73844,1038],{"class":124},[118,73846,2042],{"class":177},[118,73848,73807],{"class":124},[118,73850,73810],{"class":233},[118,73852,45559],{"class":124},[118,73854,73795],{"class":128},[118,73856,73840],{"class":1967},[118,73858,13055],{"class":128},[118,73860,987],{"class":124},[118,73862,73795],{"class":128},[118,73864,73840],{"class":1967},[118,73866,1980],{"class":128},[118,73868,73869,73871,73873,73875,73877,73880,73882,73884,73886,73888,73890,73892,73894,73896,73898,73900,73902,73904],{"class":120,"line":33566},[118,73870,58221],{"class":124},[118,73872,8433],{"class":177},[118,73874,13569],{"class":124},[118,73876,73795],{"class":128},[118,73878,73879],{"class":1967},"getSeconds",[118,73881,13055],{"class":128},[118,73883,1038],{"class":124},[118,73885,2042],{"class":177},[118,73887,73807],{"class":124},[118,73889,73810],{"class":233},[118,73891,45559],{"class":124},[118,73893,73795],{"class":128},[118,73895,73879],{"class":1967},[118,73897,13055],{"class":128},[118,73899,987],{"class":124},[118,73901,73795],{"class":128},[118,73903,73879],{"class":1967},[118,73905,1980],{"class":128},[118,73907,73908,73910,73913,73915,73917,73920,73922,73925,73927,73930,73932,73934,73937,73939,73941,73943,73945,73947,73949,73952,73954,73957,73959,73962,73964,73966,73968],{"class":120,"line":33572},[118,73909,58221],{"class":124},[118,73911,73912],{"class":177}," str",[118,73914,13569],{"class":124},[118,73916,62896],{"class":233},[118,73918,73919],{"class":128},"date",[118,73921,686],{"class":233},[118,73923,73924],{"class":1967},"getFullYear",[118,73926,2431],{"class":233},[118,73928,73929],{"class":233},"}\u002F${",[118,73931,73919],{"class":128},[118,73933,686],{"class":233},[118,73935,73936],{"class":1967},"getMonth",[118,73938,13055],{"class":233},[118,73940,609],{"class":124},[118,73942,25123],{"class":177},[118,73944,73929],{"class":233},[118,73946,73919],{"class":128},[118,73948,686],{"class":233},[118,73950,73951],{"class":1967},"getDate",[118,73953,2431],{"class":233},[118,73955,73956],{"class":233},"} ${",[118,73958,543],{"class":128},[118,73960,73961],{"class":233},"}:${",[118,73963,672],{"class":128},[118,73965,73961],{"class":233},[118,73967,823],{"class":128},[118,73969,73970],{"class":233},"}`\n",[118,73972,73973,73976],{"class":120,"line":33578},[118,73974,73975],{"class":124},"      return",[118,73977,73978],{"class":128}," str\n",[118,73980,73981],{"class":120,"line":33584},[118,73982,2191],{"class":128},[118,73984,73985],{"class":120,"line":33611},[118,73986,73987],{"class":187},"    \u002F\u002F 渲染函数\n",[118,73989,73990,73992,73994,73996,73998,74000,74002,74004],{"class":120,"line":33635},[118,73991,11226],{"class":124},[118,73993,69740],{"class":177},[118,73995,13569],{"class":124},[118,73997,54389],{"class":128},[118,73999,54392],{"class":1967},[118,74001,129],{"class":128},[118,74003,69751],{"class":233},[118,74005,135],{"class":128},[118,74007,74008,74010,74012],{"class":120,"line":33641},[118,74009,70077],{"class":124},[118,74011,70080],{"class":1967},[118,74013,10858],{"class":128},[118,74015,74016],{"class":120,"line":33647},[118,74017,74018],{"class":187},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[118,74020,74021],{"class":120,"line":33653},[118,74022,74023],{"class":187},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[118,74025,74026,74028,74031,74033,74035,74038,74040,74042,74044,74047,74049,74052],{"class":120,"line":33664},[118,74027,58221],{"class":124},[118,74029,74030],{"class":177}," trArr",[118,74032,13569],{"class":124},[118,74034,51958],{"class":128},[118,74036,74037],{"class":1967},"map",[118,74039,129],{"class":128},[118,74041,54442],{"class":124},[118,74043,1662],{"class":128},[118,74045,74046],{"class":5221},"ele",[118,74048,12440],{"class":128},[118,74050,74051],{"class":5221},"index",[118,74053,12447],{"class":128},[118,74055,74056,74058],{"class":120,"line":33675},[118,74057,14757],{"class":124},[118,74059,70161],{"class":233},[118,74061,74062],{"class":120,"line":33681},[118,74063,74064],{"class":233},"      \u003Ctr>\n",[118,74066,74067,74069,74071,74073,74076],{"class":120,"line":33698},[118,74068,70166],{"class":233},[118,74070,74046],{"class":128},[118,74072,686],{"class":233},[118,74074,74075],{"class":128},"unameId",[118,74077,70181],{"class":233},[118,74079,74080,74082,74084,74086,74088],{"class":120,"line":33721},[118,74081,70166],{"class":233},[118,74083,74046],{"class":128},[118,74085,686],{"class":233},[118,74087,70197],{"class":128},[118,74089,70181],{"class":233},[118,74091,74092,74094,74096,74098,74100],{"class":120,"line":33744},[118,74093,70166],{"class":233},[118,74095,74046],{"class":128},[118,74097,686],{"class":233},[118,74099,70214],{"class":128},[118,74101,70181],{"class":233},[118,74103,74104,74106,74108,74110,74112],{"class":120,"line":33750},[118,74105,70166],{"class":233},[118,74107,74046],{"class":128},[118,74109,686],{"class":233},[118,74111,70231],{"class":128},[118,74113,70181],{"class":233},[118,74115,74116,74118,74120,74122,74124],{"class":120,"line":33755},[118,74117,70166],{"class":233},[118,74119,74046],{"class":128},[118,74121,686],{"class":233},[118,74123,70248],{"class":128},[118,74125,70181],{"class":233},[118,74127,74128,74130,74132,74134,74136],{"class":120,"line":33764},[118,74129,70166],{"class":233},[118,74131,74046],{"class":128},[118,74133,686],{"class":233},[118,74135,70265],{"class":128},[118,74137,70181],{"class":233},[118,74139,74140,74142,74144,74146,74148],{"class":120,"line":33774},[118,74141,70166],{"class":233},[118,74143,74046],{"class":128},[118,74145,686],{"class":233},[118,74147,2391],{"class":128},[118,74149,70181],{"class":233},[118,74151,74152],{"class":120,"line":33780},[118,74153,73608],{"class":233},[118,74155,74156,74159,74161],{"class":120,"line":33785},[118,74157,74158],{"class":233},"          \u003Ca href=\"#\" data-id=\"${",[118,74160,74051],{"class":128},[118,74162,74163],{"class":233},"}\">删除\u003C\u002Fa>\n",[118,74165,74166],{"class":120,"line":33791},[118,74167,73618],{"class":233},[118,74169,74170],{"class":120,"line":33804},[118,74171,74172],{"class":233},"      \u003C\u002Ftr>\n",[118,74174,74175],{"class":120,"line":33810},[118,74176,74177],{"class":233},"  `\n",[118,74179,74180],{"class":120,"line":33821},[118,74181,64808],{"class":128},[118,74183,74184,74186,74188],{"class":120,"line":33832},[118,74185,58237],{"class":128},[118,74187,58240],{"class":1967},[118,74189,74190],{"class":128},"(trArr)\n",[118,74192,74193],{"class":120,"line":33851},[118,74194,2404],{"emptyLinePlaceholder":45},[118,74196,74197],{"class":120,"line":49511},[118,74198,74199],{"class":187},"      \u002F\u002F (2) 把数组转换为字符串join\n",[118,74201,74202],{"class":120,"line":49516},[118,74203,74204],{"class":187},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[118,74206,74207,74209,74211,74214,74217,74219,74222],{"class":120,"line":49525},[118,74208,70092],{"class":128},[118,74210,174],{"class":124},[118,74212,74213],{"class":128}," trArr.",[118,74215,74216],{"class":1967},"join",[118,74218,129],{"class":128},[118,74220,74221],{"class":233},"''",[118,74223,135],{"class":128},[118,74225,74226],{"class":120,"line":49534},[118,74227,74228],{"class":187},"      \u002F\u002F 显示共有几条\n",[118,74230,74231,74233,74235,74237,74240,74243,74245,74247],{"class":120,"line":49539},[118,74232,55764],{"class":128},[118,74234,54392],{"class":1967},[118,74236,129],{"class":128},[118,74238,74239],{"class":233},"'.total span'",[118,74241,74242],{"class":128},").innerHTML ",[118,74244,174],{"class":124},[118,74246,51958],{"class":128},[118,74248,55824],{"class":177},[118,74250,74251],{"class":120,"line":49544},[118,74252,2191],{"class":128},[118,74254,74255],{"class":120,"line":49549},[118,74256,74257],{"class":187},"    \u002F\u002F render()\n",[118,74259,74260],{"class":120,"line":49562},[118,74261,2404],{"emptyLinePlaceholder":45},[118,74263,74264],{"class":120,"line":49567},[118,74265,74266],{"class":187},"    \u002F\u002F 获取DOM对象\n",[118,74268,74269,74271,74273,74275,74277,74279,74281,74283],{"class":120,"line":49576},[118,74270,11226],{"class":124},[118,74272,69814],{"class":177},[118,74274,13569],{"class":124},[118,74276,54389],{"class":128},[118,74278,54392],{"class":1967},[118,74280,129],{"class":128},[118,74282,69825],{"class":233},[118,74284,135],{"class":128},[118,74286,74287,74289,74291,74293,74295,74297,74299,74301],{"class":120,"line":49585},[118,74288,11226],{"class":124},[118,74290,69641],{"class":177},[118,74292,13569],{"class":124},[118,74294,54389],{"class":128},[118,74296,54392],{"class":1967},[118,74298,129],{"class":128},[118,74300,69652],{"class":233},[118,74302,135],{"class":128},[118,74304,74305,74307,74309,74311,74313,74315,74317,74319],{"class":120,"line":49602},[118,74306,11226],{"class":124},[118,74308,15694],{"class":177},[118,74310,13569],{"class":124},[118,74312,54389],{"class":128},[118,74314,54392],{"class":1967},[118,74316,129],{"class":128},[118,74318,69671],{"class":233},[118,74320,135],{"class":128},[118,74322,74324,74326,74328,74330,74332,74334,74336,74338],{"class":120,"line":74323},231,[118,74325,11226],{"class":124},[118,74327,69700],{"class":177},[118,74329,13569],{"class":124},[118,74331,54389],{"class":128},[118,74333,54392],{"class":1967},[118,74335,129],{"class":128},[118,74337,69711],{"class":233},[118,74339,135],{"class":128},[118,74341,74343,74345,74347,74349,74351,74353,74355,74357],{"class":120,"line":74342},232,[118,74344,11226],{"class":124},[118,74346,69680],{"class":177},[118,74348,13569],{"class":124},[118,74350,54389],{"class":128},[118,74352,54392],{"class":1967},[118,74354,129],{"class":128},[118,74356,69691],{"class":233},[118,74358,135],{"class":128},[118,74360,74362,74364,74366,74368,74370,74372,74374,74376],{"class":120,"line":74361},233,[118,74363,11226],{"class":124},[118,74365,69720],{"class":177},[118,74367,13569],{"class":124},[118,74369,54389],{"class":128},[118,74371,54392],{"class":1967},[118,74373,129],{"class":128},[118,74375,69731],{"class":233},[118,74377,135],{"class":128},[118,74379,74381],{"class":120,"line":74380},234,[118,74382,2404],{"emptyLinePlaceholder":45},[118,74384,74386],{"class":120,"line":74385},235,[118,74387,74388],{"class":187},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[118,74390,74392,74394,74396,74398,74400,74402,74404,74406,74408],{"class":120,"line":74391},236,[118,74393,69832],{"class":128},[118,74395,57806],{"class":1967},[118,74397,129],{"class":128},[118,74399,69839],{"class":233},[118,74401,12440],{"class":128},[118,74403,54442],{"class":124},[118,74405,1662],{"class":128},[118,74407,203],{"class":5221},[118,74409,12447],{"class":128},[118,74411,74413],{"class":120,"line":74412},237,[118,74414,74415],{"class":187},"      \u002F\u002F 禁止浏览器跳转\n",[118,74417,74419,74421,74423],{"class":120,"line":74418},238,[118,74420,69859],{"class":128},[118,74422,69862],{"class":1967},[118,74424,1980],{"class":128},[118,74426,74428],{"class":120,"line":74427},239,[118,74429,74430],{"class":187},"      \u002F\u002F 非空判断\n",[118,74432,74434],{"class":120,"line":74433},240,[118,74435,74436],{"class":187},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[118,74438,74440],{"class":120,"line":74439},241,[118,74441,74442],{"class":187},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[118,74444,74446,74448,74450,74452,74455,74457,74460,74463,74465,74467],{"class":120,"line":74445},242,[118,74447,54473],{"class":124},[118,74449,1662],{"class":128},[118,74451,355],{"class":124},[118,74453,74454],{"class":128},"uname.value ",[118,74456,71350],{"class":124},[118,74458,74459],{"class":124}," !",[118,74461,74462],{"class":128},"age.value ",[118,74464,71350],{"class":124},[118,74466,74459],{"class":124},[118,74468,74469],{"class":128},"salary.value) {\n",[118,74471,74473,74475,74477,74479,74481],{"class":120,"line":74472},243,[118,74474,14757],{"class":124},[118,74476,69933],{"class":1967},[118,74478,129],{"class":128},[118,74480,69938],{"class":233},[118,74482,135],{"class":128},[118,74484,74486],{"class":120,"line":74485},244,[118,74487,52391],{"class":128},[118,74489,74491,74493,74495],{"class":120,"line":74490},245,[118,74492,58000],{"class":128},[118,74494,51877],{"class":1967},[118,74496,74497],{"class":128},"({\n",[118,74499,74501],{"class":120,"line":74500},246,[118,74502,74503],{"class":187},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[118,74505,74507],{"class":120,"line":74506},247,[118,74508,74509],{"class":187},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[118,74511,74513],{"class":120,"line":74512},248,[118,74514,74515],{"class":187},"        \u002F\u002F 对象的序号应为数组长度+1\n",[118,74517,74519],{"class":120,"line":74518},249,[118,74520,74521],{"class":187},"        \u002F\u002F unameId: arr.length + 1,\n",[118,74523,74525],{"class":120,"line":74524},250,[118,74526,2404],{"emptyLinePlaceholder":45},[118,74528,74530],{"class":120,"line":74529},251,[118,74531,74532],{"class":187},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[118,74534,74536],{"class":120,"line":74535},252,[118,74537,74538],{"class":187},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[118,74540,74542],{"class":120,"line":74541},253,[118,74543,74544],{"class":187},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[118,74546,74548],{"class":120,"line":74547},254,[118,74549,74550],{"class":187},"        \u002F\u002F 0当假看\n",[118,74552,74554,74557,74559,74561,74564,74566,74568,74570,74573,74575,74577,74580,74582],{"class":120,"line":74553},255,[118,74555,74556],{"class":128},"        unameId: arr.",[118,74558,51961],{"class":177},[118,74560,73807],{"class":124},[118,74562,74563],{"class":128}," arr[arr.",[118,74565,51961],{"class":177},[118,74567,52264],{"class":124},[118,74569,25123],{"class":177},[118,74571,74572],{"class":128},"].unameId ",[118,74574,609],{"class":124},[118,74576,25123],{"class":177},[118,74578,74579],{"class":124}," :",[118,74581,25123],{"class":177},[118,74583,31459],{"class":128},[118,74585,74587],{"class":120,"line":74586},256,[118,74588,69986],{"class":128},[118,74590,74592],{"class":120,"line":74591},257,[118,74593,69991],{"class":128},[118,74595,74597],{"class":120,"line":74596},258,[118,74598,70001],{"class":128},[118,74600,74602],{"class":120,"line":74601},259,[118,74603,69996],{"class":128},[118,74605,74607],{"class":120,"line":74606},260,[118,74608,74609],{"class":128},"        city: city.value,\n",[118,74611,74613],{"class":120,"line":74612},261,[118,74614,74615],{"class":187},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[118,74617,74619],{"class":120,"line":74618},262,[118,74620,74621],{"class":187},"        \u002F\u002F time: new Date().toDateString()\n",[118,74623,74625,74628,74631],{"class":120,"line":74624},263,[118,74626,74627],{"class":128},"        time: ",[118,74629,74630],{"class":1967},"getTime",[118,74632,1980],{"class":128},[118,74634,74636],{"class":120,"line":74635},264,[118,74637,64808],{"class":128},[118,74639,74641],{"class":120,"line":74640},265,[118,74642,74643],{"class":187},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[118,74645,74647,74649],{"class":120,"line":74646},266,[118,74648,70061],{"class":1967},[118,74650,1980],{"class":128},[118,74652,74654,74656,74658,74660,74662],{"class":120,"line":74653},267,[118,74655,70044],{"class":177},[118,74657,686],{"class":128},[118,74659,70049],{"class":1967},[118,74661,13055],{"class":128},[118,74663,74664],{"class":187},"\u002F\u002F重置表单\n",[118,74666,74668],{"class":120,"line":74667},268,[118,74669,74670],{"class":187},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[118,74672,74674,74677,74679,74681,74684,74686,74688,74690,74692],{"class":120,"line":74673},269,[118,74675,74676],{"class":128},"      localStorage.",[118,74678,71647],{"class":1967},[118,74680,129],{"class":128},[118,74682,74683],{"class":233},"'data'",[118,74685,12440],{"class":128},[118,74687,71657],{"class":177},[118,74689,686],{"class":128},[118,74691,71662],{"class":1967},[118,74693,74694],{"class":128},"(arr))\n",[118,74696,74698],{"class":120,"line":74697},270,[118,74699,33454],{"class":128},[118,74701,74703],{"class":120,"line":74702},271,[118,74704,2404],{"emptyLinePlaceholder":45},[118,74706,74708],{"class":120,"line":74707},272,[118,74709,74710],{"class":187},"    \u002F\u002F 3.删除业务\n",[118,74712,74714],{"class":120,"line":74713},273,[118,74715,74716],{"class":187},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[118,74718,74720,74722,74724,74726,74728,74730,74732,74734,74736],{"class":120,"line":74719},274,[118,74721,70334],{"class":128},[118,74723,57806],{"class":1967},[118,74725,129],{"class":128},[118,74727,57811],{"class":233},[118,74729,12440],{"class":128},[118,74731,54442],{"class":124},[118,74733,1662],{"class":128},[118,74735,203],{"class":5221},[118,74737,12447],{"class":128},[118,74739,74741],{"class":120,"line":74740},275,[118,74742,74743],{"class":187},"      \u002F\u002F 判断是否点击的是删除按钮\n",[118,74745,74747,74749,74751,74753,74755],{"class":120,"line":74746},276,[118,74748,54473],{"class":124},[118,74750,67027],{"class":128},[118,74752,54479],{"class":124},[118,74754,68249],{"class":233},[118,74756,12447],{"class":128},[118,74758,74760],{"class":120,"line":74759},277,[118,74761,74762],{"class":187},"        \u002F\u002F alert(1)\n",[118,74764,74766],{"class":120,"line":74765},278,[118,74767,74768],{"class":187},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[118,74770,74772],{"class":120,"line":74771},279,[118,74773,74774],{"class":187},"        \u002F\u002F console.log(e.target)\n",[118,74776,74778],{"class":120,"line":74777},280,[118,74779,74780],{"class":187},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[118,74782,74784],{"class":120,"line":74783},281,[118,74785,2404],{"emptyLinePlaceholder":45},[118,74787,74789],{"class":120,"line":74788},282,[118,74790,74791],{"class":187},"        \u002F\u002F 确认框，确然是否真的要删除\n",[118,74793,74795],{"class":120,"line":74794},283,[118,74796,74797],{"class":187},"        \u002F\u002F confirm()为确认框\n",[118,74799,74801],{"class":120,"line":74800},284,[118,74802,74803],{"class":187},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[118,74805,74807,74809,74811,74814,74816,74819],{"class":120,"line":74806},285,[118,74808,2501],{"class":124},[118,74810,1662],{"class":128},[118,74812,74813],{"class":1967},"confirm",[118,74815,129],{"class":128},[118,74817,74818],{"class":233},"'您确定要删除这条数据吗？'",[118,74820,74821],{"class":128},")) {\n",[118,74823,74825,74828,74830,74832,74834],{"class":120,"line":74824},286,[118,74826,74827],{"class":128},"          arr.",[118,74829,58003],{"class":1967},[118,74831,70387],{"class":128},[118,74833,346],{"class":177},[118,74835,135],{"class":128},[118,74837,74839],{"class":120,"line":74838},287,[118,74840,74841],{"class":187},"          \u002F\u002F 3.4 重新渲染页面\n",[118,74843,74845,74848],{"class":120,"line":74844},288,[118,74846,74847],{"class":1967},"          render",[118,74849,1980],{"class":128},[118,74851,74853],{"class":120,"line":74852},289,[118,74854,74855],{"class":187},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[118,74857,74859,74862,74864,74866,74868,74870,74872,74874,74876],{"class":120,"line":74858},290,[118,74860,74861],{"class":128},"          localStorage.",[118,74863,71647],{"class":1967},[118,74865,129],{"class":128},[118,74867,74683],{"class":233},[118,74869,12440],{"class":128},[118,74871,71657],{"class":177},[118,74873,686],{"class":128},[118,74875,71662],{"class":1967},[118,74877,74694],{"class":128},[118,74879,74881],{"class":120,"line":74880},291,[118,74882,2533],{"class":128},[118,74884,74886],{"class":120,"line":74885},292,[118,74887,52391],{"class":128},[118,74889,74891],{"class":120,"line":74890},293,[118,74892,2404],{"emptyLinePlaceholder":45},[118,74894,74896],{"class":120,"line":74895},294,[118,74897,33454],{"class":128},[118,74899,74901],{"class":120,"line":74900},295,[118,74902,2404],{"emptyLinePlaceholder":45},[118,74904,74906,74908,74910],{"class":120,"line":74905},296,[118,74907,52410],{"class":128},[118,74909,51806],{"class":51293},[118,74911,51300],{"class":128},[118,74913,74915,74917,74919],{"class":120,"line":74914},297,[118,74916,51778],{"class":128},[118,74918,51793],{"class":51293},[118,74920,51300],{"class":128},[118,74922,74924],{"class":120,"line":74923},298,[118,74925,2404],{"emptyLinePlaceholder":45},[118,74927,74929,74931,74933],{"class":120,"line":74928},299,[118,74930,51778],{"class":128},[118,74932,50628],{"class":51293},[118,74934,51300],{"class":128},[60,74936,74938],{"id":74937},"_36-正则表达式","3.6 正则表达式",[15,74940,74941],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[15,74943,74944],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[15,74946,74947],{},"正则表达式的作用：",[1135,74949,74950,74957,74963],{},[75,74951,74952,74953,74956],{},"表单验证（ ",[278,74954,74955],{},"匹配"," ）",[75,74958,74959,74960,74956],{},"过滤敏感词（ ",[278,74961,74962],{},"替换",[75,74964,74965,74966,74956],{},"字符串中提取我们想要的部分（ ",[278,74967,74968],{},"提取",[89,74970,74972],{"id":74971},"_361-语法","3.6.1 语法",[15,74974,74975],{},"正则表达式使用步骤：",[72,74977,74978,74981],{},[75,74979,74980],{},"定义规则",[75,74982,74983],{},"查找是否匹配",[15,74985,74986],{},"正则表达式里边不需要写引号",[15,74988,74989],{},[1466,74990],{"alt":39,"src":74991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[15,74993,74994],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[15,74996,74997],{},"reg.test(str)",[15,74999,75000],{},[1466,75001],{"alt":39,"src":75002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[15,75004,75005],{},[1466,75006],{"alt":39,"src":75007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[89,75009,75011],{"id":75010},"_362-元字符","3.6.2 元字符",[72,75013,75014,75017,75020,75023,75030],{},[75,75015,75016],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[75,75018,75019],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[75,75021,75022],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[75,75024,75025,75026],{},"正则验证工具：",[21,75027,75028],{"href":75028,"rel":75029},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25],[75,75031,75032],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22003,75034,75036],{"id":75035},"_3621-边界符","3.6.2.1 边界符",[15,75038,75039],{},[1466,75040],{"alt":39,"src":75041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[15,75043,75044],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[15,75046,75047],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[15,75049,75050],{},"只匹配一次",[15,75052,75053],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22003,75055,75057],{"id":75056},"_3622-量词","3.6.2.2 量词",[15,75059,75060],{},[1466,75061],{"alt":39,"src":75062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[15,75064,75065],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22003,75067,75069],{"id":75068},"_3623-元字符","3.6.2.3 元字符",[15,75071,75072],{},[1466,75073],{"alt":39,"src":75074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[15,75076,75077],{},"匹配的是a或b或c []只选一个",[15,75079,75080],{},[1466,75081],{"alt":39,"src":75082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[15,75084,75085],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[15,75087,75088],{},[1466,75089],{"alt":39,"src":75090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[15,75092,75093],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[15,75095,75096],{},[1466,75097],{"alt":39,"src":75098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[109,75100,75102],{"className":50626,"code":75101,"language":50628,"meta":39,"style":39},"\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",[115,75103,75104,75114,75128,75132,75140,75154,75174,75186,75194,75198,75206,75214,75219,75250,75277,75305,75309,75314,75342,75373,75378,75383,75414,75446,75478,75482,75487,75518,75548,75578,75582,75587,75618,75649,75679,75709,75713,75718,75751,75755,75760,75791,75822,75826,75831,75862,75892,75923,75927,75932,75964,75995,76026,76053,76084,76116,76149,76180,76211,76243,76274,76282,76290,76294],{"__ignoreMap":39},[118,75105,75106,75108,75110,75112],{"class":120,"line":121},[118,75107,51290],{"class":128},[118,75109,51294],{"class":51293},[118,75111,51297],{"class":1967},[118,75113,51300],{"class":128},[118,75115,75116,75118,75120,75122,75124,75126],{"class":120,"line":40},[118,75117,1038],{"class":128},[118,75119,50628],{"class":51293},[118,75121,51309],{"class":1967},[118,75123,174],{"class":128},[118,75125,51314],{"class":233},[118,75127,51300],{"class":128},[118,75129,75130],{"class":120,"line":1183},[118,75131,2404],{"emptyLinePlaceholder":45},[118,75133,75134,75136,75138],{"class":120,"line":1198},[118,75135,1038],{"class":128},[118,75137,51327],{"class":51293},[118,75139,51300],{"class":128},[118,75141,75142,75144,75146,75148,75150,75152],{"class":120,"line":1204},[118,75143,52137],{"class":128},[118,75145,51337],{"class":51293},[118,75147,51340],{"class":1967},[118,75149,174],{"class":128},[118,75151,51345],{"class":233},[118,75153,51300],{"class":128},[118,75155,75156,75158,75160,75162,75164,75166,75168,75170,75172],{"class":120,"line":1218},[118,75157,52137],{"class":128},[118,75159,51337],{"class":51293},[118,75161,14925],{"class":1967},[118,75163,174],{"class":128},[118,75165,51384],{"class":233},[118,75167,51364],{"class":1967},[118,75169,174],{"class":128},[118,75171,51391],{"class":233},[118,75173,51300],{"class":128},[118,75175,75176,75178,75180,75182,75184],{"class":120,"line":1224},[118,75177,52137],{"class":128},[118,75179,51400],{"class":51293},[118,75181,51403],{"class":128},[118,75183,51400],{"class":51293},[118,75185,51300],{"class":128},[118,75187,75188,75190,75192],{"class":120,"line":1315},[118,75189,51778],{"class":128},[118,75191,51327],{"class":51293},[118,75193,51300],{"class":128},[118,75195,75196],{"class":120,"line":1321},[118,75197,2404],{"emptyLinePlaceholder":45},[118,75199,75200,75202,75204],{"class":120,"line":1333},[118,75201,1038],{"class":128},[118,75203,51793],{"class":51293},[118,75205,51300],{"class":128},[118,75207,75208,75210,75212],{"class":120,"line":1616},[118,75209,52137],{"class":128},[118,75211,51806],{"class":51293},[118,75213,51300],{"class":128},[118,75215,75216],{"class":120,"line":1621},[118,75217,75218],{"class":187},"    \u002F\u002F 元字符中\n",[118,75220,75221,75223,75225,75227,75229,75232,75234,75236,75239,75241,75244,75247],{"class":120,"line":1627},[118,75222,73746],{"class":128},[118,75224,58240],{"class":1967},[118,75226,129],{"class":128},[118,75228,712],{"class":233},[118,75230,75231],{"class":47970},"哈",[118,75233,712],{"class":233},[118,75235,686],{"class":128},[118,75237,75238],{"class":1967},"test",[118,75240,129],{"class":128},[118,75242,75243],{"class":233},"'哈'",[118,75245,75246],{"class":128},"))  ",[118,75248,75249],{"class":187},"\u002F\u002Ftrue\n",[118,75251,75252,75254,75256,75258,75260,75262,75264,75266,75268,75270,75273,75275],{"class":120,"line":1632},[118,75253,73746],{"class":128},[118,75255,58240],{"class":1967},[118,75257,129],{"class":128},[118,75259,712],{"class":233},[118,75261,75231],{"class":47970},[118,75263,712],{"class":233},[118,75265,686],{"class":128},[118,75267,75238],{"class":1967},[118,75269,129],{"class":128},[118,75271,75272],{"class":233},"'哈哈'",[118,75274,75246],{"class":128},[118,75276,75249],{"class":187},[118,75278,75279,75281,75283,75285,75287,75289,75291,75293,75295,75297,75300,75303],{"class":120,"line":1646},[118,75280,73746],{"class":128},[118,75282,58240],{"class":1967},[118,75284,129],{"class":128},[118,75286,712],{"class":233},[118,75288,75231],{"class":47970},[118,75290,712],{"class":233},[118,75292,686],{"class":128},[118,75294,75238],{"class":1967},[118,75296,129],{"class":128},[118,75298,75299],{"class":233},"'二哈'",[118,75301,75302],{"class":128},"))   ",[118,75304,75249],{"class":187},[118,75306,75307],{"class":120,"line":1651},[118,75308,2404],{"emptyLinePlaceholder":45},[118,75310,75311],{"class":120,"line":1657},[118,75312,75313],{"class":187},"    \u002F\u002F 1.边界符\n",[118,75315,75316,75318,75320,75322,75324,75326,75328,75330,75332,75334,75336,75338,75340],{"class":120,"line":1678},[118,75317,73746],{"class":128},[118,75319,58240],{"class":1967},[118,75321,129],{"class":128},[118,75323,712],{"class":233},[118,75325,1094],{"class":124},[118,75327,75231],{"class":47970},[118,75329,712],{"class":233},[118,75331,686],{"class":128},[118,75333,75238],{"class":1967},[118,75335,129],{"class":128},[118,75337,75243],{"class":233},[118,75339,75246],{"class":128},[118,75341,75249],{"class":187},[118,75343,75344,75346,75348,75350,75352,75354,75356,75358,75360,75362,75364,75366,75368,75370],{"class":120,"line":1683},[118,75345,73746],{"class":128},[118,75347,58240],{"class":1967},[118,75349,129],{"class":128},[118,75351,712],{"class":233},[118,75353,1094],{"class":124},[118,75355,75231],{"class":47970},[118,75357,430],{"class":124},[118,75359,712],{"class":233},[118,75361,686],{"class":128},[118,75363,75238],{"class":1967},[118,75365,129],{"class":128},[118,75367,75272],{"class":233},[118,75369,75246],{"class":128},[118,75371,75372],{"class":187},"\u002F\u002Ffalse\n",[118,75374,75375],{"class":120,"line":1697},[118,75376,75377],{"class":187},"    \u002F\u002F 2.量词\n",[118,75379,75380],{"class":120,"line":1702},[118,75381,75382],{"class":187},"    \u002F\u002F 量词 * 类似于 >= 0\n",[118,75384,75385,75387,75389,75391,75393,75395,75397,75400,75402,75404,75406,75408,75410,75412],{"class":120,"line":1731},[118,75386,73746],{"class":128},[118,75388,58240],{"class":1967},[118,75390,129],{"class":128},[118,75392,712],{"class":233},[118,75394,1094],{"class":124},[118,75396,75231],{"class":47970},[118,75398,75399],{"class":124},"*$",[118,75401,712],{"class":233},[118,75403,686],{"class":128},[118,75405,75238],{"class":1967},[118,75407,129],{"class":128},[118,75409,75272],{"class":233},[118,75411,75246],{"class":128},[118,75413,75249],{"class":187},[118,75415,75416,75418,75420,75422,75424,75426,75428,75430,75432,75434,75436,75438,75441,75443],{"class":120,"line":1736},[118,75417,73746],{"class":128},[118,75419,58240],{"class":1967},[118,75421,129],{"class":128},[118,75423,712],{"class":233},[118,75425,1094],{"class":124},[118,75427,75231],{"class":47970},[118,75429,75399],{"class":124},[118,75431,712],{"class":233},[118,75433,686],{"class":128},[118,75435,75238],{"class":1967},[118,75437,129],{"class":128},[118,75439,75440],{"class":233},"'二哈好傻'",[118,75442,75246],{"class":128},[118,75444,75445],{"class":187},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[118,75447,75448,75450,75452,75454,75456,75458,75460,75462,75464,75466,75468,75470,75473,75475],{"class":120,"line":1753},[118,75449,73746],{"class":128},[118,75451,58240],{"class":1967},[118,75453,129],{"class":128},[118,75455,712],{"class":233},[118,75457,1094],{"class":124},[118,75459,75231],{"class":47970},[118,75461,75399],{"class":124},[118,75463,712],{"class":233},[118,75465,686],{"class":128},[118,75467,75238],{"class":1967},[118,75469,129],{"class":128},[118,75471,75472],{"class":233},"'哈好哈'",[118,75474,75302],{"class":128},[118,75476,75477],{"class":187},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[118,75479,75480],{"class":120,"line":1758},[118,75481,2404],{"emptyLinePlaceholder":45},[118,75483,75484],{"class":120,"line":1763},[118,75485,75486],{"class":187},"    \u002F\u002F +类似于>=1\n",[118,75488,75489,75491,75493,75495,75497,75499,75501,75504,75506,75508,75510,75512,75514,75516],{"class":120,"line":1768},[118,75490,73746],{"class":128},[118,75492,58240],{"class":1967},[118,75494,129],{"class":128},[118,75496,712],{"class":233},[118,75498,1094],{"class":124},[118,75500,75231],{"class":47970},[118,75502,75503],{"class":124},"+$",[118,75505,712],{"class":233},[118,75507,686],{"class":128},[118,75509,75238],{"class":1967},[118,75511,129],{"class":128},[118,75513,75272],{"class":233},[118,75515,75246],{"class":128},[118,75517,75249],{"class":187},[118,75519,75520,75522,75524,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546],{"class":120,"line":1782},[118,75521,73746],{"class":128},[118,75523,58240],{"class":1967},[118,75525,129],{"class":128},[118,75527,712],{"class":233},[118,75529,1094],{"class":124},[118,75531,75231],{"class":47970},[118,75533,75503],{"class":124},[118,75535,712],{"class":233},[118,75537,686],{"class":128},[118,75539,75238],{"class":1967},[118,75541,129],{"class":128},[118,75543,75440],{"class":233},[118,75545,75246],{"class":128},[118,75547,75445],{"class":187},[118,75549,75550,75552,75554,75556,75558,75560,75562,75564,75566,75568,75570,75572,75574,75576],{"class":120,"line":1787},[118,75551,73746],{"class":128},[118,75553,58240],{"class":1967},[118,75555,129],{"class":128},[118,75557,712],{"class":233},[118,75559,1094],{"class":124},[118,75561,75231],{"class":47970},[118,75563,75503],{"class":124},[118,75565,712],{"class":233},[118,75567,686],{"class":128},[118,75569,75238],{"class":1967},[118,75571,129],{"class":128},[118,75573,75472],{"class":233},[118,75575,75302],{"class":128},[118,75577,75372],{"class":187},[118,75579,75580],{"class":120,"line":2581},[118,75581,2404],{"emptyLinePlaceholder":45},[118,75583,75584],{"class":120,"line":2595},[118,75585,75586],{"class":187},"    \u002F\u002F ?类似于0次或一次\n",[118,75588,75589,75591,75593,75595,75597,75599,75602,75604,75606,75608,75610,75612,75614,75616],{"class":120,"line":2603},[118,75590,73746],{"class":128},[118,75592,58240],{"class":1967},[118,75594,129],{"class":128},[118,75596,712],{"class":233},[118,75598,1094],{"class":124},[118,75600,75601],{"class":47970},"哈？",[118,75603,430],{"class":124},[118,75605,712],{"class":233},[118,75607,686],{"class":128},[118,75609,75238],{"class":1967},[118,75611,129],{"class":128},[118,75613,74221],{"class":233},[118,75615,75302],{"class":128},[118,75617,75249],{"class":187},[118,75619,75620,75622,75624,75626,75628,75630,75632,75635,75637,75639,75641,75643,75645,75647],{"class":120,"line":2608},[118,75621,73746],{"class":128},[118,75623,58240],{"class":1967},[118,75625,129],{"class":128},[118,75627,712],{"class":233},[118,75629,1094],{"class":124},[118,75631,75231],{"class":47970},[118,75633,75634],{"class":124},"?$",[118,75636,712],{"class":233},[118,75638,686],{"class":128},[118,75640,75238],{"class":1967},[118,75642,129],{"class":128},[118,75644,75272],{"class":233},[118,75646,75246],{"class":128},[118,75648,75372],{"class":187},[118,75650,75651,75653,75655,75657,75659,75661,75663,75665,75667,75669,75671,75673,75675,75677],{"class":120,"line":2614},[118,75652,73746],{"class":128},[118,75654,58240],{"class":1967},[118,75656,129],{"class":128},[118,75658,712],{"class":233},[118,75660,1094],{"class":124},[118,75662,75231],{"class":47970},[118,75664,75634],{"class":124},[118,75666,712],{"class":233},[118,75668,686],{"class":128},[118,75670,75238],{"class":1967},[118,75672,129],{"class":128},[118,75674,75440],{"class":233},[118,75676,75246],{"class":128},[118,75678,75445],{"class":187},[118,75680,75681,75683,75685,75687,75689,75691,75693,75695,75697,75699,75701,75703,75705,75707],{"class":120,"line":2620},[118,75682,73746],{"class":128},[118,75684,58240],{"class":1967},[118,75686,129],{"class":128},[118,75688,712],{"class":233},[118,75690,1094],{"class":124},[118,75692,75231],{"class":47970},[118,75694,75634],{"class":124},[118,75696,712],{"class":233},[118,75698,686],{"class":128},[118,75700,75238],{"class":1967},[118,75702,129],{"class":128},[118,75704,75472],{"class":233},[118,75706,75246],{"class":128},[118,75708,75372],{"class":187},[118,75710,75711],{"class":120,"line":2625},[118,75712,2404],{"emptyLinePlaceholder":45},[118,75714,75715],{"class":120,"line":7953},[118,75716,75717],{"class":187},"    \u002F\u002F {n}写几，就必须出现几次\n",[118,75719,75720,75722,75724,75726,75728,75730,75732,75735,75737,75739,75741,75743,75746,75749],{"class":120,"line":7977},[118,75721,73746],{"class":128},[118,75723,58240],{"class":1967},[118,75725,129],{"class":128},[118,75727,712],{"class":233},[118,75729,1094],{"class":124},[118,75731,75231],{"class":47970},[118,75733,75734],{"class":124},"{4}$",[118,75736,712],{"class":233},[118,75738,686],{"class":128},[118,75740,75238],{"class":1967},[118,75742,129],{"class":128},[118,75744,75745],{"class":233},"'哈哈哈哈'",[118,75747,75748],{"class":128},")) ",[118,75750,75249],{"class":187},[118,75752,75753],{"class":120,"line":7982},[118,75754,2404],{"emptyLinePlaceholder":45},[118,75756,75757],{"class":120,"line":7988},[118,75758,75759],{"class":187},"    \u002F\u002F {n,}大于等于n次\n",[118,75761,75762,75764,75766,75768,75770,75772,75774,75777,75779,75781,75783,75785,75787,75789],{"class":120,"line":8015},[118,75763,73746],{"class":128},[118,75765,58240],{"class":1967},[118,75767,129],{"class":128},[118,75769,712],{"class":233},[118,75771,1094],{"class":124},[118,75773,75231],{"class":47970},[118,75775,75776],{"class":124},"{4,}$",[118,75778,712],{"class":233},[118,75780,686],{"class":128},[118,75782,75238],{"class":1967},[118,75784,129],{"class":128},[118,75786,75745],{"class":233},[118,75788,75748],{"class":128},[118,75790,75249],{"class":187},[118,75792,75793,75795,75797,75799,75801,75803,75805,75807,75809,75811,75813,75815,75818,75820],{"class":120,"line":8020},[118,75794,73746],{"class":128},[118,75796,58240],{"class":1967},[118,75798,129],{"class":128},[118,75800,712],{"class":233},[118,75802,1094],{"class":124},[118,75804,75231],{"class":47970},[118,75806,75776],{"class":124},[118,75808,712],{"class":233},[118,75810,686],{"class":128},[118,75812,75238],{"class":1967},[118,75814,129],{"class":128},[118,75816,75817],{"class":233},"'哈哈哈哈哈'",[118,75819,75748],{"class":128},[118,75821,75249],{"class":187},[118,75823,75824],{"class":120,"line":8026},[118,75825,2404],{"emptyLinePlaceholder":45},[118,75827,75828],{"class":120,"line":8038},[118,75829,75830],{"class":187},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[118,75832,75833,75835,75837,75839,75841,75843,75845,75848,75850,75852,75854,75856,75858,75860],{"class":120,"line":8050},[118,75834,73746],{"class":128},[118,75836,58240],{"class":1967},[118,75838,129],{"class":128},[118,75840,712],{"class":233},[118,75842,1094],{"class":124},[118,75844,75231],{"class":47970},[118,75846,75847],{"class":124},"{4,6}$",[118,75849,712],{"class":233},[118,75851,686],{"class":128},[118,75853,75238],{"class":1967},[118,75855,129],{"class":128},[118,75857,75745],{"class":233},[118,75859,75748],{"class":128},[118,75861,75249],{"class":187},[118,75863,75864,75866,75868,75870,75872,75874,75876,75878,75880,75882,75884,75886,75888,75890],{"class":120,"line":8062},[118,75865,73746],{"class":128},[118,75867,58240],{"class":1967},[118,75869,129],{"class":128},[118,75871,712],{"class":233},[118,75873,1094],{"class":124},[118,75875,75231],{"class":47970},[118,75877,75847],{"class":124},[118,75879,712],{"class":233},[118,75881,686],{"class":128},[118,75883,75238],{"class":1967},[118,75885,129],{"class":128},[118,75887,75817],{"class":233},[118,75889,75748],{"class":128},[118,75891,75249],{"class":187},[118,75893,75894,75896,75898,75900,75902,75904,75906,75908,75910,75912,75914,75916,75919,75921],{"class":120,"line":9721},[118,75895,73746],{"class":128},[118,75897,58240],{"class":1967},[118,75899,129],{"class":128},[118,75901,712],{"class":233},[118,75903,1094],{"class":124},[118,75905,75231],{"class":47970},[118,75907,75847],{"class":124},[118,75909,712],{"class":233},[118,75911,686],{"class":128},[118,75913,75238],{"class":1967},[118,75915,129],{"class":128},[118,75917,75918],{"class":233},"'哈哈哈哈哈哈哈'",[118,75920,75748],{"class":128},[118,75922,75372],{"class":187},[118,75924,75925],{"class":120,"line":9746},[118,75926,2404],{"emptyLinePlaceholder":45},[118,75928,75929],{"class":120,"line":9769},[118,75930,75931],{"class":187},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[118,75933,75934,75936,75938,75940,75942,75944,75947,75949,75951,75953,75955,75957,75960,75962],{"class":120,"line":9793},[118,75935,73746],{"class":128},[118,75937,58240],{"class":1967},[118,75939,129],{"class":128},[118,75941,712],{"class":233},[118,75943,1094],{"class":124},[118,75945,75946],{"class":177},"[abc]",[118,75948,430],{"class":124},[118,75950,712],{"class":233},[118,75952,686],{"class":128},[118,75954,75238],{"class":1967},[118,75956,129],{"class":128},[118,75958,75959],{"class":233},"'a'",[118,75961,75246],{"class":128},[118,75963,75249],{"class":187},[118,75965,75966,75968,75970,75972,75974,75976,75978,75980,75982,75984,75986,75988,75991,75993],{"class":120,"line":9798},[118,75967,73746],{"class":128},[118,75969,58240],{"class":1967},[118,75971,129],{"class":128},[118,75973,712],{"class":233},[118,75975,1094],{"class":124},[118,75977,75946],{"class":177},[118,75979,430],{"class":124},[118,75981,712],{"class":233},[118,75983,686],{"class":128},[118,75985,75238],{"class":1967},[118,75987,129],{"class":128},[118,75989,75990],{"class":233},"'b'",[118,75992,75246],{"class":128},[118,75994,75249],{"class":187},[118,75996,75997,75999,76001,76003,76005,76007,76009,76011,76013,76015,76017,76019,76022,76024],{"class":120,"line":9803},[118,75998,73746],{"class":128},[118,76000,58240],{"class":1967},[118,76002,129],{"class":128},[118,76004,712],{"class":233},[118,76006,1094],{"class":124},[118,76008,75946],{"class":177},[118,76010,430],{"class":124},[118,76012,712],{"class":233},[118,76014,686],{"class":128},[118,76016,75238],{"class":1967},[118,76018,129],{"class":128},[118,76020,76021],{"class":233},"'c'",[118,76023,75246],{"class":128},[118,76025,75249],{"class":187},[118,76027,76028,76030,76032,76034,76036,76038,76040,76042,76044,76046,76049,76051],{"class":120,"line":9808},[118,76029,73746],{"class":128},[118,76031,58240],{"class":1967},[118,76033,129],{"class":128},[118,76035,712],{"class":233},[118,76037,75946],{"class":177},[118,76039,712],{"class":233},[118,76041,686],{"class":128},[118,76043,75238],{"class":1967},[118,76045,129],{"class":128},[118,76047,76048],{"class":233},"'ab'",[118,76050,75246],{"class":128},[118,76052,75249],{"class":187},[118,76054,76055,76057,76059,76061,76063,76065,76067,76069,76071,76073,76075,76077,76079,76081],{"class":120,"line":9817},[118,76056,73746],{"class":128},[118,76058,58240],{"class":1967},[118,76060,129],{"class":128},[118,76062,712],{"class":233},[118,76064,1094],{"class":124},[118,76066,75946],{"class":177},[118,76068,430],{"class":124},[118,76070,712],{"class":233},[118,76072,686],{"class":128},[118,76074,75238],{"class":1967},[118,76076,129],{"class":128},[118,76078,76048],{"class":233},[118,76080,75246],{"class":128},[118,76082,76083],{"class":187},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[118,76085,76086,76088,76090,76092,76094,76096,76098,76101,76103,76105,76107,76109,76111,76113],{"class":120,"line":9822},[118,76087,73746],{"class":128},[118,76089,58240],{"class":1967},[118,76091,129],{"class":128},[118,76093,712],{"class":233},[118,76095,1094],{"class":124},[118,76097,75946],{"class":177},[118,76099,76100],{"class":124},"{2}$",[118,76102,712],{"class":233},[118,76104,686],{"class":128},[118,76106,75238],{"class":1967},[118,76108,129],{"class":128},[118,76110,76048],{"class":233},[118,76112,75246],{"class":128},[118,76114,76115],{"class":187},"\u002F\u002Ftrue   可以选两个\n",[118,76117,76118,76120,76122,76124,76126,76128,76131,76133,76135,76137,76139,76141,76144,76146],{"class":120,"line":9828},[118,76119,73746],{"class":128},[118,76121,58240],{"class":1967},[118,76123,129],{"class":128},[118,76125,712],{"class":233},[118,76127,1094],{"class":124},[118,76129,76130],{"class":177},"[a-z]",[118,76132,430],{"class":124},[118,76134,712],{"class":233},[118,76136,686],{"class":128},[118,76138,75238],{"class":1967},[118,76140,129],{"class":128},[118,76142,76143],{"class":233},"'p'",[118,76145,75302],{"class":128},[118,76147,76148],{"class":187},"\u002F\u002Ftrue   依然只能选一个\n",[118,76150,76151,76153,76155,76157,76159,76161,76164,76166,76168,76170,76172,76174,76176,76178],{"class":120,"line":9849},[118,76152,73746],{"class":128},[118,76154,58240],{"class":1967},[118,76156,129],{"class":128},[118,76158,712],{"class":233},[118,76160,1094],{"class":124},[118,76162,76163],{"class":177},"[A-Z]",[118,76165,430],{"class":124},[118,76167,712],{"class":233},[118,76169,686],{"class":128},[118,76171,75238],{"class":1967},[118,76173,129],{"class":128},[118,76175,76143],{"class":233},[118,76177,75302],{"class":128},[118,76179,75372],{"class":187},[118,76181,76182,76184,76186,76188,76190,76192,76194,76196,76198,76200,76202,76204,76207,76209],{"class":120,"line":9855},[118,76183,73746],{"class":128},[118,76185,58240],{"class":1967},[118,76187,129],{"class":128},[118,76189,712],{"class":233},[118,76191,1094],{"class":124},[118,76193,76163],{"class":177},[118,76195,430],{"class":124},[118,76197,712],{"class":233},[118,76199,686],{"class":128},[118,76201,75238],{"class":1967},[118,76203,129],{"class":128},[118,76205,76206],{"class":233},"'P'",[118,76208,75302],{"class":128},[118,76210,75249],{"class":187},[118,76212,76213,76215,76217,76219,76221,76223,76226,76228,76230,76232,76234,76236,76239,76241],{"class":120,"line":9869},[118,76214,73746],{"class":128},[118,76216,58240],{"class":1967},[118,76218,129],{"class":128},[118,76220,712],{"class":233},[118,76222,1094],{"class":124},[118,76224,76225],{"class":177},"[0-9]",[118,76227,430],{"class":124},[118,76229,712],{"class":233},[118,76231,686],{"class":128},[118,76233,75238],{"class":1967},[118,76235,129],{"class":128},[118,76237,76238],{"class":233},"'0'",[118,76240,75302],{"class":128},[118,76242,75249],{"class":187},[118,76244,76245,76247,76249,76251,76253,76255,76258,76260,76262,76264,76266,76268,76270,76272],{"class":120,"line":9875},[118,76246,73746],{"class":128},[118,76248,58240],{"class":1967},[118,76250,129],{"class":128},[118,76252,712],{"class":233},[118,76254,1094],{"class":124},[118,76256,76257],{"class":177},"[a-zA-Z0-9]",[118,76259,430],{"class":124},[118,76261,712],{"class":233},[118,76263,686],{"class":128},[118,76265,75238],{"class":1967},[118,76267,129],{"class":128},[118,76269,76143],{"class":233},[118,76271,75246],{"class":128},[118,76273,75249],{"class":187},[118,76275,76276,76278,76280],{"class":120,"line":9902},[118,76277,52410],{"class":128},[118,76279,51806],{"class":51293},[118,76281,51300],{"class":128},[118,76283,76284,76286,76288],{"class":120,"line":9911},[118,76285,51778],{"class":128},[118,76287,51793],{"class":51293},[118,76289,51300],{"class":128},[118,76291,76292],{"class":120,"line":9917},[118,76293,2404],{"emptyLinePlaceholder":45},[118,76295,76296,76298,76300],{"class":120,"line":9925},[118,76297,51778],{"class":128},[118,76299,50628],{"class":51293},[118,76301,51300],{"class":128},[22003,76303,76305],{"id":76304},"_3624-修饰符","3.6.2.4 修饰符",[15,76307,76308],{},[1466,76309],{"alt":39,"src":76310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[15,76312,76313],{},"replace是个方法，使用的时候一定不要忘记括号()",[15,76315,76316],{},[1466,76317],{"alt":39,"src":76318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[109,76320,76322],{"className":50626,"code":76321,"language":50628,"meta":39,"style":39},"\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",[115,76323,76324,76334,76348,76356,76370,76390,76402,76410,76418,76426,76458,76489,76494,76526,76537,76570,76579,76587,76595],{"__ignoreMap":39},[118,76325,76326,76328,76330,76332],{"class":120,"line":121},[118,76327,51290],{"class":128},[118,76329,51294],{"class":51293},[118,76331,51297],{"class":1967},[118,76333,51300],{"class":128},[118,76335,76336,76338,76340,76342,76344,76346],{"class":120,"line":40},[118,76337,1038],{"class":128},[118,76339,50628],{"class":51293},[118,76341,51309],{"class":1967},[118,76343,174],{"class":128},[118,76345,51314],{"class":233},[118,76347,51300],{"class":128},[118,76349,76350,76352,76354],{"class":120,"line":1183},[118,76351,1038],{"class":128},[118,76353,51327],{"class":51293},[118,76355,51300],{"class":128},[118,76357,76358,76360,76362,76364,76366,76368],{"class":120,"line":1198},[118,76359,52137],{"class":128},[118,76361,51337],{"class":51293},[118,76363,51340],{"class":1967},[118,76365,174],{"class":128},[118,76367,51345],{"class":233},[118,76369,51300],{"class":128},[118,76371,76372,76374,76376,76378,76380,76382,76384,76386,76388],{"class":120,"line":1204},[118,76373,52137],{"class":128},[118,76375,51337],{"class":51293},[118,76377,14925],{"class":1967},[118,76379,174],{"class":128},[118,76381,51384],{"class":233},[118,76383,51364],{"class":1967},[118,76385,174],{"class":128},[118,76387,51391],{"class":233},[118,76389,51300],{"class":128},[118,76391,76392,76394,76396,76398,76400],{"class":120,"line":1218},[118,76393,52137],{"class":128},[118,76395,51400],{"class":51293},[118,76397,51403],{"class":128},[118,76399,51400],{"class":51293},[118,76401,51300],{"class":128},[118,76403,76404,76406,76408],{"class":120,"line":1224},[118,76405,51778],{"class":128},[118,76407,51327],{"class":51293},[118,76409,51300],{"class":128},[118,76411,76412,76414,76416],{"class":120,"line":1315},[118,76413,1038],{"class":128},[118,76415,51793],{"class":51293},[118,76417,51300],{"class":128},[118,76419,76420,76422,76424],{"class":120,"line":1321},[118,76421,52137],{"class":128},[118,76423,51806],{"class":51293},[118,76425,51300],{"class":128},[118,76427,76428,76430,76432,76434,76436,76438,76441,76443,76445,76447,76449,76451,76454,76456],{"class":120,"line":1333},[118,76429,73746],{"class":128},[118,76431,58240],{"class":1967},[118,76433,129],{"class":128},[118,76435,712],{"class":233},[118,76437,1094],{"class":124},[118,76439,76440],{"class":47970},"java",[118,76442,430],{"class":124},[118,76444,712],{"class":233},[118,76446,686],{"class":128},[118,76448,75238],{"class":1967},[118,76450,129],{"class":128},[118,76452,76453],{"class":233},"'java'",[118,76455,75748],{"class":128},[118,76457,75249],{"class":187},[118,76459,76460,76462,76464,76466,76468,76470,76472,76474,76476,76478,76480,76482,76485,76487],{"class":120,"line":1616},[118,76461,73746],{"class":128},[118,76463,58240],{"class":1967},[118,76465,129],{"class":128},[118,76467,712],{"class":233},[118,76469,1094],{"class":124},[118,76471,76440],{"class":47970},[118,76473,430],{"class":124},[118,76475,712],{"class":233},[118,76477,686],{"class":128},[118,76479,75238],{"class":1967},[118,76481,129],{"class":128},[118,76483,76484],{"class":233},"'Java'",[118,76486,75748],{"class":128},[118,76488,75372],{"class":187},[118,76490,76491],{"class":120,"line":1621},[118,76492,76493],{"class":187},"    \u002F\u002F 不区分大小写、\n",[118,76495,76496,76498,76500,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522,76524],{"class":120,"line":1627},[118,76497,73746],{"class":128},[118,76499,58240],{"class":1967},[118,76501,129],{"class":128},[118,76503,712],{"class":233},[118,76505,1094],{"class":124},[118,76507,76440],{"class":47970},[118,76509,430],{"class":124},[118,76511,712],{"class":233},[118,76513,569],{"class":124},[118,76515,686],{"class":128},[118,76517,75238],{"class":1967},[118,76519,129],{"class":128},[118,76521,76484],{"class":233},[118,76523,75748],{"class":128},[118,76525,75249],{"class":187},[118,76527,76528,76530,76532,76534],{"class":120,"line":1632},[118,76529,11226],{"class":124},[118,76531,73912],{"class":177},[118,76533,13569],{"class":124},[118,76535,76536],{"class":233}," 'java是一门编程语言，学完java工资很高'\n",[118,76538,76539,76541,76544,76546,76549,76552,76554,76556,76558,76560,76563,76565,76568],{"class":120,"line":1646},[118,76540,11226],{"class":124},[118,76542,76543],{"class":177}," result",[118,76545,13569],{"class":124},[118,76547,76548],{"class":128}," str.",[118,76550,76551],{"class":1967},"replace",[118,76553,129],{"class":128},[118,76555,712],{"class":233},[118,76557,76440],{"class":47970},[118,76559,712],{"class":233},[118,76561,76562],{"class":124},"ig",[118,76564,12440],{"class":128},[118,76566,76567],{"class":233},"'前端'",[118,76569,135],{"class":128},[118,76571,76572,76574,76576],{"class":120,"line":1651},[118,76573,73746],{"class":128},[118,76575,58240],{"class":1967},[118,76577,76578],{"class":128},"(result)\n",[118,76580,76581,76583,76585],{"class":120,"line":1657},[118,76582,52410],{"class":128},[118,76584,51806],{"class":51293},[118,76586,51300],{"class":128},[118,76588,76589,76591,76593],{"class":120,"line":1678},[118,76590,51778],{"class":128},[118,76592,51793],{"class":51293},[118,76594,51300],{"class":128},[118,76596,76597,76599,76601],{"class":120,"line":1683},[118,76598,51778],{"class":128},[118,76600,50628],{"class":51293},[118,76602,51300],{"class":128},[5131,76604,76605],{},"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":39,"searchDepth":40,"depth":40,"links":76607},[76608,76618,76630,76647,76654,76662],{"id":53353,"depth":40,"text":53354,"children":76609},[76610,76611,76612,76613,76614,76615,76616,76617],{"id":53357,"depth":1183,"text":53358},{"id":53390,"depth":1183,"text":53391},{"id":53429,"depth":1183,"text":53430},{"id":53587,"depth":1183,"text":53588},{"id":53635,"depth":1183,"text":53636},{"id":53772,"depth":1183,"text":53773},{"id":54094,"depth":1183,"text":54095},{"id":57082,"depth":1183,"text":57083},{"id":57110,"depth":40,"text":57111,"children":76619},[76620,76621,76622,76623,76624,76625,76626,76627,76628,76629],{"id":57114,"depth":1183,"text":57115},{"id":57137,"depth":1183,"text":57138},{"id":58052,"depth":1183,"text":58053},{"id":58742,"depth":1183,"text":58743},{"id":59024,"depth":1183,"text":59025},{"id":63185,"depth":1183,"text":63186},{"id":63355,"depth":1183,"text":63356},{"id":63483,"depth":1183,"text":63484},{"id":63508,"depth":1183,"text":63509},{"id":64897,"depth":1183,"text":64898},{"id":66050,"depth":40,"text":66051,"children":76631},[76632,76633,76634,76635,76636,76637,76638,76639,76640,76641,76642,76643,76644,76645,76646],{"id":66054,"depth":1183,"text":66055},{"id":66708,"depth":1183,"text":66709},{"id":68403,"depth":1183,"text":68404},{"id":68444,"depth":1183,"text":68445},{"id":68486,"depth":1183,"text":68487},{"id":68500,"depth":1183,"text":68501},{"id":68549,"depth":1183,"text":68550},{"id":68561,"depth":1183,"text":68562},{"id":68576,"depth":1183,"text":68577},{"id":68612,"depth":1183,"text":68613},{"id":68693,"depth":1183,"text":68694},{"id":68821,"depth":1183,"text":68822},{"id":68833,"depth":1183,"text":68834},{"id":68852,"depth":1183,"text":68853},{"id":70963,"depth":1183,"text":70964},{"id":70982,"depth":40,"text":70983,"children":76648},[76649,76650,76651,76652,76653],{"id":71003,"depth":1183,"text":71004},{"id":71023,"depth":1183,"text":71024},{"id":71072,"depth":1183,"text":71073},{"id":71197,"depth":1183,"text":71198},{"id":71378,"depth":1183,"text":71379},{"id":71396,"depth":40,"text":71397,"children":76655},[76656,76657,76658,76659,76660,76661],{"id":71411,"depth":1183,"text":71412},{"id":71470,"depth":1183,"text":71471},{"id":71494,"depth":1183,"text":71495},{"id":71814,"depth":1183,"text":71815},{"id":71846,"depth":1183,"text":71847},{"id":71869,"depth":1183,"text":71870},{"id":74937,"depth":40,"text":74938,"children":76663},[76664,76665],{"id":74971,"depth":1183,"text":74972},{"id":75010,"depth":1183,"text":75011},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53325,"description":42},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76672,"title":76673,"body":76674,"description":42,"extension":43,"meta":92811,"navigation":45,"path":92812,"seo":92813,"stem":92814,"__hash__":92815},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76675,"toc":92747},[76676,76679,76682,76686,76690,76695,76700,76711,76715,76720,76723,76727,76730,76735,76739,76743,76746,76751,76754,76758,76761,76769,76772,76776,76781,76786,76789,76793,76798,76803,76806,76810,76815,76818,76823,76826,76831,76834,76839,76844,76847,76850,76854,76859,76864,76867,76871,76875,76878,76881,76884,76888,76892,76897,76902,76905,76909,76914,76919,76922,76925,76928,76931,76934,76937,76940,76943,76946,76951,76955,76960,76965,76968,76971,76974,76977,76980,76983,76986,76989,76993,76997,77000,77003,77006,77011,77013,77016,77019,77022,77025,77028,77031,77034,77037,77040,77043,77046,77049,77052,77057,77062,77067,77070,77074,77077,77082,77086,77088,77099,77104,77205,77208,77211,77214,77217,77220,77223,77226,77229,77231,77234,77237,77240,77243,77246,77248,77251,77254,77257,77260,77263,77266,77268,77271,77273,77275,77278,77282,77286,77289,77292,77295,77298,77301,77304,77307,77310,77313,77318,77438,77441,77444,77449,77452,77455,77458,77461,77466,77469,77472,77475,77478,77483,77486,77586,77651,77725,77729,77732,77735,77739,77742,77756,77785,77788,77791,77794,77797,77800,77803,77806,77808,77811,77814,77817,77820,77824,77829,77833,77838,77913,77916,78099,78102,78105,78108,78111,78114,78116,78119,78122,78125,78128,78131,78134,78136,78140,78143,78148,78151,78154,78157,78160,78162,78167,78170,78173,78176,78179,78181,78186,78189,78192,78194,78196,78199,78203,78206,78209,78214,78217,78220,78223,78273,78278,78282,78287,78290,78359,78362,78371,78375,78380,78383,78386,78394,78397,78414,80216,80220,80224,80229,80232,80236,80242,80248,80400,80405,80410,80413,80416,80419,80422,80425,80428,80431,80434,80437,80440,80443,80446,80451,80455,80458,80469,80473,80478,80481,80484,80487,80490,80493,80495,80498,80501,80504,80507,80509,80526,80529,80533,80536,80541,80546,80549,80552,80556,80559,80562,80571,80574,80578,80581,80586,80591,80658,80662,80665,80668,80673,80678,80764,80769,80773,80776,80779,80794,80797,80802,80806,80811,80920,80923,80934,81084,81088,81093,81202,81206,81211,81216,81221,81224,81231,81251,81287,81451,81456,81459,81464,81471,81474,81477,81480,81539,81595,81651,81655,81660,81975,81978,81982,81985,81990,82099,82104,82108,82113,82117,82188,82192,82194,82197,82200,82238,82514,82518,82535,82601,82635,82639,82642,82647,82676,82683,82692,82697,82712,82717,82726,82729,82866,82870,82932,82936,82941,83186,83190,83195,83198,83201,83204,83207,83211,83216,84797,84801,84805,84811,84814,84819,84823,84826,84831,84834,84845,84849,84854,84858,84863,84868,84871,84876,84880,84884,84887,84892,84897,84900,84903,84906,85028,85033,85135,85138,85141,85145,85150,85322,85327,85331,85334,85339,85405,85410,85413,85544,85547,85552,85555,85558,85649,85654,85657,85660,85663,85666,85671,85676,85679,85684,85689,85694,85698,85701,85704,85709,85714,85719,85724,85778,85781,85784,85789,85792,85795,85800,85805,85810,85814,85819,85833,85838,85841,85846,85850,85855,85860,85865,85870,85875,85880,85885,85890,85893,85897,85902,85905,85908,85911,85916,85921,85924,85927,85931,85934,85937,85942,85947,85952,85957,85960,85965,85970,86031,86036,86039,86044,87285,87290,87294,87298,87303,87306,87311,87316,87319,87324,87326,87331,87335,87338,87341,87352,87356,87361,87366,87421,87426,87431,87436,87647,87652,87656,87661,87664,87666,87669,87672,88119,88124,88131,88137,88140,88143,88407,88412,88416,88681,88686,88690,88695,88700,88705,88710,89041,89044,89049,89054,89057,89061,89065,89070,89075,89080,89085,89090,89095,89099,89102,89107,89112,89115,89189,89194,89199,89204,89206,89209,89579,89584,89589,89594,89597,89600,89702,89707,89712,89815,89819,89824,89828,89832,89837,89842,89845,89850,89853,89856,90249,90254,90257,90260,90263,90266,90786,90790,90795,90800,90805,90808,90813,90816,90819,91201,91206,91208,91210,91213,91216,91728,91732,91793,91796,91799,91802,91806,91809,91814,91819,92744],[10,76677,76673],{"id":76678},"_4js进阶",[15,76680,76681],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[60,76683,76685],{"id":76684},"_41-作用域","4.1 作用域",[89,76687,76689],{"id":76688},"_411-局部作用域","4.1.1 局部作用域",[15,76691,76692],{},[1466,76693],{"alt":39,"src":76694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[15,76696,76697],{},[1466,76698],{"alt":39,"src":76699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1135,76701,76702,76705,76708],{},[75,76703,76704],{},"函数作用域在函数内部",[75,76706,76707],{},"块级作用域在{}",[75,76709,76710],{},"对象的那个{}不是作用域，不是块作用域",[89,76712,76714],{"id":76713},"_412-全局作用域","4.1.2 全局作用域",[15,76716,76717],{},[1466,76718],{"alt":39,"src":76719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[15,76721,76722],{},"window.a=10不要这样写",[89,76724,76726],{"id":76725},"_413-作用域链","4.1.3 作用域链",[15,76728,76729],{},"变量查找机制",[15,76731,76732],{},[1466,76733],{"alt":39,"src":76734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[60,76736,76738],{"id":76737},"_42-垃圾回收机制","4.2 垃圾回收机制",[89,76740,76742],{"id":76741},"_421-大体介绍","4.2.1 大体介绍",[15,76744,76745],{},"垃圾回收机制(Garbage Collection) 简称 GC",[15,76747,76748],{},[1466,76749],{"alt":39,"src":76750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[15,76752,76753],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[89,76755,76757],{"id":76756},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[15,76759,76760],{},"堆栈空间分配区别：",[72,76762,76763,76766],{},[75,76764,76765],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[75,76767,76768],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[15,76770,76771],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22003,76773,76775],{"id":76774},"_4221-引用计数","4.2.2.1 引用计数",[15,76777,76778],{},[1466,76779],{"alt":39,"src":76780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[15,76782,76783],{},[1466,76784],{"alt":39,"src":76785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[15,76787,76788],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22003,76790,76792],{"id":76791},"_4222-标记清除法","4.2.2.2 标记清除法",[15,76794,76795],{},[1466,76796],{"alt":39,"src":76797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[15,76799,76800],{},[1466,76801],{"alt":39,"src":76802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[15,76804,76805],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[60,76807,76809],{"id":76808},"_43-闭包","4.3 闭包",[15,76811,76812],{},[1466,76813],{"alt":39,"src":76814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[15,76816,76817],{},"闭包：内层函数+外层函数的变量",[15,76819,76820],{},[1466,76821],{"alt":39,"src":76822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[15,76824,76825],{},"closure就是闭包",[15,76827,76828],{},[1466,76829],{"alt":39,"src":76830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[15,76832,76833],{},"内层函数必须包含外层函数的变量才是闭包",[15,76835,76836],{},[1466,76837],{"alt":39,"src":76838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[15,76840,76841],{},[1466,76842],{"alt":39,"src":76843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[15,76845,76846],{},"闭包可能会引起内存泄漏",[15,76848,76849],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[60,76851,76853],{"id":76852},"_44-变量提升","4.4 变量提升",[15,76855,76856],{},[1466,76857],{"alt":39,"src":76858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[15,76860,76861],{},[1466,76862],{"alt":39,"src":76863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[15,76865,76866],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[60,76868,76870],{"id":76869},"_45-函数进阶","4.5 函数进阶",[89,76872,76874],{"id":76873},"_451-函数提升","4.5.1 函数提升",[15,76876,76877],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[15,76879,76880],{},"只提升函数声明，不提升函数调用",[51806,76882,76883],{},"\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",[89,76885,76887],{"id":76886},"_452-函数参数","4.5.2 函数参数",[22003,76889,76891],{"id":76890},"_4521-动态参数","4.5.2.1 动态参数",[15,76893,76894],{},[1466,76895],{"alt":39,"src":76896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[15,76898,76899],{},[1466,76900],{"alt":39,"src":76901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[15,76903,76904],{},"箭头函数里边没有arguments",[22003,76906,76908],{"id":76907},"_4522-剩余参数","4.5.2.2 剩余参数",[15,76910,76911],{},[1466,76912],{"alt":39,"src":76913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[15,76915,76916],{},[1466,76917],{"alt":39,"src":76918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[15,76920,76921],{},"剩余参数使用的时候不需要写...",[15,76923,76924],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[15,76926,76927],{},"  function getSum(a,b,...arr) {",[15,76929,76930],{},"  console.log(11)",[15,76932,76933],{},"  }",[15,76935,76936],{},"  getSum(1,2,3,4)",[15,76938,76939],{},"  将1传给a，2传给b，剩下的传给剩余参数",[15,76941,76942],{},"  getSum(1,2)",[15,76944,76945],{},"  将1传给a，2传给b，剩余参数为一个空数组",[15,76947,76948],{},[1466,76949],{"alt":39,"src":76950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22003,76952,76954],{"id":76953},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[15,76956,76957],{},[1466,76958],{"alt":39,"src":76959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[15,76961,76962],{},[1466,76963],{"alt":39,"src":76964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[15,76966,76967],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[15,76969,76970],{},"展开运算符可以用于数组之间的合并：",[15,76972,76973],{},"const arr1 = [1, 2, 3]",[15,76975,76976],{},"const arr2 = [3, 4, 5]",[15,76978,76979],{},"const arr = [...arr1, ...arr2]",[15,76981,76982],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[15,76984,76985],{},"剩余参数：函数参数使用，得到真数组",[15,76987,76988],{},"展开运算符：数组中使用，数组展开",[89,76990,76992],{"id":76991},"_453-箭头函数","4.5.3 箭头函数",[22003,76994,76996],{"id":76995},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[15,76998,76999],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[15,77001,77002],{},"它不是万能的！！！",[15,77004,77005],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[15,77007,77008],{},[1466,77009],{"alt":39,"src":77010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[15,77012,158],{},[15,77014,77015],{},"① 只有一个形参的时候，可以省略小括号：",[15,77017,77018],{},"const fn=x=>{console.log(x)}",[15,77020,77021],{},"② 只有一行代码时可以省略大括号：",[15,77023,77024],{},"const fn=x=>console.log(11)",[15,77026,77027],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[15,77029,77030],{},"const fn=x=>x+x",[15,77032,77033],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[15,77035,77036],{},"⑤ 阻止表单默认提交：",[15,77038,77039],{},"const form = document.querySelector('form')",[15,77041,77042],{},"form.addEventListener('click', ev => ev.preventDefault())",[15,77044,77045],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[15,77047,77048],{},"const fn=uname=>({uname:uname})",[15,77050,77051],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[15,77053,77054],{},[1466,77055],{"alt":39,"src":77056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[15,77058,77059],{},[1466,77060],{"alt":39,"src":77061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[15,77063,77064],{},[1466,77065],{"alt":39,"src":77066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[15,77068,77069],{},"一定不要忘记用()，有()就理解为自带return",[22003,77071,77073],{"id":77072},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[15,77075,77076],{},"箭头函数是没有动态参数的arguments",[15,77078,77079],{},[1466,77080],{"alt":39,"src":77081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22003,77083,77085],{"id":77084},"_4533-箭头函数this","4.5.3.3 箭头函数this",[15,77087,11337],{},[72,77089,77090,77093,77096],{},[75,77091,77092],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[75,77094,77095],{},"事件回调函数使用箭头函数时，this 为全局的 window",[75,77097,77098],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[15,77100,77101],{},[1466,77102],{"alt":39,"src":77103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[109,77105,77107],{"className":53060,"code":77106,"language":53062,"meta":39,"style":39},"  \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",[115,77108,77109,77117,77122,77127,77132,77137,77142,77146,77151,77155,77159,77164,77169,77174,77178,77182,77187,77192,77197],{"__ignoreMap":39},[118,77110,77111,77113,77115],{"class":120,"line":121},[118,77112,52137],{"class":128},[118,77114,51806],{"class":51293},[118,77116,51300],{"class":128},[118,77118,77119],{"class":120,"line":40},[118,77120,77121],{"class":128},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[118,77123,77124],{"class":120,"line":1183},[118,77125,77126],{"class":128},"    console.log(this) \u002F\u002F指向window\n",[118,77128,77129],{"class":120,"line":1198},[118,77130,77131],{"class":128},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[118,77133,77134],{"class":120,"line":1204},[118,77135,77136],{"class":128},"    function fn() {\n",[118,77138,77139],{"class":120,"line":1218},[118,77140,77141],{"class":128},"      console.log(this)  \u002F\u002F指向window\n",[118,77143,77144],{"class":120,"line":1224},[118,77145,2191],{"class":128},[118,77147,77148],{"class":120,"line":1315},[118,77149,77150],{"class":128},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[118,77152,77153],{"class":120,"line":1321},[118,77154,2404],{"emptyLinePlaceholder":45},[118,77156,77157],{"class":120,"line":1333},[118,77158,71516],{"class":128},[118,77160,77161],{"class":120,"line":1616},[118,77162,77163],{"class":128},"      name: 'andy',\n",[118,77165,77166],{"class":120,"line":1621},[118,77167,77168],{"class":128},"      sayHai: function () {\n",[118,77170,77171],{"class":120,"line":1627},[118,77172,77173],{"class":128},"        console.log(this)\n",[118,77175,77176],{"class":120,"line":1632},[118,77177,52391],{"class":128},[118,77179,77180],{"class":120,"line":1646},[118,77181,2191],{"class":128},[118,77183,77184],{"class":120,"line":1651},[118,77185,77186],{"class":128},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[118,77188,77189],{"class":120,"line":1657},[118,77190,77191],{"class":128},"    \u002F\u002F 2.箭头函数的this\n",[118,77193,77194],{"class":120,"line":1678},[118,77195,77196],{"class":128},"    const fn = () => console.log(this)\n",[118,77198,77199,77201,77203],{"class":120,"line":1683},[118,77200,52410],{"class":128},[118,77202,51806],{"class":51293},[118,77204,51300],{"class":128},[15,77206,77207],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[15,77209,77210],{},"const fn = () => console.log(this)",[15,77212,77213],{},"fn() \u002F\u002F指向window",[15,77215,77216],{},"\u002F\u002F 3.对象方法箭头函数 this",[15,77218,77219],{},"①",[15,77221,77222],{},"const obj = {",[15,77224,77225],{},"uname: 'pink老师',",[15,77227,77228],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[15,77230,1074],{},[15,77232,77233],{},"调用对象里边的函数",[15,77235,77236],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[15,77238,77239],{},"obj.sayHai()",[15,77241,77242],{},"②",[15,77244,77245],{},"const obj1 = {",[15,77247,77225],{},[15,77249,77250],{},"sayHai: function () {",[15,77252,77253],{},"let i = 10",[15,77255,77256],{},"const count = () => {",[15,77258,77259],{},"console.log(this)",[15,77261,77262],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[15,77264,77265],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[15,77267,1074],{},[15,77269,77270],{},"count()",[15,77272,1074],{},[15,77274,1074],{},[15,77276,77277],{},"obj1.sayHai()",[60,77279,77281],{"id":77280},"_46-解构赋值","4.6 解构赋值",[89,77283,77285],{"id":77284},"_461-数组解构","4.6.1 数组解构",[15,77287,77288],{},"以前要是使用数组中的值的话：",[15,77290,77291],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[15,77293,77294],{},"const arr=[100,60,80]",[15,77296,77297],{},"const max=arr[0]",[15,77299,77300],{},"const min=arr[1]",[15,77302,77303],{},"const avg=arr[2]",[15,77305,77306],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[15,77308,77309],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[15,77311,77312],{},"这个写法就类似于上边的那种用很多const的方法",[15,77314,77315],{},[1466,77316],{"alt":39,"src":77317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[109,77319,77321],{"className":50626,"code":77320,"language":50628,"meta":39,"style":39},"①变量之间交换值:\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",[115,77322,77323,77328,77333,77338,77343,77348,77352,77356,77361,77365,77370,77375,77379,77384,77389,77400,77410,77415,77420,77425,77429,77433],{"__ignoreMap":39},[118,77324,77325],{"class":120,"line":121},[118,77326,77327],{"class":128},"①变量之间交换值:\n",[118,77329,77330],{"class":120,"line":40},[118,77331,77332],{"class":128},"let a=1\n",[118,77334,77335],{"class":120,"line":1183},[118,77336,77337],{"class":128},"let b=2;\n",[118,77339,77340],{"class":120,"line":1198},[118,77341,77342],{"class":128},"必须加这行代码，不然就会报错\n",[118,77344,77345],{"class":120,"line":1204},[118,77346,77347],{"class":128},"[b,a]=[a,b]\n",[118,77349,77350],{"class":120,"line":1218},[118,77351,2404],{"emptyLinePlaceholder":45},[118,77353,77354],{"class":120,"line":1224},[118,77355,2404],{"emptyLinePlaceholder":45},[118,77357,77358],{"class":120,"line":1315},[118,77359,77360],{"class":128},"可以写成下面的方式：\n",[118,77362,77363],{"class":120,"line":1321},[118,77364,77332],{"class":128},[118,77366,77367],{"class":120,"line":1333},[118,77368,77369],{"class":128},"let b=2\n",[118,77371,77372],{"class":120,"line":1616},[118,77373,77374],{"class":128},";[b,a]=[a,b]\n",[118,77376,77377],{"class":120,"line":1621},[118,77378,2404],{"emptyLinePlaceholder":45},[118,77380,77381],{"class":120,"line":1627},[118,77382,77383],{"class":128},"②排序\n",[118,77385,77386],{"class":120,"line":1632},[118,77387,77388],{"class":128},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[118,77390,77391,77394,77397],{"class":120,"line":1646},[118,77392,77393],{"class":128},"for (let i = 0; i ",[118,77395,1038],{"class":77396},"s7hpK",[118,77398,77399],{"class":128}," arr1.length; i++) {\n",[118,77401,77402,77405,77407],{"class":120,"line":1651},[118,77403,77404],{"class":128},"   for (let j = 0; j ",[118,77406,1038],{"class":77396},[118,77408,77409],{"class":128}," arr1.length - 1; j++) {\n",[118,77411,77412],{"class":120,"line":1657},[118,77413,77414],{"class":128},"      if (arr1[j] > arr1[j + 1]) {\n",[118,77416,77417],{"class":120,"line":1678},[118,77418,77419],{"class":128},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[118,77421,77422],{"class":120,"line":1683},[118,77423,77424],{"class":128},"       }\n",[118,77426,77427],{"class":120,"line":1697},[118,77428,4313],{"class":128},[118,77430,77431],{"class":120,"line":1702},[118,77432,1569],{"class":128},[118,77434,77435],{"class":120,"line":1731},[118,77436,77437],{"class":128},"console.log(arr1)\n",[15,77439,77440],{},"数组解构的细节：",[15,77442,77443],{},"①变量多，单元值少",[15,77445,77446],{},[1466,77447],{"alt":39,"src":77448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[15,77450,77451],{},"防止出现undefined的方法：",[15,77453,77454],{},"const [a=0,b=0] =[1]",[15,77456,77457],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[15,77459,77460],{},"②变量少，单元值多",[15,77462,77463],{},[1466,77464],{"alt":39,"src":77465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[15,77467,77468],{},"此时可以使用剩余参数来接收多余的值",[15,77470,77471],{},"const [a,b,...c]=[1,2,3,4]",[15,77473,77474],{},"console.log(c) 输出[3,4]",[15,77476,77477],{},"③可以按需导入，忽略某些返回值",[15,77479,77480],{},[1466,77481],{"alt":39,"src":77482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[15,77484,77485],{},"④支持多维数组的结构",[109,77487,77491],{"className":77488,"code":77489,"language":77490,"meta":39,"style":39},"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",[115,77492,77493,77521,77537,77552,77567],{"__ignoreMap":39},[118,77494,77495,77497,77499,77501,77503,77505,77507,77509,77512,77514,77516,77518],{"class":120,"line":121},[118,77496,6797],{"class":124},[118,77498,51826],{"class":128},[118,77500,174],{"class":124},[118,77502,52219],{"class":128},[118,77504,346],{"class":177},[118,77506,12440],{"class":128},[118,77508,206],{"class":177},[118,77510,77511],{"class":128},", [",[118,77513,200],{"class":177},[118,77515,12440],{"class":128},[118,77517,421],{"class":177},[118,77519,77520],{"class":128},"]]\n",[118,77522,77523,77526,77528,77530,77532,77534],{"class":120,"line":40},[118,77524,77525],{"class":128},"console.",[118,77527,58240],{"class":1967},[118,77529,3855],{"class":128},[118,77531,320],{"class":177},[118,77533,4220],{"class":128},[118,77535,77536],{"class":187},"  \u002F\u002F1\n",[118,77538,77539,77541,77543,77545,77547,77549],{"class":120,"line":1183},[118,77540,77525],{"class":128},[118,77542,58240],{"class":1967},[118,77544,3855],{"class":128},[118,77546,346],{"class":177},[118,77548,4220],{"class":128},[118,77550,77551],{"class":187},"  \u002F\u002F2\n",[118,77553,77554,77556,77558,77560,77562,77564],{"class":120,"line":1198},[118,77555,77525],{"class":128},[118,77557,58240],{"class":1967},[118,77559,3855],{"class":128},[118,77561,206],{"class":177},[118,77563,4220],{"class":128},[118,77565,77566],{"class":187},"  \u002F\u002F[3,4]\n",[118,77568,77569,77571,77573,77575,77577,77579,77581,77583],{"class":120,"line":1204},[118,77570,77525],{"class":128},[118,77572,58240],{"class":1967},[118,77574,3855],{"class":128},[118,77576,206],{"class":177},[118,77578,4905],{"class":128},[118,77580,320],{"class":177},[118,77582,4220],{"class":128},[118,77584,77585],{"class":187},"  \u002F\u002F3\n",[109,77587,77589],{"className":77488,"code":77588,"language":77490,"meta":39,"style":39},"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",[115,77590,77591,77618,77629,77640],{"__ignoreMap":39},[118,77592,77593,77595,77598,77600,77602,77604,77606,77608,77610,77612,77614,77616],{"class":120,"line":121},[118,77594,6797],{"class":124},[118,77596,77597],{"class":128}," [a, b, c] ",[118,77599,174],{"class":124},[118,77601,52219],{"class":128},[118,77603,346],{"class":177},[118,77605,12440],{"class":128},[118,77607,206],{"class":177},[118,77609,77511],{"class":128},[118,77611,200],{"class":177},[118,77613,12440],{"class":128},[118,77615,421],{"class":177},[118,77617,77520],{"class":128},[118,77619,77620,77622,77624,77627],{"class":120,"line":40},[118,77621,77525],{"class":128},[118,77623,58240],{"class":1967},[118,77625,77626],{"class":128},"(a)",[118,77628,77536],{"class":187},[118,77630,77631,77633,77635,77638],{"class":120,"line":1183},[118,77632,77525],{"class":128},[118,77634,58240],{"class":1967},[118,77636,77637],{"class":128},"(b)",[118,77639,77551],{"class":187},[118,77641,77642,77644,77646,77649],{"class":120,"line":1198},[118,77643,77525],{"class":128},[118,77645,58240],{"class":1967},[118,77647,77648],{"class":128},"(c)",[118,77650,77566],{"class":187},[109,77652,77654],{"className":77488,"code":77653,"language":77490,"meta":39,"style":39},"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",[115,77655,77656,77683,77693,77703,77713],{"__ignoreMap":39},[118,77657,77658,77660,77663,77665,77667,77669,77671,77673,77675,77677,77679,77681],{"class":120,"line":121},[118,77659,6797],{"class":124},[118,77661,77662],{"class":128}," [a, b, [c, d]] ",[118,77664,174],{"class":124},[118,77666,52219],{"class":128},[118,77668,346],{"class":177},[118,77670,12440],{"class":128},[118,77672,206],{"class":177},[118,77674,77511],{"class":128},[118,77676,200],{"class":177},[118,77678,12440],{"class":128},[118,77680,421],{"class":177},[118,77682,77520],{"class":128},[118,77684,77685,77687,77689,77691],{"class":120,"line":40},[118,77686,77525],{"class":128},[118,77688,58240],{"class":1967},[118,77690,77626],{"class":128},[118,77692,77536],{"class":187},[118,77694,77695,77697,77699,77701],{"class":120,"line":1183},[118,77696,77525],{"class":128},[118,77698,58240],{"class":1967},[118,77700,77637],{"class":128},[118,77702,77551],{"class":187},[118,77704,77705,77707,77709,77711],{"class":120,"line":1198},[118,77706,77525],{"class":128},[118,77708,58240],{"class":1967},[118,77710,77648],{"class":128},[118,77712,77585],{"class":187},[118,77714,77715,77717,77719,77722],{"class":120,"line":1204},[118,77716,77525],{"class":128},[118,77718,58240],{"class":1967},[118,77720,77721],{"class":128},"(d)",[118,77723,77724],{"class":187},"  \u002F\u002F4\n",[89,77726,77728],{"id":77727},"_462-对象解构","4.6.2 对象解构",[15,77730,77731],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[15,77733,77734],{},"用的非常非常多！！！！！！",[22003,77736,77738],{"id":77737},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[15,77740,77741],{},"基本语法：",[72,77743,77744,77747,77750,77753],{},[75,77745,77746],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[75,77748,77749],{},"对象属性的值将被赋值给与属性名相同的变量",[75,77751,77752],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[75,77754,77755],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[109,77757,77759],{"className":50626,"code":77758,"language":50628,"meta":39,"style":39},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[115,77760,77761,77766,77771,77776,77780],{"__ignoreMap":39},[118,77762,77763],{"class":120,"line":121},[118,77764,77765],{"class":128},"const obj = {\n",[118,77767,77768],{"class":120,"line":40},[118,77769,77770],{"class":128},"   uname: 'pink老师',\n",[118,77772,77773],{"class":120,"line":1183},[118,77774,77775],{"class":128},"   age: 18,\n",[118,77777,77778],{"class":120,"line":1198},[118,77779,1569],{"class":128},[118,77781,77782],{"class":120,"line":1204},[118,77783,77784],{"class":128},"const { uname, age } = obj\n",[15,77786,77787],{},"上方代码这样写等价于：",[15,77789,77790],{},"const uname等价于obj.uname",[15,77792,77793],{},"变量名可以重新改名：",[15,77795,77796],{},"const uname='red老师'",[15,77798,77799],{},"const user={",[15,77801,77802],{},"  uname:'pink老师',",[15,77804,77805],{},"  age:18",[15,77807,1074],{},[15,77809,77810],{},"const {uname,age}=user",[15,77812,77813],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[15,77815,77816],{},"const {旧变量名：新变量名}=对象",[15,77818,77819],{},"const {uname:username,age}=user",[22003,77821,77823],{"id":77822},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[15,77825,77826],{},[1466,77827],{"alt":39,"src":77828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22003,77830,77832],{"id":77831},"_4623-多级对象解构","4.6.2.3 多级对象解构",[15,77834,77835],{},[1466,77836],{"alt":39,"src":77837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[109,77839,77841],{"className":53060,"code":77840,"language":53062,"meta":39,"style":39},"  \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",[115,77842,77843,77851,77856,77861,77866,77871,77876,77881,77886,77891,77895,77900,77905],{"__ignoreMap":39},[118,77844,77845,77847,77849],{"class":120,"line":121},[118,77846,52137],{"class":128},[118,77848,51806],{"class":51293},[118,77850,51300],{"class":128},[118,77852,77853],{"class":120,"line":40},[118,77854,77855],{"class":128},"    const pig = {\n",[118,77857,77858],{"class":120,"line":1183},[118,77859,77860],{"class":128},"      name: '佩奇',\n",[118,77862,77863],{"class":120,"line":1198},[118,77864,77865],{"class":128},"      family: {\n",[118,77867,77868],{"class":120,"line":1204},[118,77869,77870],{"class":128},"        mother: '猪妈妈',\n",[118,77872,77873],{"class":120,"line":1218},[118,77874,77875],{"class":128},"        father: '猪爸爸',\n",[118,77877,77878],{"class":120,"line":1224},[118,77879,77880],{"class":128},"        sister: '乔治'\n",[118,77882,77883],{"class":120,"line":1315},[118,77884,77885],{"class":128},"      },\n",[118,77887,77888],{"class":120,"line":1321},[118,77889,77890],{"class":128},"      age: 6\n",[118,77892,77893],{"class":120,"line":1333},[118,77894,2191],{"class":128},[118,77896,77897],{"class":120,"line":1616},[118,77898,77899],{"class":128},"    \u002F\u002F 多级对象解构\n",[118,77901,77902],{"class":120,"line":1621},[118,77903,77904],{"class":128},"    const { name, family: { mother, father, sister }, age } = pig\n",[118,77906,77907,77909,77911],{"class":120,"line":1627},[118,77908,52410],{"class":128},[118,77910,51806],{"class":51293},[118,77912,51300],{"class":128},[15,77914,77915],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[109,77917,77920],{"className":77918,"code":77919,"language":76440,"meta":39,"style":39},"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",[115,77921,77922,77927,77938,77950,77962,77971,77975,77986,77998,78008,78013,78017,78027,78038,78047,78051,78055,78066,78077,78086,78090,78095],{"__ignoreMap":39},[118,77923,77924],{"class":120,"line":121},[118,77925,77926],{"class":187},"    \u002F\u002F 这是后台传递过来的数据\n",[118,77928,77929,77931,77934,77936],{"class":120,"line":40},[118,77930,11226],{"class":124},[118,77932,77933],{"class":128}," msg ",[118,77935,174],{"class":124},[118,77937,15577],{"class":128},[118,77939,77940,77943,77945,77948],{"class":120,"line":1183},[118,77941,77942],{"class":233},"      \"code\"",[118,77944,987],{"class":124},[118,77946,77947],{"class":177}," 200",[118,77949,31459],{"class":128},[118,77951,77952,77955,77957,77960],{"class":120,"line":1198},[118,77953,77954],{"class":233},"      \"msg\"",[118,77956,987],{"class":124},[118,77958,77959],{"class":233}," \"获取新闻列表成功\"",[118,77961,31459],{"class":128},[118,77963,77964,77967,77969],{"class":120,"line":1204},[118,77965,77966],{"class":233},"      \"data\"",[118,77968,987],{"class":124},[118,77970,55440],{"class":128},[118,77972,77973],{"class":120,"line":1218},[118,77974,2514],{"class":128},[118,77976,77977,77980,77982,77984],{"class":120,"line":1224},[118,77978,77979],{"class":233},"          \"id\"",[118,77981,987],{"class":124},[118,77983,25123],{"class":177},[118,77985,31459],{"class":128},[118,77987,77988,77991,77993,77996],{"class":120,"line":1315},[118,77989,77990],{"class":233},"          \"title\"",[118,77992,987],{"class":124},[118,77994,77995],{"class":233}," \"5G商用自己，三大运用商收入下降\"",[118,77997,31459],{"class":128},[118,77999,78000,78003,78005],{"class":120,"line":1321},[118,78001,78002],{"class":233},"          \"count\"",[118,78004,987],{"class":124},[118,78006,78007],{"class":177}," 58\n",[118,78009,78010],{"class":120,"line":1333},[118,78011,78012],{"class":128},"        },\n",[118,78014,78015],{"class":120,"line":1616},[118,78016,2514],{"class":128},[118,78018,78019,78021,78023,78025],{"class":120,"line":1621},[118,78020,77979],{"class":233},[118,78022,987],{"class":124},[118,78024,14760],{"class":177},[118,78026,31459],{"class":128},[118,78028,78029,78031,78033,78036],{"class":120,"line":1627},[118,78030,77990],{"class":233},[118,78032,987],{"class":124},[118,78034,78035],{"class":233}," \"国际媒体头条速览\"",[118,78037,31459],{"class":128},[118,78039,78040,78042,78044],{"class":120,"line":1632},[118,78041,78002],{"class":233},[118,78043,987],{"class":124},[118,78045,78046],{"class":177}," 56\n",[118,78048,78049],{"class":120,"line":1646},[118,78050,78012],{"class":128},[118,78052,78053],{"class":120,"line":1651},[118,78054,2514],{"class":128},[118,78056,78057,78059,78061,78064],{"class":120,"line":1657},[118,78058,77979],{"class":233},[118,78060,987],{"class":124},[118,78062,78063],{"class":177}," 3",[118,78065,31459],{"class":128},[118,78067,78068,78070,78072,78075],{"class":120,"line":1678},[118,78069,77990],{"class":233},[118,78071,987],{"class":124},[118,78073,78074],{"class":233}," \"乌克兰和俄罗斯持续冲突\"",[118,78076,31459],{"class":128},[118,78078,78079,78081,78083],{"class":120,"line":1683},[118,78080,78002],{"class":233},[118,78082,987],{"class":124},[118,78084,78085],{"class":177}," 1669\n",[118,78087,78088],{"class":120,"line":1697},[118,78089,78012],{"class":128},[118,78091,78092],{"class":120,"line":1702},[118,78093,78094],{"class":128},"      ]\n",[118,78096,78097],{"class":120,"line":1731},[118,78098,2191],{"class":128},[15,78100,78101],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[15,78103,78104],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[15,78106,78107],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[15,78109,78110],{},"function({data}) {",[15,78112,78113],{},"console.log(data)",[15,78115,1074],{},[15,78117,78118],{},"render(msg)",[15,78120,78121],{},"实参传递给形参的时候解构了",[15,78123,78124],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[15,78126,78127],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[15,78129,78130],{},"function render({data:mydata}) {",[15,78132,78133],{},"  console.log(data)",[15,78135,1074],{},[89,78137,78139],{"id":78138},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[15,78141,78142],{},"有两种情况：一个是数组结构，一个是立即执行函数",[72,78144,78145],{},[75,78146,78147],{},"如果对一个数组进行遍历，有两种方式：",[15,78149,78150],{},"①法1",[15,78152,78153],{},"const arr=[1,2,3]",[15,78155,78156],{},"arr.map(function(item,index) {",[15,78158,78159],{},"  console.log(item)",[15,78161,52457],{},[15,78163,78164],{},[1466,78165],{"alt":39,"src":78166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[15,78168,78169],{},"②法2",[15,78171,78172],{},"const str='pink'",[15,78174,78175],{},"[1,2,3].map(function(item,index) {",[15,78177,78178],{},"console.log(item)",[15,78180,52457],{},[15,78182,78183],{},[1466,78184],{"alt":39,"src":78185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[15,78187,78188],{},"此时会报错",[15,78190,78191],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[15,78193,78178],{},[15,78195,52457],{},[15,78197,78198],{},"内部会当成这样处理，所以我们用分号进行隔开",[60,78200,78202],{"id":78201},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[15,78204,78205],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[15,78207,78208],{},"可以理解为加强版的for循环",[15,78210,78211],{},[1466,78212],{"alt":39,"src":78213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[15,78215,78216],{},"里边不写return，不返回数组，只遍历不返回",[15,78218,78219],{},"map是返回数组",[15,78221,78222],{},"forEach主要用于遍历数组对象",[109,78224,78226],{"className":53060,"code":78225,"language":53062,"meta":39,"style":39},"  \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",[115,78227,78228,78236,78241,78246,78251,78256,78260,78265],{"__ignoreMap":39},[118,78229,78230,78232,78234],{"class":120,"line":121},[118,78231,52137],{"class":128},[118,78233,51806],{"class":51293},[118,78235,51300],{"class":128},[118,78237,78238],{"class":120,"line":40},[118,78239,78240],{"class":128},"    const arr = ['red', 'green', 'pink']\n",[118,78242,78243],{"class":120,"line":1183},[118,78244,78245],{"class":128},"    const result = arr.forEach(function (item, index) {\n",[118,78247,78248],{"class":120,"line":1198},[118,78249,78250],{"class":128},"      console.log(item)\n",[118,78252,78253],{"class":120,"line":1204},[118,78254,78255],{"class":128},"      console.log(index)\n",[118,78257,78258],{"class":120,"line":1218},[118,78259,33454],{"class":128},[118,78261,78262],{"class":120,"line":1224},[118,78263,78264],{"class":128},"    console.log(result)\n",[118,78266,78267,78269,78271],{"class":120,"line":1315},[118,78268,52410],{"class":128},[118,78270,51806],{"class":51293},[118,78272,51300],{"class":128},[15,78274,78275],{},[1466,78276],{"alt":39,"src":78277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[60,78279,78281],{"id":78280},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[15,78283,78284],{},[1466,78285],{"alt":39,"src":78286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[15,78288,78289],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[109,78291,78293],{"className":53060,"code":78292,"language":53062,"meta":39,"style":39},"\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",[115,78294,78295,78303,78311,78316,78321,78325,78329,78334,78338,78343,78351],{"__ignoreMap":39},[118,78296,78297,78299,78301],{"class":120,"line":121},[118,78298,1038],{"class":128},[118,78300,51793],{"class":51293},[118,78302,51300],{"class":128},[118,78304,78305,78307,78309],{"class":120,"line":40},[118,78306,52137],{"class":128},[118,78308,51806],{"class":51293},[118,78310,51300],{"class":128},[118,78312,78313],{"class":120,"line":1183},[118,78314,78315],{"class":128},"    const arr = [10, 20, 30]\n",[118,78317,78318],{"class":120,"line":1198},[118,78319,78320],{"class":128},"    const newArr = arr.filter(function (item, index) {\n",[118,78322,78323],{"class":120,"line":1204},[118,78324,78250],{"class":128},[118,78326,78327],{"class":120,"line":1218},[118,78328,78255],{"class":128},[118,78330,78331],{"class":120,"line":1224},[118,78332,78333],{"class":128},"      return item >= 20\n",[118,78335,78336],{"class":120,"line":1315},[118,78337,33454],{"class":128},[118,78339,78340],{"class":120,"line":1321},[118,78341,78342],{"class":128},"    console.log(newArr)\n",[118,78344,78345,78347,78349],{"class":120,"line":1333},[118,78346,52410],{"class":128},[118,78348,51806],{"class":51293},[118,78350,51300],{"class":128},[118,78352,78353,78355,78357],{"class":120,"line":1616},[118,78354,51778],{"class":128},[118,78356,51793],{"class":51293},[118,78358,51300],{"class":128},[15,78360,78361],{},"这个也可以写成箭头函数：",[109,78363,78365],{"className":50626,"code":78364,"language":50628,"meta":39,"style":39},"const newArr = arr.filter(item => item >= 20)\n",[115,78366,78367],{"__ignoreMap":39},[118,78368,78369],{"class":120,"line":121},[118,78370,78364],{"class":128},[60,78372,78374],{"id":78373},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[15,78376,78377],{},[1466,78378],{"alt":39,"src":78379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[15,78381,78382],{},"步骤：",[15,78384,78385],{},"①：渲染页面模块",[1135,78387,78388,78391],{},[75,78389,78390],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[75,78392,78393],{},"用forEach+字符串的形式",[15,78395,78396],{},"②：点击不同需求，显示不同页面内容",[1135,78398,78399,78402,78405,78408,78411],{},[75,78400,78401],{},"点击采取事件委托方式 .filter",[75,78403,78404],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[75,78406,78407],{},"筛选条件是根据点击的 data-index 来判断",[75,78409,78410],{},"可以使用对象解构，把事件对象解构",[75,78412,78413],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[109,78415,78417],{"className":50626,"code":78416,"language":50628,"meta":39,"style":39},"\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",[115,78418,78419,78429,78443,78447,78455,78469,78489,78501,78509,78515,78525,78535,78545,78549,78553,78559,78572,78584,78594,78606,78610,78614,78621,78634,78646,78663,78681,78694,78698,78702,78714,78724,78728,78732,78739,78780,78807,78817,78821,78825,78833,78845,78849,78853,78861,78873,78885,78896,78900,78904,78913,78925,78936,78940,78944,78953,78965,78977,78981,78985,78992,79002,79014,79026,79041,79045,79049,79057,79073,79083,79093,79103,79115,79119,79123,79133,79144,79154,79158,79166,79174,79178,79186,79201,79227,79252,79277,79296,79304,79318,79323,79328,79333,79338,79343,79351,79359,79364,79375,79380,79390,79400,79410,79420,79424,79428,79437,79446,79455,79464,79468,79472,79481,79490,79499,79508,79512,79516,79525,79534,79543,79552,79556,79560,79569,79578,79587,79596,79600,79604,79613,79622,79631,79640,79644,79648,79657,79666,79675,79684,79688,79692,79701,79710,79718,79727,79731,79735,79739,79744,79756,79761,79773,79777,79794,79822,79831,79836,79846,79856,79865,79870,79875,79879,79884,79901,79905,79910,79918,79923,79950,79955,79975,79980,79992,79997,80002,80007,80018,80032,80069,80087,80120,80137,80161,80165,80170,80176,80180,80184,80188,80196,80204,80208],{"__ignoreMap":39},[118,78420,78421,78423,78425,78427],{"class":120,"line":121},[118,78422,51290],{"class":128},[118,78424,51294],{"class":51293},[118,78426,51297],{"class":1967},[118,78428,51300],{"class":128},[118,78430,78431,78433,78435,78437,78439,78441],{"class":120,"line":40},[118,78432,1038],{"class":128},[118,78434,50628],{"class":51293},[118,78436,51309],{"class":1967},[118,78438,174],{"class":128},[118,78440,51314],{"class":233},[118,78442,51300],{"class":128},[118,78444,78445],{"class":120,"line":1183},[118,78446,2404],{"emptyLinePlaceholder":45},[118,78448,78449,78451,78453],{"class":120,"line":1198},[118,78450,1038],{"class":128},[118,78452,51327],{"class":51293},[118,78454,51300],{"class":128},[118,78456,78457,78459,78461,78463,78465,78467],{"class":120,"line":1204},[118,78458,52137],{"class":128},[118,78460,51337],{"class":51293},[118,78462,51340],{"class":1967},[118,78464,174],{"class":128},[118,78466,51345],{"class":233},[118,78468,51300],{"class":128},[118,78470,78471,78473,78475,78477,78479,78481,78483,78485,78487],{"class":120,"line":1218},[118,78472,52137],{"class":128},[118,78474,51337],{"class":51293},[118,78476,14925],{"class":1967},[118,78478,174],{"class":128},[118,78480,51384],{"class":233},[118,78482,51364],{"class":1967},[118,78484,174],{"class":128},[118,78486,51391],{"class":233},[118,78488,51300],{"class":128},[118,78490,78491,78493,78495,78497,78499],{"class":120,"line":1224},[118,78492,52137],{"class":128},[118,78494,51400],{"class":51293},[118,78496,51403],{"class":128},[118,78498,51400],{"class":51293},[118,78500,51300],{"class":128},[118,78502,78503,78505,78507],{"class":120,"line":1315},[118,78504,52137],{"class":128},[118,78506,5131],{"class":51293},[118,78508,51300],{"class":128},[118,78510,78511,78513],{"class":120,"line":1321},[118,78512,6408],{"class":51293},[118,78514,15577],{"class":128},[118,78516,78517,78519,78521,78523],{"class":120,"line":1333},[118,78518,54688],{"class":177},[118,78520,51430],{"class":128},[118,78522,320],{"class":177},[118,78524,1294],{"class":128},[118,78526,78527,78529,78531,78533],{"class":120,"line":1616},[118,78528,54699],{"class":177},[118,78530,51430],{"class":128},[118,78532,320],{"class":177},[118,78534,1294],{"class":128},[118,78536,78537,78539,78541,78543],{"class":120,"line":1621},[118,78538,72589],{"class":177},[118,78540,51430],{"class":128},[118,78542,60498],{"class":177},[118,78544,1294],{"class":128},[118,78546,78547],{"class":120,"line":1627},[118,78548,2191],{"class":128},[118,78550,78551],{"class":120,"line":1632},[118,78552,2404],{"emptyLinePlaceholder":45},[118,78554,78555,78557],{"class":120,"line":1646},[118,78556,62116],{"class":1967},[118,78558,15577],{"class":128},[118,78560,78561,78563,78565,78568,78570],{"class":120,"line":1651},[118,78562,54764],{"class":177},[118,78564,51430],{"class":128},[118,78566,78567],{"class":177},"990",[118,78569,51485],{"class":124},[118,78571,1294],{"class":128},[118,78573,78574,78576,78578,78580,78582],{"class":120,"line":1657},[118,78575,54699],{"class":177},[118,78577,51430],{"class":128},[118,78579,320],{"class":177},[118,78581,51549],{"class":177},[118,78583,1294],{"class":128},[118,78585,78586,78588,78590,78592],{"class":120,"line":1678},[118,78587,55002],{"class":177},[118,78589,51430],{"class":128},[118,78591,51470],{"class":177},[118,78593,1294],{"class":128},[118,78595,78596,78599,78601,78604],{"class":120,"line":1683},[118,78597,78598],{"class":177},"      flex-wrap",[118,78600,51430],{"class":128},[118,78602,78603],{"class":177},"wrap",[118,78605,1294],{"class":128},[118,78607,78608],{"class":120,"line":1697},[118,78609,2191],{"class":128},[118,78611,78612],{"class":120,"line":1702},[118,78613,2404],{"emptyLinePlaceholder":45},[118,78615,78616,78619],{"class":120,"line":1731},[118,78617,78618],{"class":1967},"    .item",[118,78620,15577],{"class":128},[118,78622,78623,78625,78627,78630,78632],{"class":120,"line":1736},[118,78624,54764],{"class":177},[118,78626,51430],{"class":128},[118,78628,78629],{"class":177},"240",[118,78631,51485],{"class":124},[118,78633,1294],{"class":128},[118,78635,78636,78638,78640,78642,78644],{"class":120,"line":1753},[118,78637,61993],{"class":177},[118,78639,51430],{"class":128},[118,78641,574],{"class":177},[118,78643,51485],{"class":124},[118,78645,1294],{"class":128},[118,78647,78648,78650,78652,78654,78656,78659,78661],{"class":120,"line":1758},[118,78649,54688],{"class":177},[118,78651,51430],{"class":128},[118,78653,828],{"class":177},[118,78655,51485],{"class":124},[118,78657,78658],{"class":177}," 30",[118,78660,51485],{"class":124},[118,78662,1294],{"class":128},[118,78664,78665,78667,78669,78671,78674,78677,78679],{"class":120,"line":1763},[118,78666,61853],{"class":177},[118,78668,51430],{"class":128},[118,78670,28114],{"class":177},[118,78672,78673],{"class":177}," ease",[118,78675,78676],{"class":177}," .5",[118,78678,823],{"class":124},[118,78680,1294],{"class":128},[118,78682,78683,78686,78688,78690,78692],{"class":120,"line":1768},[118,78684,78685],{"class":177},"      margin-bottom",[118,78687,51430],{"class":128},[118,78689,828],{"class":177},[118,78691,51485],{"class":124},[118,78693,1294],{"class":128},[118,78695,78696],{"class":120,"line":1782},[118,78697,2191],{"class":128},[118,78699,78700],{"class":120,"line":1787},[118,78701,2404],{"emptyLinePlaceholder":45},[118,78703,78704,78707,78709,78712],{"class":120,"line":2581},[118,78705,78706],{"class":1967},"    .item:nth-child",[118,78708,129],{"class":128},[118,78710,78711],{"class":177},"4n",[118,78713,12447],{"class":128},[118,78715,78716,78718,78720,78722],{"class":120,"line":2595},[118,78717,61993],{"class":177},[118,78719,51430],{"class":128},[118,78721,320],{"class":177},[118,78723,1294],{"class":128},[118,78725,78726],{"class":120,"line":2603},[118,78727,2191],{"class":128},[118,78729,78730],{"class":120,"line":2608},[118,78731,2404],{"emptyLinePlaceholder":45},[118,78733,78734,78737],{"class":120,"line":2614},[118,78735,78736],{"class":1967},"    .item:hover",[118,78738,15577],{"class":128},[118,78740,78741,78744,78746,78748,78750,78752,78754,78756,78758,78761,78763,78765,78767,78769,78771,78773,78775,78778],{"class":120,"line":2620},[118,78742,78743],{"class":177},"      box-shadow",[118,78745,51430],{"class":128},[118,78747,320],{"class":177},[118,78749,51485],{"class":124},[118,78751,4097],{"class":177},[118,78753,51485],{"class":124},[118,78755,2152],{"class":177},[118,78757,51485],{"class":124},[118,78759,78760],{"class":177}," rgba",[118,78762,129],{"class":128},[118,78764,320],{"class":177},[118,78766,12440],{"class":128},[118,78768,320],{"class":177},[118,78770,12440],{"class":128},[118,78772,320],{"class":177},[118,78774,12440],{"class":128},[118,78776,78777],{"class":177},".2",[118,78779,2723],{"class":128},[118,78781,78782,78785,78787,78790,78792,78794,78796,78799,78801,78803,78805],{"class":120,"line":2625},[118,78783,78784],{"class":177},"      transform",[118,78786,51430],{"class":128},[118,78788,78789],{"class":177},"translate3d",[118,78791,129],{"class":128},[118,78793,320],{"class":177},[118,78795,12440],{"class":128},[118,78797,78798],{"class":177},"-4",[118,78800,51485],{"class":124},[118,78802,12440],{"class":128},[118,78804,320],{"class":177},[118,78806,2723],{"class":128},[118,78808,78809,78811,78813,78815],{"class":120,"line":7953},[118,78810,62018],{"class":177},[118,78812,51430],{"class":128},[118,78814,62023],{"class":177},[118,78816,1294],{"class":128},[118,78818,78819],{"class":120,"line":7977},[118,78820,2191],{"class":128},[118,78822,78823],{"class":120,"line":7982},[118,78824,2404],{"emptyLinePlaceholder":45},[118,78826,78827,78829,78831],{"class":120,"line":7988},[118,78828,78618],{"class":1967},[118,78830,55608],{"class":51293},[118,78832,15577],{"class":128},[118,78834,78835,78837,78839,78841,78843],{"class":120,"line":8015},[118,78836,54764],{"class":177},[118,78838,51430],{"class":128},[118,78840,439],{"class":177},[118,78842,456],{"class":124},[118,78844,1294],{"class":128},[118,78846,78847],{"class":120,"line":8020},[118,78848,2191],{"class":128},[118,78850,78851],{"class":120,"line":8026},[118,78852,2404],{"emptyLinePlaceholder":45},[118,78854,78855,78857,78859],{"class":120,"line":8038},[118,78856,78618],{"class":1967},[118,78858,62297],{"class":1967},[118,78860,15577],{"class":128},[118,78862,78863,78865,78867,78869,78871],{"class":120,"line":8050},[118,78864,54915],{"class":177},[118,78866,51430],{"class":128},[118,78868,778],{"class":177},[118,78870,51485],{"class":124},[118,78872,1294],{"class":128},[118,78874,78875,78877,78879,78881,78883],{"class":120,"line":8062},[118,78876,78685],{"class":177},[118,78878,51430],{"class":128},[118,78880,574],{"class":177},[118,78882,51485],{"class":124},[118,78884,1294],{"class":128},[118,78886,78887,78889,78891,78894],{"class":120,"line":9721},[118,78888,57409],{"class":177},[118,78890,51430],{"class":128},[118,78892,78893],{"class":177},"#666",[118,78895,1294],{"class":128},[118,78897,78898],{"class":120,"line":9746},[118,78899,2191],{"class":128},[118,78901,78902],{"class":120,"line":9769},[118,78903,2404],{"emptyLinePlaceholder":45},[118,78905,78906,78908,78911],{"class":120,"line":9793},[118,78907,78618],{"class":1967},[118,78909,78910],{"class":1967}," .price",[118,78912,15577],{"class":128},[118,78914,78915,78917,78919,78921,78923],{"class":120,"line":9798},[118,78916,54915],{"class":177},[118,78918,51430],{"class":128},[118,78920,878],{"class":177},[118,78922,51485],{"class":124},[118,78924,1294],{"class":128},[118,78926,78927,78929,78931,78934],{"class":120,"line":9803},[118,78928,57409],{"class":177},[118,78930,51430],{"class":128},[118,78932,78933],{"class":177},"firebrick",[118,78935,1294],{"class":128},[118,78937,78938],{"class":120,"line":9808},[118,78939,2191],{"class":128},[118,78941,78942],{"class":120,"line":9817},[118,78943,2404],{"emptyLinePlaceholder":45},[118,78945,78946,78948,78951],{"class":120,"line":9822},[118,78947,78618],{"class":1967},[118,78949,78950],{"class":1967}," .price::before",[118,78952,15577],{"class":128},[118,78954,78955,78958,78960,78963],{"class":120,"line":9828},[118,78956,78957],{"class":177},"      content",[118,78959,51430],{"class":128},[118,78961,78962],{"class":233},"'￥'",[118,78964,1294],{"class":128},[118,78966,78967,78969,78971,78973,78975],{"class":120,"line":9849},[118,78968,54915],{"class":177},[118,78970,51430],{"class":128},[118,78972,677],{"class":177},[118,78974,51485],{"class":124},[118,78976,1294],{"class":128},[118,78978,78979],{"class":120,"line":9855},[118,78980,2191],{"class":128},[118,78982,78983],{"class":120,"line":9869},[118,78984,2404],{"emptyLinePlaceholder":45},[118,78986,78987,78990],{"class":120,"line":9875},[118,78988,78989],{"class":1967},"    .filter",[118,78991,15577],{"class":128},[118,78993,78994,78996,78998,79000],{"class":120,"line":9902},[118,78995,55002],{"class":177},[118,78997,51430],{"class":128},[118,78999,51470],{"class":177},[118,79001,1294],{"class":128},[118,79003,79004,79006,79008,79010,79012],{"class":120,"line":9911},[118,79005,54764],{"class":177},[118,79007,51430],{"class":128},[118,79009,78567],{"class":177},[118,79011,51485],{"class":124},[118,79013,1294],{"class":128},[118,79015,79016,79018,79020,79022,79024],{"class":120,"line":9917},[118,79017,54699],{"class":177},[118,79019,51430],{"class":128},[118,79021,320],{"class":177},[118,79023,51549],{"class":177},[118,79025,1294],{"class":128},[118,79027,79028,79030,79032,79034,79036,79038],{"class":120,"line":9925},[118,79029,54688],{"class":177},[118,79031,51430],{"class":128},[118,79033,784],{"class":177},[118,79035,51485],{"class":124},[118,79037,78658],{"class":177},[118,79039,79040],{"class":124},"px\n",[118,79042,79043],{"class":120,"line":9930},[118,79044,2191],{"class":128},[118,79046,79047],{"class":120,"line":16609},[118,79048,2404],{"emptyLinePlaceholder":45},[118,79050,79051,79053,79055],{"class":120,"line":16615},[118,79052,78989],{"class":1967},[118,79054,1402],{"class":51293},[118,79056,15577],{"class":128},[118,79058,79059,79061,79063,79065,79067,79069,79071],{"class":120,"line":16638},[118,79060,54688],{"class":177},[118,79062,51430],{"class":128},[118,79064,574],{"class":177},[118,79066,51485],{"class":124},[118,79068,8955],{"class":177},[118,79070,51485],{"class":124},[118,79072,1294],{"class":128},[118,79074,79075,79077,79079,79081],{"class":120,"line":16644},[118,79076,61714],{"class":177},[118,79078,51430],{"class":128},[118,79080,61811],{"class":177},[118,79082,1294],{"class":128},[118,79084,79085,79087,79089,79091],{"class":120,"line":16667},[118,79086,57409],{"class":177},[118,79088,51430],{"class":128},[118,79090,78893],{"class":177},[118,79092,1294],{"class":128},[118,79094,79095,79097,79099,79101],{"class":120,"line":16681},[118,79096,63963],{"class":177},[118,79098,51430],{"class":128},[118,79100,54730],{"class":177},[118,79102,1294],{"class":128},[118,79104,79105,79107,79109,79111,79113],{"class":120,"line":16701},[118,79106,61743],{"class":177},[118,79108,51430],{"class":128},[118,79110,828],{"class":177},[118,79112,51485],{"class":124},[118,79114,1294],{"class":128},[118,79116,79117],{"class":120,"line":16707},[118,79118,2191],{"class":128},[118,79120,79121],{"class":120,"line":16718},[118,79122,2404],{"emptyLinePlaceholder":45},[118,79124,79125,79127,79129,79131],{"class":120,"line":16741},[118,79126,78989],{"class":1967},[118,79128,1402],{"class":51293},[118,79130,61893],{"class":1967},[118,79132,15577],{"class":128},[118,79134,79135,79137,79139,79142],{"class":120,"line":16763},[118,79136,54877],{"class":177},[118,79138,51430],{"class":128},[118,79140,79141],{"class":177},"#05943c",[118,79143,1294],{"class":128},[118,79145,79146,79148,79150,79152],{"class":120,"line":16768},[118,79147,57409],{"class":177},[118,79149,51430],{"class":128},[118,79151,60835],{"class":177},[118,79153,1294],{"class":128},[118,79155,79156],{"class":120,"line":16774},[118,79157,2191],{"class":128},[118,79159,79160,79162,79164],{"class":120,"line":16788},[118,79161,52410],{"class":128},[118,79163,5131],{"class":51293},[118,79165,51300],{"class":128},[118,79167,79168,79170,79172],{"class":120,"line":16801},[118,79169,51778],{"class":128},[118,79171,51327],{"class":51293},[118,79173,51300],{"class":128},[118,79175,79176],{"class":120,"line":16806},[118,79177,2404],{"emptyLinePlaceholder":45},[118,79179,79180,79182,79184],{"class":120,"line":16820},[118,79181,1038],{"class":128},[118,79183,51793],{"class":51293},[118,79185,51300],{"class":128},[118,79187,79188,79190,79192,79194,79196,79199],{"class":120,"line":16825},[118,79189,52137],{"class":128},[118,79191,51604],{"class":51293},[118,79193,53479],{"class":1967},[118,79195,174],{"class":128},[118,79197,79198],{"class":233},"\"filter\"",[118,79200,51300],{"class":128},[118,79202,79203,79205,79207,79209,79211,79213,79216,79218,79220,79223,79225],{"class":120,"line":16831},[118,79204,51334],{"class":128},[118,79206,21],{"class":51293},[118,79208,61050],{"class":1967},[118,79210,174],{"class":128},[118,79212,61055],{"class":233},[118,79214,79215],{"class":1967}," data-index",[118,79217,174],{"class":128},[118,79219,3682],{"class":233},[118,79221,79222],{"class":128},">0-100元\u003C\u002F",[118,79224,21],{"class":51293},[118,79226,51300],{"class":128},[118,79228,79229,79231,79233,79235,79237,79239,79241,79243,79245,79248,79250],{"class":120,"line":16836},[118,79230,51334],{"class":128},[118,79232,21],{"class":51293},[118,79234,61050],{"class":1967},[118,79236,174],{"class":128},[118,79238,61055],{"class":233},[118,79240,79215],{"class":1967},[118,79242,174],{"class":128},[118,79244,3705],{"class":233},[118,79246,79247],{"class":128},">100-300元\u003C\u002F",[118,79249,21],{"class":51293},[118,79251,51300],{"class":128},[118,79253,79254,79256,79258,79260,79262,79264,79266,79268,79270,79273,79275],{"class":120,"line":16850},[118,79255,51334],{"class":128},[118,79257,21],{"class":51293},[118,79259,61050],{"class":1967},[118,79261,174],{"class":128},[118,79263,61055],{"class":233},[118,79265,79215],{"class":1967},[118,79267,174],{"class":128},[118,79269,3718],{"class":233},[118,79271,79272],{"class":128},">300元以上\u003C\u002F",[118,79274,21],{"class":51293},[118,79276,51300],{"class":128},[118,79278,79279,79281,79283,79285,79287,79289,79292,79294],{"class":120,"line":16855},[118,79280,51334],{"class":128},[118,79282,21],{"class":51293},[118,79284,61050],{"class":1967},[118,79286,174],{"class":128},[118,79288,61055],{"class":233},[118,79290,79291],{"class":128},">全部区间\u003C\u002F",[118,79293,21],{"class":51293},[118,79295,51300],{"class":128},[118,79297,79298,79300,79302],{"class":120,"line":16860},[118,79299,52410],{"class":128},[118,79301,51604],{"class":51293},[118,79303,51300],{"class":128},[118,79305,79306,79308,79310,79312,79314,79316],{"class":120,"line":16874},[118,79307,52137],{"class":128},[118,79309,51604],{"class":51293},[118,79311,53479],{"class":1967},[118,79313,174],{"class":128},[118,79315,62601],{"class":233},[118,79317,51300],{"class":128},[118,79319,79320],{"class":120,"line":16886},[118,79321,79322],{"class":187},"    \u003C!-- \u003Cdiv class=\"item\">\n",[118,79324,79325],{"class":120,"line":16891},[118,79326,79327],{"class":187},"      \u003Cimg src=\"\" alt=\"\">\n",[118,79329,79330],{"class":120,"line":16904},[118,79331,79332],{"class":187},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[118,79334,79335],{"class":120,"line":16909},[118,79336,79337],{"class":187},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[118,79339,79340],{"class":120,"line":16914},[118,79341,79342],{"class":187},"    \u003C\u002Fdiv> -->\n",[118,79344,79345,79347,79349],{"class":120,"line":16919},[118,79346,52410],{"class":128},[118,79348,51604],{"class":51293},[118,79350,51300],{"class":128},[118,79352,79353,79355,79357],{"class":120,"line":16932},[118,79354,52137],{"class":128},[118,79356,51806],{"class":51293},[118,79358,51300],{"class":128},[118,79360,79361],{"class":120,"line":16937},[118,79362,79363],{"class":187},"    \u002F\u002F 2. 初始化数据\n",[118,79365,79366,79368,79371,79373],{"class":120,"line":32626},[118,79367,11226],{"class":124},[118,79369,79370],{"class":177}," goodsList",[118,79372,13569],{"class":124},[118,79374,55440],{"class":128},[118,79376,79377],{"class":120,"line":32632},[118,79378,79379],{"class":128},"      {\n",[118,79381,79382,79385,79388],{"class":120,"line":32638},[118,79383,79384],{"class":128},"        id: ",[118,79386,79387],{"class":233},"'4001172'",[118,79389,31459],{"class":128},[118,79391,79392,79395,79398],{"class":120,"line":32644},[118,79393,79394],{"class":128},"        name: ",[118,79396,79397],{"class":233},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[118,79399,31459],{"class":128},[118,79401,79402,79405,79408],{"class":120,"line":32650},[118,79403,79404],{"class":128},"        price: ",[118,79406,79407],{"class":233},"'289.00'",[118,79409,31459],{"class":128},[118,79411,79412,79415,79418],{"class":120,"line":32661},[118,79413,79414],{"class":128},"        picture: ",[118,79416,79417],{"class":233},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[118,79419,31459],{"class":128},[118,79421,79422],{"class":120,"line":32667},[118,79423,77885],{"class":128},[118,79425,79426],{"class":120,"line":32687},[118,79427,79379],{"class":128},[118,79429,79430,79432,79435],{"class":120,"line":32693},[118,79431,79384],{"class":128},[118,79433,79434],{"class":233},"'4001594'",[118,79436,31459],{"class":128},[118,79438,79439,79441,79444],{"class":120,"line":32704},[118,79440,79394],{"class":128},[118,79442,79443],{"class":233},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[118,79445,31459],{"class":128},[118,79447,79448,79450,79453],{"class":120,"line":32710},[118,79449,79404],{"class":128},[118,79451,79452],{"class":233},"'288.00'",[118,79454,31459],{"class":128},[118,79456,79457,79459,79462],{"class":120,"line":32716},[118,79458,79414],{"class":128},[118,79460,79461],{"class":233},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[118,79463,31459],{"class":128},[118,79465,79466],{"class":120,"line":32722},[118,79467,77885],{"class":128},[118,79469,79470],{"class":120,"line":32728},[118,79471,79379],{"class":128},[118,79473,79474,79476,79479],{"class":120,"line":32734},[118,79475,79384],{"class":128},[118,79477,79478],{"class":233},"'4001009'",[118,79480,31459],{"class":128},[118,79482,79483,79485,79488],{"class":120,"line":32740},[118,79484,79394],{"class":128},[118,79486,79487],{"class":233},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[118,79489,31459],{"class":128},[118,79491,79492,79494,79497],{"class":120,"line":32746},[118,79493,79404],{"class":128},[118,79495,79496],{"class":233},"'109.00'",[118,79498,31459],{"class":128},[118,79500,79501,79503,79506],{"class":120,"line":32766},[118,79502,79414],{"class":128},[118,79504,79505],{"class":233},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[118,79507,31459],{"class":128},[118,79509,79510],{"class":120,"line":32772},[118,79511,77885],{"class":128},[118,79513,79514],{"class":120,"line":32788},[118,79515,79379],{"class":128},[118,79517,79518,79520,79523],{"class":120,"line":32794},[118,79519,79384],{"class":128},[118,79521,79522],{"class":233},"'4001874'",[118,79524,31459],{"class":128},[118,79526,79527,79529,79532],{"class":120,"line":32808},[118,79528,79394],{"class":128},[118,79530,79531],{"class":233},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[118,79533,31459],{"class":128},[118,79535,79536,79538,79541],{"class":120,"line":32814},[118,79537,79404],{"class":128},[118,79539,79540],{"class":233},"'488.00'",[118,79542,31459],{"class":128},[118,79544,79545,79547,79550],{"class":120,"line":32829},[118,79546,79414],{"class":128},[118,79548,79549],{"class":233},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[118,79551,31459],{"class":128},[118,79553,79554],{"class":120,"line":32835},[118,79555,77885],{"class":128},[118,79557,79558],{"class":120,"line":32844},[118,79559,79379],{"class":128},[118,79561,79562,79564,79567],{"class":120,"line":32850},[118,79563,79384],{"class":128},[118,79565,79566],{"class":233},"'4001649'",[118,79568,31459],{"class":128},[118,79570,79571,79573,79576],{"class":120,"line":32859},[118,79572,79394],{"class":128},[118,79574,79575],{"class":233},"'大师监制龙泉青瓷茶叶罐'",[118,79577,31459],{"class":128},[118,79579,79580,79582,79585],{"class":120,"line":32865},[118,79581,79404],{"class":128},[118,79583,79584],{"class":233},"'139.00'",[118,79586,31459],{"class":128},[118,79588,79589,79591,79594],{"class":120,"line":32871},[118,79590,79414],{"class":128},[118,79592,79593],{"class":233},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[118,79595,31459],{"class":128},[118,79597,79598],{"class":120,"line":32880},[118,79599,77885],{"class":128},[118,79601,79602],{"class":120,"line":32886},[118,79603,79379],{"class":128},[118,79605,79606,79608,79611],{"class":120,"line":32897},[118,79607,79384],{"class":128},[118,79609,79610],{"class":233},"'3997185'",[118,79612,31459],{"class":128},[118,79614,79615,79617,79620],{"class":120,"line":32903},[118,79616,79394],{"class":128},[118,79618,79619],{"class":233},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[118,79621,31459],{"class":128},[118,79623,79624,79626,79629],{"class":120,"line":32922},[118,79625,79404],{"class":128},[118,79627,79628],{"class":233},"'108.00'",[118,79630,31459],{"class":128},[118,79632,79633,79635,79638],{"class":120,"line":32928},[118,79634,79414],{"class":128},[118,79636,79637],{"class":233},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[118,79639,31459],{"class":128},[118,79641,79642],{"class":120,"line":32939},[118,79643,77885],{"class":128},[118,79645,79646],{"class":120,"line":32945},[118,79647,79379],{"class":128},[118,79649,79650,79652,79655],{"class":120,"line":32965},[118,79651,79384],{"class":128},[118,79653,79654],{"class":233},"'3997403'",[118,79656,31459],{"class":128},[118,79658,79659,79661,79664],{"class":120,"line":32981},[118,79660,79394],{"class":128},[118,79662,79663],{"class":233},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[118,79665,31459],{"class":128},[118,79667,79668,79670,79673],{"class":120,"line":32987},[118,79669,79404],{"class":128},[118,79671,79672],{"class":233},"'100.00'",[118,79674,31459],{"class":128},[118,79676,79677,79679,79682],{"class":120,"line":33001},[118,79678,79414],{"class":128},[118,79680,79681],{"class":233},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[118,79683,31459],{"class":128},[118,79685,79686],{"class":120,"line":33007},[118,79687,77885],{"class":128},[118,79689,79690],{"class":120,"line":33013},[118,79691,79379],{"class":128},[118,79693,79694,79696,79699],{"class":120,"line":33024},[118,79695,79384],{"class":128},[118,79697,79698],{"class":233},"'3998274'",[118,79700,31459],{"class":128},[118,79702,79703,79705,79708],{"class":120,"line":33030},[118,79704,79394],{"class":128},[118,79706,79707],{"class":233},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[118,79709,31459],{"class":128},[118,79711,79712,79714,79716],{"class":120,"line":33036},[118,79713,79404],{"class":128},[118,79715,79584],{"class":233},[118,79717,31459],{"class":128},[118,79719,79720,79722,79725],{"class":120,"line":33046},[118,79721,79414],{"class":128},[118,79723,79724],{"class":233},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[118,79726,31459],{"class":128},[118,79728,79729],{"class":120,"line":33052},[118,79730,77885],{"class":128},[118,79732,79733],{"class":120,"line":33063},[118,79734,53102],{"class":128},[118,79736,79737],{"class":120,"line":33069},[118,79738,2404],{"emptyLinePlaceholder":45},[118,79740,79741],{"class":120,"line":33079},[118,79742,79743],{"class":187},"    \u002F\u002F 1.渲染函数\n",[118,79745,79746,79748,79750,79752,79754],{"class":120,"line":33084},[118,79747,70077],{"class":124},[118,79749,70080],{"class":1967},[118,79751,129],{"class":128},[118,79753,3884],{"class":5221},[118,79755,12447],{"class":128},[118,79757,79758],{"class":120,"line":33090},[118,79759,79760],{"class":187},"      \u002F\u002F 声明空字符串\n",[118,79762,79763,79766,79769,79771],{"class":120,"line":33139},[118,79764,79765],{"class":124},"      let",[118,79767,79768],{"class":128}," str ",[118,79770,174],{"class":124},[118,79772,70097],{"class":233},[118,79774,79775],{"class":120,"line":33186},[118,79776,70102],{"class":187},[118,79778,79779,79781,79784,79786,79789,79792],{"class":120,"line":33191},[118,79780,58000],{"class":128},[118,79782,79783],{"class":1967},"forEach",[118,79785,129],{"class":128},[118,79787,79788],{"class":5221},"item",[118,79790,79791],{"class":124}," =>",[118,79793,15577],{"class":128},[118,79795,79796,79798,79801,79804,79806,79809,79811,79814,79817,79819],{"class":120,"line":33197},[118,79797,61263],{"class":124},[118,79799,79800],{"class":128}," { ",[118,79802,79803],{"class":177},"name",[118,79805,12440],{"class":128},[118,79807,79808],{"class":177},"price",[118,79810,12440],{"class":128},[118,79812,79813],{"class":177},"picture",[118,79815,79816],{"class":128}," } ",[118,79818,174],{"class":124},[118,79820,79821],{"class":128}," item\n",[118,79823,79824,79827,79829],{"class":120,"line":33216},[118,79825,79826],{"class":128},"        str ",[118,79828,9482],{"class":124},[118,79830,70161],{"class":233},[118,79832,79833],{"class":120,"line":33222},[118,79834,79835],{"class":233},"          \u003Cdiv class=\"item\">\n",[118,79837,79838,79841,79843],{"class":120,"line":33242},[118,79839,79840],{"class":233},"            \u003Cimg src=\"${",[118,79842,79813],{"class":128},[118,79844,79845],{"class":233},"}\" alt=\"\">\n",[118,79847,79848,79851,79853],{"class":120,"line":33248},[118,79849,79850],{"class":233},"            \u003Cp class=\"name\">${",[118,79852,79803],{"class":128},[118,79854,79855],{"class":233},"}\u003C\u002Fp>\n",[118,79857,79858,79861,79863],{"class":120,"line":33254},[118,79859,79860],{"class":233},"            \u003Cp class=\"price\">${",[118,79862,79808],{"class":128},[118,79864,79855],{"class":233},[118,79866,79867],{"class":120,"line":33264},[118,79868,79869],{"class":233},"          \u003C\u002Fdiv>\n",[118,79871,79872],{"class":120,"line":33269},[118,79873,79874],{"class":233},"        `\n",[118,79876,79877],{"class":120,"line":33275},[118,79878,64808],{"class":128},[118,79880,79881],{"class":120,"line":33291},[118,79882,79883],{"class":187},"      \u002F\u002F 追加给List\n",[118,79885,79886,79888,79890,79892,79895,79897,79899],{"class":120,"line":33336},[118,79887,55764],{"class":128},[118,79889,54392],{"class":1967},[118,79891,129],{"class":128},[118,79893,79894],{"class":233},"'.list'",[118,79896,74242],{"class":128},[118,79898,174],{"class":124},[118,79900,73978],{"class":128},[118,79902,79903],{"class":120,"line":33342},[118,79904,2191],{"class":128},[118,79906,79907],{"class":120,"line":33348},[118,79908,79909],{"class":187},"    \u002F\u002F 页面一打开就需要渲染\n",[118,79911,79912,79915],{"class":120,"line":33354},[118,79913,79914],{"class":1967},"    render",[118,79916,79917],{"class":128},"(goodsList)\n",[118,79919,79920],{"class":120,"line":33365},[118,79921,79922],{"class":187},"    \u002F\u002F 2.过滤筛选\n",[118,79924,79925,79927,79929,79931,79934,79936,79938,79940,79942,79944,79946,79948],{"class":120,"line":33371},[118,79926,52400],{"class":128},[118,79928,54392],{"class":1967},[118,79930,129],{"class":128},[118,79932,79933],{"class":233},"'.filter'",[118,79935,30819],{"class":128},[118,79937,57806],{"class":1967},[118,79939,129],{"class":128},[118,79941,57811],{"class":233},[118,79943,12440],{"class":128},[118,79945,203],{"class":5221},[118,79947,79791],{"class":124},[118,79949,15577],{"class":128},[118,79951,79952],{"class":120,"line":33377},[118,79953,79954],{"class":187},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[118,79956,79957,79959,79961,79964,79966,79968,79970,79972],{"class":120,"line":33383},[118,79958,58221],{"class":124},[118,79960,79800],{"class":128},[118,79962,79963],{"class":177},"tagName",[118,79965,12440],{"class":128},[118,79967,31530],{"class":177},[118,79969,79816],{"class":128},[118,79971,174],{"class":124},[118,79973,79974],{"class":128}," e.target\n",[118,79976,79977],{"class":120,"line":33401},[118,79978,79979],{"class":187},"      \u002F\u002F 判断\n",[118,79981,79982,79984,79986,79988,79990],{"class":120,"line":33415},[118,79983,54473],{"class":124},[118,79985,67027],{"class":128},[118,79987,54479],{"class":124},[118,79989,68249],{"class":233},[118,79991,12447],{"class":128},[118,79993,79994],{"class":120,"line":33424},[118,79995,79996],{"class":187},"        \u002F\u002F console.log(11)\n",[118,79998,79999],{"class":120,"line":33433},[118,80000,80001],{"class":187},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[118,80003,80004],{"class":120,"line":33442},[118,80005,80006],{"class":187},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[118,80008,80009,80011,80013,80015],{"class":120,"line":33451},[118,80010,51823],{"class":124},[118,80012,51826],{"class":128},[118,80014,174],{"class":124},[118,80016,80017],{"class":128}," goodsList\n",[118,80019,80020,80022,80025,80027,80030],{"class":120,"line":33457},[118,80021,2501],{"class":124},[118,80023,80024],{"class":128}," (dataset.index ",[118,80026,54479],{"class":124},[118,80028,80029],{"class":233}," '1'",[118,80031,12447],{"class":128},[118,80033,80034,80037,80039,80042,80045,80047,80049,80051,80054,80056,80058,80061,80063,80065,80067],{"class":120,"line":33463},[118,80035,80036],{"class":128},"          arr ",[118,80038,174],{"class":124},[118,80040,80041],{"class":128}," goodsList.",[118,80043,80044],{"class":1967},"filter",[118,80046,129],{"class":128},[118,80048,79788],{"class":5221},[118,80050,79791],{"class":124},[118,80052,80053],{"class":128}," item.price ",[118,80055,1714],{"class":124},[118,80057,4097],{"class":177},[118,80059,80060],{"class":124}," &&",[118,80062,80053],{"class":128},[118,80064,1592],{"class":124},[118,80066,5759],{"class":177},[118,80068,135],{"class":128},[118,80070,80071,80074,80076,80078,80080,80082,80085],{"class":120,"line":33471},[118,80072,80073],{"class":128},"        } ",[118,80075,1705],{"class":124},[118,80077,1708],{"class":124},[118,80079,80024],{"class":128},[118,80081,54479],{"class":124},[118,80083,80084],{"class":233}," '2'",[118,80086,12447],{"class":128},[118,80088,80089,80091,80093,80095,80097,80099,80101,80103,80105,80107,80109,80111,80113,80115,80118],{"class":120,"line":33476},[118,80090,80036],{"class":128},[118,80092,174],{"class":124},[118,80094,80041],{"class":128},[118,80096,80044],{"class":1967},[118,80098,129],{"class":128},[118,80100,79788],{"class":5221},[118,80102,79791],{"class":124},[118,80104,80053],{"class":128},[118,80106,1714],{"class":124},[118,80108,5759],{"class":177},[118,80110,80060],{"class":124},[118,80112,80053],{"class":128},[118,80114,1592],{"class":124},[118,80116,80117],{"class":177}," 300",[118,80119,135],{"class":128},[118,80121,80122,80124,80126,80128,80130,80132,80135],{"class":120,"line":33482},[118,80123,80073],{"class":128},[118,80125,1705],{"class":124},[118,80127,1708],{"class":124},[118,80129,80024],{"class":128},[118,80131,54479],{"class":124},[118,80133,80134],{"class":233}," '3'",[118,80136,12447],{"class":128},[118,80138,80139,80141,80143,80145,80147,80149,80151,80153,80155,80157,80159],{"class":120,"line":33493},[118,80140,80036],{"class":128},[118,80142,174],{"class":124},[118,80144,80041],{"class":128},[118,80146,80044],{"class":1967},[118,80148,129],{"class":128},[118,80150,79788],{"class":5221},[118,80152,79791],{"class":124},[118,80154,80053],{"class":128},[118,80156,1714],{"class":124},[118,80158,80117],{"class":177},[118,80160,135],{"class":128},[118,80162,80163],{"class":120,"line":33499},[118,80164,2533],{"class":128},[118,80166,80167],{"class":120,"line":33519},[118,80168,80169],{"class":187},"        \u002F\u002F 渲染函数\n",[118,80171,80172,80174],{"class":120,"line":33525},[118,80173,70401],{"class":1967},[118,80175,52405],{"class":128},[118,80177,80178],{"class":120,"line":33531},[118,80179,52391],{"class":128},[118,80181,80182],{"class":120,"line":33537},[118,80183,2404],{"emptyLinePlaceholder":45},[118,80185,80186],{"class":120,"line":33554},[118,80187,33454],{"class":128},[118,80189,80190,80192,80194],{"class":120,"line":33560},[118,80191,52410],{"class":128},[118,80193,51806],{"class":51293},[118,80195,51300],{"class":128},[118,80197,80198,80200,80202],{"class":120,"line":33566},[118,80199,51778],{"class":128},[118,80201,51793],{"class":51293},[118,80203,51300],{"class":128},[118,80205,80206],{"class":120,"line":33572},[118,80207,2404],{"emptyLinePlaceholder":45},[118,80209,80210,80212,80214],{"class":120,"line":33578},[118,80211,51778],{"class":128},[118,80213,50628],{"class":51293},[118,80215,51300],{"class":128},[60,80217,80219],{"id":80218},"_410-深入了解对象","4.10 深入了解对象",[89,80221,80223],{"id":80222},"_4101-创建对象","4.10.1 创建对象",[15,80225,80226],{},[1466,80227],{"alt":39,"src":80228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[15,80230,80231],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[89,80233,80235],{"id":80234},"_4102-构造函数","4.10.2 构造函数",[15,80237,80238,80241],{},[278,80239,80240],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[15,80243,80244,80247],{},[278,80245,80246],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[109,80249,80251],{"className":50626,"code":80250,"language":50628,"meta":39,"style":39},"\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",[115,80252,80253,80261,80266,80287,80300,80312,80324,80328,80333,80360,80365,80392],{"__ignoreMap":39},[118,80254,80255,80257,80259],{"class":120,"line":121},[118,80256,1038],{"class":128},[118,80258,51806],{"class":51293},[118,80260,51300],{"class":128},[118,80262,80263],{"class":120,"line":40},[118,80264,80265],{"class":187},"\u002F\u002F例：\n",[118,80267,80268,80270,80273,80275,80277,80279,80281,80283,80285],{"class":120,"line":1183},[118,80269,54442],{"class":124},[118,80271,80272],{"class":1967}," Pig",[118,80274,129],{"class":128},[118,80276,79803],{"class":5221},[118,80278,506],{"class":128},[118,80280,70214],{"class":5221},[118,80282,506],{"class":128},[118,80284,70231],{"class":5221},[118,80286,12447],{"class":128},[118,80288,80289,80292,80295,80297],{"class":120,"line":1198},[118,80290,80291],{"class":177},"    this",[118,80293,80294],{"class":128},".name",[118,80296,174],{"class":124},[118,80298,80299],{"class":128},"name\n",[118,80301,80302,80304,80307,80309],{"class":120,"line":1204},[118,80303,80291],{"class":177},[118,80305,80306],{"class":128},".age",[118,80308,174],{"class":124},[118,80310,80311],{"class":128},"age\n",[118,80313,80314,80316,80319,80321],{"class":120,"line":1218},[118,80315,80291],{"class":177},[118,80317,80318],{"class":128},".gender",[118,80320,174],{"class":124},[118,80322,80323],{"class":128},"gender    \n",[118,80325,80326],{"class":120,"line":1224},[118,80327,1569],{"class":128},[118,80329,80330],{"class":120,"line":1315},[118,80331,80332],{"class":187},"\u002F\u002F创建佩奇对象\n",[118,80334,80335,80337,80340,80342,80344,80346,80349,80351,80353,80355,80358],{"class":120,"line":1321},[118,80336,6797],{"class":124},[118,80338,80339],{"class":177}," Peppa",[118,80341,11722],{"class":124},[118,80343,80272],{"class":1967},[118,80345,129],{"class":128},[118,80347,80348],{"class":233},"'佩奇'",[118,80350,506],{"class":128},[118,80352,472],{"class":177},[118,80354,506],{"class":128},[118,80356,80357],{"class":233},"'女'",[118,80359,135],{"class":128},[118,80361,80362],{"class":120,"line":1333},[118,80363,80364],{"class":187},"\u002F\u002F创建乔治对象\n",[118,80366,80367,80369,80372,80374,80376,80378,80381,80383,80385,80387,80390],{"class":120,"line":1616},[118,80368,6797],{"class":124},[118,80370,80371],{"class":177}," George",[118,80373,11722],{"class":124},[118,80375,80272],{"class":1967},[118,80377,129],{"class":128},[118,80379,80380],{"class":233},"'乔治'",[118,80382,506],{"class":128},[118,80384,200],{"class":177},[118,80386,506],{"class":128},[118,80388,80389],{"class":233},"'男'",[118,80391,135],{"class":128},[118,80393,80394,80396,80398],{"class":120,"line":1621},[118,80395,51778],{"class":128},[118,80397,51806],{"class":51293},[118,80399,51300],{"class":128},[15,80401,80402],{},[1466,80403],{"alt":39,"src":80404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[15,80406,80407],{},[1466,80408],{"alt":39,"src":80409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[15,80411,80412],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[15,80414,80415],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[15,80417,80418],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[15,80420,80421],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[15,80423,80424],{},"这里用等号是因为：对象.属性=值",[15,80426,80427],{},"①利用对象字面量创建对象",[15,80429,80430],{},"const o={",[15,80432,80433],{},"name:'pink'",[15,80435,80436],{},"} ②利用new Object创建对象",[15,80438,80439],{},"const o=new Object({name:'pink'})",[15,80441,80442],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[15,80444,80445],{},"构造函数创建对象的执行过程：",[15,80447,80448],{},[1466,80449],{"alt":39,"src":80450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[89,80452,80454],{"id":80453},"_4103-实例成员","4.10.3 实例成员",[15,80456,80457],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[72,80459,80460,80463,80466],{},[75,80461,80462],{},"实例对象的属性和方法即为实例成员",[75,80464,80465],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[75,80467,80468],{},"构造函数创建的实例对象彼此独立互不影响",[89,80470,80472],{"id":80471},"_4104-静态成员","4.10.4 静态成员",[15,80474,80475],{},[1466,80476],{"alt":39,"src":80477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[15,80479,80480],{},"静态成员有Date.now() Math.PI Math.random()",[15,80482,80483],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[15,80485,80486],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[15,80488,80489],{},"function Pig(name) n {",[15,80491,80492],{},"this.name=name",[15,80494,1074],{},[15,80496,80497],{},"Pig.eyes=2",[15,80499,80500],{},"Pig.sayHai=function () { console.log(this) }",[15,80502,80503],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[15,80505,80506],{},"console.log(Pig.eyes) \u002F\u002F2",[15,80508,11337],{},[72,80510,80511,80514,80517,80520,80523],{},[75,80512,80513],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[75,80515,80516],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[75,80518,80519],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[75,80521,80522],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[75,80524,80525],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[15,80527,80528],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[89,80530,80532],{"id":80531},"_4105-内置构造函数","4.10.5 内置构造函数",[15,80534,80535],{},"内置构造函数包含：",[15,80537,80538],{},[1466,80539],{"alt":39,"src":80540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[15,80542,80543],{},[1466,80544],{"alt":39,"src":80545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[15,80547,80548],{},"这些基本数据类型，js对他们进行了包装",[51806,80550,80551],{},"\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",[22003,80553,80555],{"id":80554},"_41051-object","4.10.5.1 Object",[15,80557,80558],{},"Object 是内置的构造函数，用于创建普通对象",[15,80560,80561],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[109,80563,80565],{"className":50626,"code":80564,"language":50628,"meta":39,"style":39},"const user=new Object({name:'小明',age:15})\n",[115,80566,80567],{"__ignoreMap":39},[118,80568,80569],{"class":120,"line":121},[118,80570,80564],{"class":128},[15,80572,80573],{},"三个常用的静态方法：",[22915,80575,80577],{"id":80576},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[15,80579,80580],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[15,80582,80583],{},[1466,80584],{"alt":39,"src":80585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[15,80587,80588],{},[1466,80589],{"alt":39,"src":80590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[109,80592,80594],{"className":53060,"code":80593,"language":53062,"meta":39,"style":39},"\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",[115,80595,80596,80604,80612,80617,80622,80627,80632,80637,80642,80650],{"__ignoreMap":39},[118,80597,80598,80600,80602],{"class":120,"line":121},[118,80599,1038],{"class":128},[118,80601,51793],{"class":51293},[118,80603,51300],{"class":128},[118,80605,80606,80608,80610],{"class":120,"line":40},[118,80607,52137],{"class":128},[118,80609,51806],{"class":51293},[118,80611,51300],{"class":128},[118,80613,80614],{"class":120,"line":1183},[118,80615,80616],{"class":128},"    const o = { name: 'pink', age: 6 }\n",[118,80618,80619],{"class":120,"line":1198},[118,80620,80621],{"class":128},"    \u002F\u002F 获得所有属性名\n",[118,80623,80624],{"class":120,"line":1204},[118,80625,80626],{"class":128},"    const arr = Object.keys(o)\n",[118,80628,80629],{"class":120,"line":1218},[118,80630,80631],{"class":128},"    console.log(arr)\n",[118,80633,80634],{"class":120,"line":1224},[118,80635,80636],{"class":128},"    \u002F\u002F 获得所有属性值\n",[118,80638,80639],{"class":120,"line":1315},[118,80640,80641],{"class":128},"    console.log(Object.values(o))\n",[118,80643,80644,80646,80648],{"class":120,"line":1321},[118,80645,52410],{"class":128},[118,80647,51806],{"class":51293},[118,80649,51300],{"class":128},[118,80651,80652,80654,80656],{"class":120,"line":1333},[118,80653,51778],{"class":128},[118,80655,51793],{"class":51293},[118,80657,51300],{"class":128},[22915,80659,80661],{"id":80660},"_410512-object-assign","4.10.5.1.2 Object. assign",[15,80663,80664],{},"Object.assign(oo,o)",[15,80666,80667],{},"后的东西添加给前 是追加",[15,80669,80670],{},[1466,80671],{"alt":39,"src":80672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[15,80674,80675],{},[1466,80676],{"alt":39,"src":80677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[109,80679,80681],{"className":53060,"code":80680,"language":53062,"meta":39,"style":39},"\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",[115,80682,80683,80691,80699,80703,80707,80711,80715,80719,80723,80728,80733,80738,80743,80748,80756],{"__ignoreMap":39},[118,80684,80685,80687,80689],{"class":120,"line":121},[118,80686,1038],{"class":128},[118,80688,51793],{"class":51293},[118,80690,51300],{"class":128},[118,80692,80693,80695,80697],{"class":120,"line":40},[118,80694,52137],{"class":128},[118,80696,51806],{"class":51293},[118,80698,51300],{"class":128},[118,80700,80701],{"class":120,"line":1183},[118,80702,80616],{"class":128},[118,80704,80705],{"class":120,"line":1198},[118,80706,80621],{"class":128},[118,80708,80709],{"class":120,"line":1204},[118,80710,80626],{"class":128},[118,80712,80713],{"class":120,"line":1218},[118,80714,80631],{"class":128},[118,80716,80717],{"class":120,"line":1224},[118,80718,80636],{"class":128},[118,80720,80721],{"class":120,"line":1315},[118,80722,80641],{"class":128},[118,80724,80725],{"class":120,"line":1321},[118,80726,80727],{"class":128},"    const oo = {}\n",[118,80729,80730],{"class":120,"line":1333},[118,80731,80732],{"class":128},"    Object.assign(oo, o)\n",[118,80734,80735],{"class":120,"line":1616},[118,80736,80737],{"class":128},"    console.log(oo)\n",[118,80739,80740],{"class":120,"line":1621},[118,80741,80742],{"class":128},"    Object.assign(o, { gender: '女' })\n",[118,80744,80745],{"class":120,"line":1627},[118,80746,80747],{"class":128},"    console.log(o)\n",[118,80749,80750,80752,80754],{"class":120,"line":1632},[118,80751,52410],{"class":128},[118,80753,51806],{"class":51293},[118,80755,51300],{"class":128},[118,80757,80758,80760,80762],{"class":120,"line":1646},[118,80759,51778],{"class":128},[118,80761,51793],{"class":51293},[118,80763,51300],{"class":128},[15,80765,80766],{},[1466,80767],{"alt":39,"src":80768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22003,80770,80772],{"id":80771},"_41052-array","4.10.5.2 Array",[15,80774,80775],{},"Array 是内置的构造函数，用于创建数组",[15,80777,80778],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[109,80780,80782],{"className":50626,"code":80781,"language":50628,"meta":39,"style":39},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[115,80783,80784,80789],{"__ignoreMap":39},[118,80785,80786],{"class":120,"line":121},[118,80787,80788],{"class":128},"const arr=new Array(3,5)\n",[118,80790,80791],{"class":120,"line":40},[118,80792,80793],{"class":128},"console.log(arr)  \u002F\u002F[3,5]\n",[15,80795,80796],{},"Array的实例方法，这个方法是实例成员",[15,80798,80799],{},[1466,80800],{"alt":39,"src":80801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22915,80803,80805],{"id":80804},"_410521-reduce","4.10.5.2.1 reduce",[15,80807,80808],{},[1466,80809],{"alt":39,"src":80810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[109,80812,80814],{"className":53060,"code":80813,"language":53062,"meta":39,"style":39},"\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",[115,80815,80816,80824,80832,80837,80842,80847,80852,80856,80861,80866,80871,80875,80880,80885,80889,80894,80899,80904,80912],{"__ignoreMap":39},[118,80817,80818,80820,80822],{"class":120,"line":121},[118,80819,1038],{"class":128},[118,80821,51793],{"class":51293},[118,80823,51300],{"class":128},[118,80825,80826,80828,80830],{"class":120,"line":40},[118,80827,52137],{"class":128},[118,80829,51806],{"class":51293},[118,80831,51300],{"class":128},[118,80833,80834],{"class":120,"line":1183},[118,80835,80836],{"class":128},"    const arr = [1, 5, 8]\n",[118,80838,80839],{"class":120,"line":1198},[118,80840,80841],{"class":128},"    \u002F\u002F 1.没有初始值\n",[118,80843,80844],{"class":120,"line":1204},[118,80845,80846],{"class":128},"    const total = arr.reduce(function (prev, current) {\n",[118,80848,80849],{"class":120,"line":1218},[118,80850,80851],{"class":128},"      return prev + current\n",[118,80853,80854],{"class":120,"line":1224},[118,80855,33454],{"class":128},[118,80857,80858],{"class":120,"line":1315},[118,80859,80860],{"class":128},"    console.log(total)   \u002F\u002F14\n",[118,80862,80863],{"class":120,"line":1321},[118,80864,80865],{"class":128},"    \u002F\u002F 2.有初始值\n",[118,80867,80868],{"class":120,"line":1333},[118,80869,80870],{"class":128},"    const total1 = arr.reduce(function (prev, current) {\n",[118,80872,80873],{"class":120,"line":1616},[118,80874,80851],{"class":128},[118,80876,80877],{"class":120,"line":1621},[118,80878,80879],{"class":128},"    }, 10)\n",[118,80881,80882],{"class":120,"line":1627},[118,80883,80884],{"class":128},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[118,80886,80887],{"class":120,"line":1632},[118,80888,2404],{"emptyLinePlaceholder":45},[118,80890,80891],{"class":120,"line":1646},[118,80892,80893],{"class":128},"    \u002F\u002F 3.箭头函数写法\n",[118,80895,80896],{"class":120,"line":1651},[118,80897,80898],{"class":128},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[118,80900,80901],{"class":120,"line":1657},[118,80902,80903],{"class":128},"    console.log(total2)   \u002F\u002F24\n",[118,80905,80906,80908,80910],{"class":120,"line":1678},[118,80907,52410],{"class":128},[118,80909,51806],{"class":51293},[118,80911,51300],{"class":128},[118,80913,80914,80916,80918],{"class":120,"line":1683},[118,80915,51778],{"class":128},[118,80917,51793],{"class":51293},[118,80919,51300],{"class":128},[15,80921,80922],{},"执行过程：",[72,80924,80925,80928,80931],{},[75,80926,80927],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[75,80929,80930],{},"每一次循环，把返回值给作为下一次循环的上一次值",[75,80932,80933],{},"如果有起始值，则起始值作为上一次值",[109,80935,80937],{"className":53060,"code":80936,"language":53062,"meta":39,"style":39},"\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",[115,80938,80939,80947,80955,80959,80963,80967,80971,80975,80979,80984,80989,80994,80999,81004,81008,81012,81016,81020,81024,81028,81033,81037,81042,81046,81051,81056,81060,81064,81068,81076],{"__ignoreMap":39},[118,80940,80941,80943,80945],{"class":120,"line":121},[118,80942,1038],{"class":128},[118,80944,51793],{"class":51293},[118,80946,51300],{"class":128},[118,80948,80949,80951,80953],{"class":120,"line":40},[118,80950,52137],{"class":128},[118,80952,51806],{"class":51293},[118,80954,51300],{"class":128},[118,80956,80957],{"class":120,"line":1183},[118,80958,80836],{"class":128},[118,80960,80961],{"class":120,"line":1198},[118,80962,80841],{"class":128},[118,80964,80965],{"class":120,"line":1204},[118,80966,80846],{"class":128},[118,80968,80969],{"class":120,"line":1218},[118,80970,80851],{"class":128},[118,80972,80973],{"class":120,"line":1224},[118,80974,33454],{"class":128},[118,80976,80977],{"class":120,"line":1315},[118,80978,80860],{"class":128},[118,80980,80981],{"class":120,"line":1321},[118,80982,80983],{"class":128},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[118,80985,80986],{"class":120,"line":1333},[118,80987,80988],{"class":128},"    \u002F\u002F     1              5                    6\n",[118,80990,80991],{"class":120,"line":1616},[118,80992,80993],{"class":128},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[118,80995,80996],{"class":120,"line":1621},[118,80997,80998],{"class":128},"    \u002F\u002F     6              8                    14\n",[118,81000,81001],{"class":120,"line":1627},[118,81002,81003],{"class":128},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[118,81005,81006],{"class":120,"line":1632},[118,81007,80865],{"class":128},[118,81009,81010],{"class":120,"line":1646},[118,81011,80870],{"class":128},[118,81013,81014],{"class":120,"line":1651},[118,81015,80851],{"class":128},[118,81017,81018],{"class":120,"line":1657},[118,81019,80879],{"class":128},[118,81021,81022],{"class":120,"line":1678},[118,81023,80884],{"class":128},[118,81025,81026],{"class":120,"line":1683},[118,81027,80983],{"class":128},[118,81029,81030],{"class":120,"line":1697},[118,81031,81032],{"class":128},"    \u002F\u002F     10             1                     11\n",[118,81034,81035],{"class":120,"line":1702},[118,81036,80993],{"class":128},[118,81038,81039],{"class":120,"line":1731},[118,81040,81041],{"class":128},"    \u002F\u002F     11             5                    16\n",[118,81043,81044],{"class":120,"line":1736},[118,81045,80993],{"class":128},[118,81047,81048],{"class":120,"line":1753},[118,81049,81050],{"class":128},"    \u002F\u002F     16             8                    24\n",[118,81052,81053],{"class":120,"line":1758},[118,81054,81055],{"class":128},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[118,81057,81058],{"class":120,"line":1763},[118,81059,80893],{"class":128},[118,81061,81062],{"class":120,"line":1768},[118,81063,80898],{"class":128},[118,81065,81066],{"class":120,"line":1782},[118,81067,80903],{"class":128},[118,81069,81070,81072,81074],{"class":120,"line":1787},[118,81071,52410],{"class":128},[118,81073,51806],{"class":51293},[118,81075,51300],{"class":128},[118,81077,81078,81080,81082],{"class":120,"line":2581},[118,81079,51778],{"class":128},[118,81081,51793],{"class":51293},[118,81083,51300],{"class":128},[22915,81085,81087],{"id":81086},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[15,81089,81090],{},[1466,81091],{"alt":39,"src":81092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[109,81094,81096],{"className":53060,"code":81095,"language":53062,"meta":39,"style":39},"\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",[115,81097,81098,81106,81114,81119,81124,81129,81134,81138,81143,81148,81153,81158,81163,81168,81172,81177,81181,81186,81194],{"__ignoreMap":39},[118,81099,81100,81102,81104],{"class":120,"line":121},[118,81101,1038],{"class":128},[118,81103,51793],{"class":51293},[118,81105,51300],{"class":128},[118,81107,81108,81110,81112],{"class":120,"line":40},[118,81109,52137],{"class":128},[118,81111,51806],{"class":51293},[118,81113,51300],{"class":128},[118,81115,81116],{"class":120,"line":1183},[118,81117,81118],{"class":128},"    const arr = [\n",[118,81120,81121],{"class":120,"line":1198},[118,81122,81123],{"class":128},"      { name: '张三', salary: 10000 },\n",[118,81125,81126],{"class":120,"line":1204},[118,81127,81128],{"class":128},"      { name: '李四', salary: 10000 },\n",[118,81130,81131],{"class":120,"line":1218},[118,81132,81133],{"class":128},"      { name: '王五', salary: 10000 }\n",[118,81135,81136],{"class":120,"line":1224},[118,81137,53102],{"class":128},[118,81139,81140],{"class":120,"line":1315},[118,81141,81142],{"class":128},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[118,81144,81145],{"class":120,"line":1321},[118,81146,81147],{"class":128},"    \u002F\u002F prev是累计值\n",[118,81149,81150],{"class":120,"line":1333},[118,81151,81152],{"class":128},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[118,81154,81155],{"class":120,"line":1616},[118,81156,81157],{"class":128},"    console.log(total)\n",[118,81159,81160],{"class":120,"line":1621},[118,81161,81162],{"class":128},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[118,81164,81165],{"class":120,"line":1627},[118,81166,81167],{"class":128},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[118,81169,81170],{"class":120,"line":1632},[118,81171,81162],{"class":128},[118,81173,81174],{"class":120,"line":1646},[118,81175,81176],{"class":128},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[118,81178,81179],{"class":120,"line":1651},[118,81180,81162],{"class":128},[118,81182,81183],{"class":120,"line":1657},[118,81184,81185],{"class":128},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[118,81187,81188,81190,81192],{"class":120,"line":1678},[118,81189,52410],{"class":128},[118,81191,51806],{"class":51293},[118,81193,51300],{"class":128},[118,81195,81196,81198,81200],{"class":120,"line":1683},[118,81197,51778],{"class":128},[118,81199,51793],{"class":51293},[118,81201,51300],{"class":128},[22915,81203,81205],{"id":81204},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[15,81207,81208],{},[1466,81209],{"alt":39,"src":81210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[15,81212,81213],{},[1466,81214],{"alt":39,"src":81215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[72,81217,81218],{},[75,81219,81220],{},"find()",[15,81222,81223],{},"循环查找，找到第一个就ok",[15,81225,81226],{},[21,81227,81230],{"href":81228,"rel":81229},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[109,81232,81234],{"className":50626,"code":81233,"language":50628,"meta":39,"style":39},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[115,81235,81236,81241,81246],{"__ignoreMap":39},[118,81237,81238],{"class":120,"line":121},[118,81239,81240],{"class":128},"const array1 = [5, 12, 8, 130, 44]\n",[118,81242,81243],{"class":120,"line":40},[118,81244,81245],{"class":128},"const found = array1.find((element) => element > 10)\n",[118,81247,81248],{"class":120,"line":1183},[118,81249,81250],{"class":128},"console.log(found)  \u002F\u002F12\n",[15,81252,81253,81255,81256,81261,81262,81265,81266,81268,81269,81274,81275,81277,81278,81280,81281,81283,81284],{},[115,81254,81220],{}," 方法是一个",[21,81257,81260],{"href":81258,"rel":81259},"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",[25],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[115,81263,81264],{},"callbackFn"," 函数，直到 ",[115,81267,81264],{}," 返回一个",[21,81270,81273],{"href":81271,"rel":81272},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25],"真值","。然后 ",[115,81276,81220],{}," 返回该元素并停止迭代数组。如果 ",[115,81279,81264],{}," 从未返回真值，则 ",[115,81282,81220],{}," 返回 ",[115,81285,81286],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[109,81288,81290],{"className":53060,"code":81289,"language":53062,"meta":39,"style":39},"\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",[115,81291,81292,81300,81308,81313,81318,81323,81327,81332,81337,81341,81346,81351,81355,81359,81364,81369,81373,81377,81382,81387,81392,81397,81402,81406,81411,81416,81421,81426,81430,81435,81443],{"__ignoreMap":39},[118,81293,81294,81296,81298],{"class":120,"line":121},[118,81295,1038],{"class":128},[118,81297,51793],{"class":51293},[118,81299,51300],{"class":128},[118,81301,81302,81304,81306],{"class":120,"line":40},[118,81303,52137],{"class":128},[118,81305,51806],{"class":51293},[118,81307,51300],{"class":128},[118,81309,81310],{"class":120,"line":1183},[118,81311,81312],{"class":128},"    const arr = ['red', 'blue', 'green']\n",[118,81314,81315],{"class":120,"line":1198},[118,81316,81317],{"class":128},"    const found = arr.find(item => item === 'pink')\n",[118,81319,81320],{"class":120,"line":1204},[118,81321,81322],{"class":128},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[118,81324,81325],{"class":120,"line":1218},[118,81326,2404],{"emptyLinePlaceholder":45},[118,81328,81329],{"class":120,"line":1224},[118,81330,81331],{"class":128},"    \u002F\u002F 使用场景，用于查找数据\n",[118,81333,81334],{"class":120,"line":1315},[118,81335,81336],{"class":128},"    const arr1 = [\n",[118,81338,81339],{"class":120,"line":1321},[118,81340,79379],{"class":128},[118,81342,81343],{"class":120,"line":1333},[118,81344,81345],{"class":128},"        name: '小米',\n",[118,81347,81348],{"class":120,"line":1616},[118,81349,81350],{"class":128},"        price: 1999\n",[118,81352,81353],{"class":120,"line":1621},[118,81354,77885],{"class":128},[118,81356,81357],{"class":120,"line":1627},[118,81358,79379],{"class":128},[118,81360,81361],{"class":120,"line":1632},[118,81362,81363],{"class":128},"        name: '华为',\n",[118,81365,81366],{"class":120,"line":1646},[118,81367,81368],{"class":128},"        price: 3999\n",[118,81370,81371],{"class":120,"line":1651},[118,81372,52391],{"class":128},[118,81374,81375],{"class":120,"line":1657},[118,81376,53102],{"class":128},[118,81378,81379],{"class":120,"line":1678},[118,81380,81381],{"class":128},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[118,81383,81384],{"class":120,"line":1683},[118,81385,81386],{"class":128},"    \u002F\u002F const found1 = arr1.find(item => {\n",[118,81388,81389],{"class":120,"line":1697},[118,81390,81391],{"class":128},"    \u002F\u002F   if (item.name === '小米') {\n",[118,81393,81394],{"class":120,"line":1702},[118,81395,81396],{"class":128},"    \u002F\u002F     return item\n",[118,81398,81399],{"class":120,"line":1731},[118,81400,81401],{"class":128},"    \u002F\u002F   }\n",[118,81403,81404],{"class":120,"line":1736},[118,81405,63283],{"class":128},[118,81407,81408],{"class":120,"line":1753},[118,81409,81410],{"class":128},"    \u002F\u002F 另一种写法\n",[118,81412,81413],{"class":120,"line":1758},[118,81414,81415],{"class":128},"    const found1 = arr1.find(item => {\n",[118,81417,81418],{"class":120,"line":1763},[118,81419,81420],{"class":128},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[118,81422,81423],{"class":120,"line":1768},[118,81424,81425],{"class":128},"      return item.name = '小米'\n",[118,81427,81428],{"class":120,"line":1782},[118,81429,33454],{"class":128},[118,81431,81432],{"class":120,"line":1787},[118,81433,81434],{"class":128},"    console.log(found1)\n",[118,81436,81437,81439,81441],{"class":120,"line":2581},[118,81438,52410],{"class":128},[118,81440,51806],{"class":51293},[118,81442,51300],{"class":128},[118,81444,81445,81447,81449],{"class":120,"line":2595},[118,81446,51778],{"class":128},[118,81448,51793],{"class":51293},[118,81450,51300],{"class":128},[15,81452,81453],{},[1466,81454],{"alt":39,"src":81455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[15,81457,81458],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[72,81460,81461],{"start":40},[75,81462,81463],{},"every()返回的是布尔值",[15,81465,81466],{},[21,81467,81470],{"href":81468,"rel":81469},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[15,81472,81473],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[15,81475,81476],{},"some是只有有一个就没问题",[15,81478,81479],{},"every是必须全是才行",[109,81481,81485],{"className":81482,"code":81483,"language":81484,"meta":39,"style":39},"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",[115,81486,81487,81503,81517,81521,81530],{"__ignoreMap":39},[118,81488,81489,81491,81494,81496,81498,81501],{"class":120,"line":121},[118,81490,54442],{"class":124},[118,81492,81493],{"class":128}," isBigEnough(element, ",[118,81495,74051],{"class":124},[118,81497,12440],{"class":128},[118,81499,81500],{"class":124},"array",[118,81502,12447],{"class":128},[118,81504,81505,81508,81511,81513,81515],{"class":120,"line":40},[118,81506,81507],{"class":124},"  return",[118,81509,81510],{"class":128}," element ",[118,81512,1714],{"class":124},[118,81514,2042],{"class":177},[118,81516,1294],{"class":128},[118,81518,81519],{"class":120,"line":1183},[118,81520,1569],{"class":128},[118,81522,81523,81526,81528],{"class":120,"line":1198},[118,81524,81525],{"class":128},"[12, 5, 8, 130, 44].every(isBigEnough); ",[118,81527,33322],{"class":124},[118,81529,54509],{"class":128},[118,81531,81532,81535,81537],{"class":120,"line":1204},[118,81533,81534],{"class":128},"[12, 54, 18, 130, 44].every(isBigEnough); ",[118,81536,33322],{"class":124},[118,81538,57933],{"class":128},[109,81540,81542],{"className":53060,"code":81541,"language":53062,"meta":39,"style":39},"\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",[115,81543,81544,81552,81560,81565,81569,81574,81579,81587],{"__ignoreMap":39},[118,81545,81546,81548,81550],{"class":120,"line":121},[118,81547,1038],{"class":128},[118,81549,51793],{"class":51293},[118,81551,51300],{"class":128},[118,81553,81554,81556,81558],{"class":120,"line":40},[118,81555,52137],{"class":128},[118,81557,51806],{"class":51293},[118,81559,51300],{"class":128},[118,81561,81562],{"class":120,"line":1183},[118,81563,81564],{"class":128},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[118,81566,81567],{"class":120,"line":1198},[118,81568,78315],{"class":128},[118,81570,81571],{"class":120,"line":1204},[118,81572,81573],{"class":128},"    const flag = arr.every(item => item >= 10)\n",[118,81575,81576],{"class":120,"line":1218},[118,81577,81578],{"class":128},"    console.log(flag)    \u002F\u002Ftrue\n",[118,81580,81581,81583,81585],{"class":120,"line":1224},[118,81582,52410],{"class":128},[118,81584,51806],{"class":51293},[118,81586,51300],{"class":128},[118,81588,81589,81591,81593],{"class":120,"line":1315},[118,81590,51778],{"class":128},[118,81592,51793],{"class":51293},[118,81594,51300],{"class":128},[109,81596,81598],{"className":53060,"code":81597,"language":53062,"meta":39,"style":39},"\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",[115,81599,81600,81608,81616,81620,81625,81630,81635,81643],{"__ignoreMap":39},[118,81601,81602,81604,81606],{"class":120,"line":121},[118,81603,1038],{"class":128},[118,81605,51793],{"class":51293},[118,81607,51300],{"class":128},[118,81609,81610,81612,81614],{"class":120,"line":40},[118,81611,52137],{"class":128},[118,81613,51806],{"class":51293},[118,81615,51300],{"class":128},[118,81617,81618],{"class":120,"line":1183},[118,81619,81564],{"class":128},[118,81621,81622],{"class":120,"line":1198},[118,81623,81624],{"class":128},"    const arr = [10, 0, 5]\n",[118,81626,81627],{"class":120,"line":1204},[118,81628,81629],{"class":128},"    const flag = arr.some(item => item >= 10)\n",[118,81631,81632],{"class":120,"line":1218},[118,81633,81634],{"class":128},"    console.log(flag)   \u002F\u002Ftrue\n",[118,81636,81637,81639,81641],{"class":120,"line":1224},[118,81638,52410],{"class":128},[118,81640,51806],{"class":51293},[118,81642,51300],{"class":128},[118,81644,81645,81647,81649],{"class":120,"line":1315},[118,81646,51778],{"class":128},[118,81648,51793],{"class":51293},[118,81650,51300],{"class":128},[22915,81652,81654],{"id":81653},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[15,81656,81657],{},[1466,81658],{"alt":39,"src":81659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[109,81661,81663],{"className":50626,"code":81662,"language":50628,"meta":39,"style":39},"\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",[115,81664,81665,81675,81689,81693,81701,81715,81735,81747,81755,81762,81774,81786,81798,81810,81820,81830,81834,81842,81850,81854,81862,81874,81882,81904,81909,81914,81947,81955,81963,81967],{"__ignoreMap":39},[118,81666,81667,81669,81671,81673],{"class":120,"line":121},[118,81668,51290],{"class":128},[118,81670,51294],{"class":51293},[118,81672,51297],{"class":1967},[118,81674,51300],{"class":128},[118,81676,81677,81679,81681,81683,81685,81687],{"class":120,"line":40},[118,81678,1038],{"class":128},[118,81680,50628],{"class":51293},[118,81682,51309],{"class":1967},[118,81684,174],{"class":128},[118,81686,51314],{"class":233},[118,81688,51300],{"class":128},[118,81690,81691],{"class":120,"line":1183},[118,81692,2404],{"emptyLinePlaceholder":45},[118,81694,81695,81697,81699],{"class":120,"line":1198},[118,81696,1038],{"class":128},[118,81698,51327],{"class":51293},[118,81700,51300],{"class":128},[118,81702,81703,81705,81707,81709,81711,81713],{"class":120,"line":1204},[118,81704,52137],{"class":128},[118,81706,51337],{"class":51293},[118,81708,51340],{"class":1967},[118,81710,174],{"class":128},[118,81712,51345],{"class":233},[118,81714,51300],{"class":128},[118,81716,81717,81719,81721,81723,81725,81727,81729,81731,81733],{"class":120,"line":1218},[118,81718,52137],{"class":128},[118,81720,51337],{"class":51293},[118,81722,14925],{"class":1967},[118,81724,174],{"class":128},[118,81726,51384],{"class":233},[118,81728,51364],{"class":1967},[118,81730,174],{"class":128},[118,81732,51391],{"class":233},[118,81734,51300],{"class":128},[118,81736,81737,81739,81741,81743,81745],{"class":120,"line":1224},[118,81738,52137],{"class":128},[118,81740,51400],{"class":51293},[118,81742,51403],{"class":128},[118,81744,51400],{"class":51293},[118,81746,51300],{"class":128},[118,81748,81749,81751,81753],{"class":120,"line":1315},[118,81750,52137],{"class":128},[118,81752,5131],{"class":51293},[118,81754,51300],{"class":128},[118,81756,81757,81760],{"class":120,"line":1321},[118,81758,81759],{"class":51293},"    div",[118,81761,15577],{"class":128},[118,81763,81764,81766,81768,81770,81772],{"class":120,"line":1333},[118,81765,54764],{"class":177},[118,81767,51430],{"class":128},[118,81769,1726],{"class":177},[118,81771,51485],{"class":124},[118,81773,1294],{"class":128},[118,81775,81776,81778,81780,81782,81784],{"class":120,"line":1616},[118,81777,54778],{"class":177},[118,81779,51430],{"class":128},[118,81781,529],{"class":177},[118,81783,51485],{"class":124},[118,81785,1294],{"class":128},[118,81787,81788,81790,81792,81794,81796],{"class":120,"line":1621},[118,81789,57352],{"class":177},[118,81791,51430],{"class":128},[118,81793,529],{"class":177},[118,81795,51485],{"class":124},[118,81797,1294],{"class":128},[118,81799,81800,81802,81804,81806,81808],{"class":120,"line":1627},[118,81801,65126],{"class":177},[118,81803,51430],{"class":128},[118,81805,626],{"class":177},[118,81807,51485],{"class":124},[118,81809,1294],{"class":128},[118,81811,81812,81814,81816,81818],{"class":120,"line":1632},[118,81813,57279],{"class":177},[118,81815,51430],{"class":128},[118,81817,51585],{"class":177},[118,81819,1294],{"class":128},[118,81821,81822,81824,81826,81828],{"class":120,"line":1646},[118,81823,54877],{"class":177},[118,81825,51430],{"class":128},[118,81827,51638],{"class":177},[118,81829,1294],{"class":128},[118,81831,81832],{"class":120,"line":1651},[118,81833,2191],{"class":128},[118,81835,81836,81838,81840],{"class":120,"line":1657},[118,81837,52410],{"class":128},[118,81839,5131],{"class":51293},[118,81841,51300],{"class":128},[118,81843,81844,81846,81848],{"class":120,"line":1678},[118,81845,51778],{"class":128},[118,81847,51327],{"class":51293},[118,81849,51300],{"class":128},[118,81851,81852],{"class":120,"line":1683},[118,81853,2404],{"emptyLinePlaceholder":45},[118,81855,81856,81858,81860],{"class":120,"line":1697},[118,81857,1038],{"class":128},[118,81859,51793],{"class":51293},[118,81861,51300],{"class":128},[118,81863,81864,81866,81868,81870,81872],{"class":120,"line":1702},[118,81865,52137],{"class":128},[118,81867,51604],{"class":51293},[118,81869,55307],{"class":128},[118,81871,51604],{"class":51293},[118,81873,51300],{"class":128},[118,81875,81876,81878,81880],{"class":120,"line":1731},[118,81877,52137],{"class":128},[118,81879,51806],{"class":51293},[118,81881,51300],{"class":128},[118,81883,81884,81886,81889,81891,81894,81897,81899,81902],{"class":120,"line":1736},[118,81885,11226],{"class":124},[118,81887,81888],{"class":177}," spec",[118,81890,13569],{"class":124},[118,81892,81893],{"class":128}," { size: ",[118,81895,81896],{"class":233},"'40cm*40cm'",[118,81898,55457],{"class":128},[118,81900,81901],{"class":233},"'黑色'",[118,81903,55597],{"class":128},[118,81905,81906],{"class":120,"line":1753},[118,81907,81908],{"class":187},"    \u002F\u002F const arr = Object.values(spec)\n",[118,81910,81911],{"class":120,"line":1758},[118,81912,81913],{"class":187},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[118,81915,81916,81918,81920,81922,81925,81927,81929,81932,81935,81938,81940,81942,81945],{"class":120,"line":1763},[118,81917,52400],{"class":128},[118,81919,54392],{"class":1967},[118,81921,129],{"class":128},[118,81923,81924],{"class":233},"'div'",[118,81926,74242],{"class":128},[118,81928,174],{"class":124},[118,81930,81931],{"class":128}," Object.",[118,81933,81934],{"class":1967},"values",[118,81936,81937],{"class":128},"(spec).",[118,81939,74216],{"class":1967},[118,81941,129],{"class":128},[118,81943,81944],{"class":233},"'\u002F'",[118,81946,135],{"class":128},[118,81948,81949,81951,81953],{"class":120,"line":1768},[118,81950,52410],{"class":128},[118,81952,51806],{"class":51293},[118,81954,51300],{"class":128},[118,81956,81957,81959,81961],{"class":120,"line":1782},[118,81958,51778],{"class":128},[118,81960,51793],{"class":51293},[118,81962,51300],{"class":128},[118,81964,81965],{"class":120,"line":1787},[118,81966,2404],{"emptyLinePlaceholder":45},[118,81968,81969,81971,81973],{"class":120,"line":2581},[118,81970,51778],{"class":128},[118,81972,50628],{"class":51293},[118,81974,51300],{"class":128},[15,81976,81977],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22915,81979,81981],{"id":81980},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[15,81983,81984],{},"静态方法，将伪数组转换为真数组",[15,81986,81987],{},[1466,81988],{"alt":39,"src":81989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[109,81991,81993],{"className":53060,"code":81992,"language":53062,"meta":39,"style":39},"\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",[115,81994,81995,82003,82011,82023,82035,82047,82055,82063,82068,82073,82078,82083,82091],{"__ignoreMap":39},[118,81996,81997,81999,82001],{"class":120,"line":121},[118,81998,1038],{"class":128},[118,82000,51793],{"class":51293},[118,82002,51300],{"class":128},[118,82004,82005,82007,82009],{"class":120,"line":40},[118,82006,52137],{"class":128},[118,82008,1135],{"class":51293},[118,82010,51300],{"class":128},[118,82012,82013,82015,82017,82019,82021],{"class":120,"line":1183},[118,82014,51334],{"class":128},[118,82016,75],{"class":51293},[118,82018,55307],{"class":128},[118,82020,75],{"class":51293},[118,82022,51300],{"class":128},[118,82024,82025,82027,82029,82031,82033],{"class":120,"line":1198},[118,82026,51334],{"class":128},[118,82028,75],{"class":51293},[118,82030,55307],{"class":128},[118,82032,75],{"class":51293},[118,82034,51300],{"class":128},[118,82036,82037,82039,82041,82043,82045],{"class":120,"line":1204},[118,82038,51334],{"class":128},[118,82040,75],{"class":51293},[118,82042,55307],{"class":128},[118,82044,75],{"class":51293},[118,82046,51300],{"class":128},[118,82048,82049,82051,82053],{"class":120,"line":1218},[118,82050,52410],{"class":128},[118,82052,1135],{"class":51293},[118,82054,51300],{"class":128},[118,82056,82057,82059,82061],{"class":120,"line":1224},[118,82058,52137],{"class":128},[118,82060,51806],{"class":51293},[118,82062,51300],{"class":128},[118,82064,82065],{"class":120,"line":1315},[118,82066,82067],{"class":128},"    const lis = document.querySelectorAll('li')\n",[118,82069,82070],{"class":120,"line":1321},[118,82071,82072],{"class":128},"    const liss = Array.from(lis)\n",[118,82074,82075],{"class":120,"line":1333},[118,82076,82077],{"class":128},"    liss.pop()\n",[118,82079,82080],{"class":120,"line":1616},[118,82081,82082],{"class":128},"    console.log(liss)\n",[118,82084,82085,82087,82089],{"class":120,"line":1621},[118,82086,52410],{"class":128},[118,82088,51806],{"class":51293},[118,82090,51300],{"class":128},[118,82092,82093,82095,82097],{"class":120,"line":1627},[118,82094,51778],{"class":128},[118,82096,51793],{"class":51293},[118,82098,51300],{"class":128},[15,82100,82101],{},[1466,82102],{"alt":39,"src":82103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22003,82105,82107],{"id":82106},"_41053-string","4.10.5.3 String",[15,82109,82110],{},[1466,82111],{"alt":39,"src":82112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22915,82114,82116],{"id":82115},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[109,82118,82120],{"className":53060,"code":82119,"language":53062,"meta":39,"style":39},"\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",[115,82121,82122,82130,82138,82143,82148,82153,82157,82162,82167,82172,82180],{"__ignoreMap":39},[118,82123,82124,82126,82128],{"class":120,"line":121},[118,82125,1038],{"class":128},[118,82127,51793],{"class":51293},[118,82129,51300],{"class":128},[118,82131,82132,82134,82136],{"class":120,"line":40},[118,82133,52137],{"class":128},[118,82135,51806],{"class":51293},[118,82137,51300],{"class":128},[118,82139,82140],{"class":120,"line":1183},[118,82141,82142],{"class":128},"    \u002F\u002F 把字符串转化为数组\n",[118,82144,82145],{"class":120,"line":1198},[118,82146,82147],{"class":128},"    const str = 'pink,red'\n",[118,82149,82150],{"class":120,"line":1204},[118,82151,82152],{"class":128},"    const arr = str.split(',')\n",[118,82154,82155],{"class":120,"line":1218},[118,82156,80631],{"class":128},[118,82158,82159],{"class":120,"line":1224},[118,82160,82161],{"class":128},"    const str1 = '2025-8-25'\n",[118,82163,82164],{"class":120,"line":1315},[118,82165,82166],{"class":128},"    const arr1 = str1.split('-')\n",[118,82168,82169],{"class":120,"line":1321},[118,82170,82171],{"class":128},"    console.log(arr1)\n",[118,82173,82174,82176,82178],{"class":120,"line":1333},[118,82175,52410],{"class":128},[118,82177,51806],{"class":51293},[118,82179,51300],{"class":128},[118,82181,82182,82184,82186],{"class":120,"line":1616},[118,82183,51778],{"class":128},[118,82185,51793],{"class":51293},[118,82187,51300],{"class":128},[22915,82189,82191],{"id":82190},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[15,82193,5186],{},[15,82195,82196],{},"substring(indexStart)",[15,82198,82199],{},"substring(indexStart, indexEnd)",[1135,82201,82202,82213,82225,82235],{},[75,82203,82204,82205,82208,82209,82212],{},"如果省略了 ",[115,82206,82207],{},"indexEnd","，则 ",[115,82210,82211],{},"substring()"," 提取字符直到字符串的末尾",[75,82214,82215,82216,82219,82220,82208,82222,82224],{},"如果 ",[115,82217,82218],{},"indexStart"," 等于 ",[115,82221,82207],{},[115,82223,82211],{}," 返回一个空字符串",[75,82226,82215,82227,82229,82230,82208,82232,82234],{},[115,82228,82218],{}," 大于 ",[115,82231,82207],{},[115,82233,82211],{}," 的效果就像交换了这两个参数一样",[75,82236,82237],{},"结束的索引号不包含想要截取的部分",[109,82239,82241],{"className":81482,"code":82240,"language":81484,"meta":39,"style":39},"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",[115,82242,82243,82255,82259,82293,82323,82327,82358,82362,82389,82419,82449,82453,82484],{"__ignoreMap":39},[118,82244,82245,82248,82250,82253],{"class":120,"line":121},[118,82246,82247],{"class":128},"const anyString ",[118,82249,174],{"class":124},[118,82251,82252],{"class":233}," \"Mozilla\"",[118,82254,1294],{"class":128},[118,82256,82257],{"class":120,"line":40},[118,82258,2404],{"emptyLinePlaceholder":45},[118,82260,82261,82264,82266,82268,82270,82273,82275,82278,82280,82282,82284,82286,82288,82290],{"class":120,"line":1183},[118,82262,82263],{"class":177},"console",[118,82265,686],{"class":128},[118,82267,58240],{"class":177},[118,82269,129],{"class":128},[118,82271,82272],{"class":177},"anyString",[118,82274,686],{"class":128},[118,82276,82277],{"class":177},"substring",[118,82279,129],{"class":128},[118,82281,320],{"class":177},[118,82283,12440],{"class":128},[118,82285,346],{"class":177},[118,82287,75246],{"class":128},[118,82289,33322],{"class":124},[118,82291,82292],{"class":233}," 'M'\n",[118,82294,82295,82297,82299,82301,82303,82305,82307,82309,82311,82313,82315,82317,82319,82321],{"class":120,"line":1198},[118,82296,82263],{"class":177},[118,82298,686],{"class":128},[118,82300,58240],{"class":177},[118,82302,129],{"class":128},[118,82304,82272],{"class":177},[118,82306,686],{"class":128},[118,82308,82277],{"class":177},[118,82310,129],{"class":128},[118,82312,346],{"class":177},[118,82314,12440],{"class":128},[118,82316,320],{"class":177},[118,82318,75246],{"class":128},[118,82320,33322],{"class":124},[118,82322,82292],{"class":233},[118,82324,82325],{"class":120,"line":1204},[118,82326,2404],{"emptyLinePlaceholder":45},[118,82328,82329,82331,82333,82335,82337,82339,82341,82343,82345,82347,82349,82351,82353,82355],{"class":120,"line":1218},[118,82330,82263],{"class":177},[118,82332,686],{"class":128},[118,82334,58240],{"class":177},[118,82336,129],{"class":128},[118,82338,82272],{"class":177},[118,82340,686],{"class":128},[118,82342,82277],{"class":177},[118,82344,129],{"class":128},[118,82346,320],{"class":177},[118,82348,12440],{"class":128},[118,82350,472],{"class":177},[118,82352,75246],{"class":128},[118,82354,33322],{"class":124},[118,82356,82357],{"class":233}," 'Mozill'\n",[118,82359,82360],{"class":120,"line":1224},[118,82361,2404],{"emptyLinePlaceholder":45},[118,82363,82364,82366,82368,82370,82372,82374,82376,82378,82380,82382,82384,82386],{"class":120,"line":1315},[118,82365,82263],{"class":177},[118,82367,686],{"class":128},[118,82369,58240],{"class":177},[118,82371,129],{"class":128},[118,82373,82272],{"class":177},[118,82375,686],{"class":128},[118,82377,82277],{"class":177},[118,82379,129],{"class":128},[118,82381,421],{"class":177},[118,82383,75246],{"class":128},[118,82385,33322],{"class":124},[118,82387,82388],{"class":233}," 'lla'\n",[118,82390,82391,82393,82395,82397,82399,82401,82403,82405,82407,82409,82411,82413,82415,82417],{"class":120,"line":1321},[118,82392,82263],{"class":177},[118,82394,686],{"class":128},[118,82396,58240],{"class":177},[118,82398,129],{"class":128},[118,82400,82272],{"class":177},[118,82402,686],{"class":128},[118,82404,82277],{"class":177},[118,82406,129],{"class":128},[118,82408,421],{"class":177},[118,82410,12440],{"class":128},[118,82412,497],{"class":177},[118,82414,75302],{"class":128},[118,82416,33322],{"class":124},[118,82418,82388],{"class":233},[118,82420,82421,82423,82425,82427,82429,82431,82433,82435,82437,82439,82441,82443,82445,82447],{"class":120,"line":1333},[118,82422,82263],{"class":177},[118,82424,686],{"class":128},[118,82426,58240],{"class":177},[118,82428,129],{"class":128},[118,82430,82272],{"class":177},[118,82432,686],{"class":128},[118,82434,82277],{"class":177},[118,82436,129],{"class":128},[118,82438,497],{"class":177},[118,82440,12440],{"class":128},[118,82442,421],{"class":177},[118,82444,75246],{"class":128},[118,82446,33322],{"class":124},[118,82448,82388],{"class":233},[118,82450,82451],{"class":120,"line":1616},[118,82452,2404],{"emptyLinePlaceholder":45},[118,82454,82455,82457,82459,82461,82463,82465,82467,82469,82471,82473,82475,82477,82479,82481],{"class":120,"line":1621},[118,82456,82263],{"class":177},[118,82458,686],{"class":128},[118,82460,58240],{"class":177},[118,82462,129],{"class":128},[118,82464,82272],{"class":177},[118,82466,686],{"class":128},[118,82468,82277],{"class":177},[118,82470,129],{"class":128},[118,82472,320],{"class":177},[118,82474,12440],{"class":128},[118,82476,497],{"class":177},[118,82478,75246],{"class":128},[118,82480,33322],{"class":124},[118,82482,82483],{"class":233}," 'Mozilla'\n",[118,82485,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508,82510,82512],{"class":120,"line":1627},[118,82487,82263],{"class":177},[118,82489,686],{"class":128},[118,82491,58240],{"class":177},[118,82493,129],{"class":128},[118,82495,82272],{"class":177},[118,82497,686],{"class":128},[118,82499,82277],{"class":177},[118,82501,129],{"class":128},[118,82503,320],{"class":177},[118,82505,12440],{"class":128},[118,82507,574],{"class":177},[118,82509,75246],{"class":128},[118,82511,33322],{"class":124},[118,82513,82483],{"class":233},[22915,82515,82517],{"id":82516},"_410533-startswith","4.10.5.3.3 startsWith",[15,82519,82520,82523,82524,82529,82530,82532,82533],{},[115,82521,82522],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[278,82525,82526],{},[115,82527,82528],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[115,82531,1366],{}," 或 ",[115,82534,66013],{},[109,82536,82538],{"className":77488,"code":82537,"language":77490,"meta":39,"style":39},"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",[115,82539,82540,82552,82571,82576,82596],{"__ignoreMap":39},[118,82541,82542,82544,82547,82549],{"class":120,"line":121},[118,82543,6797],{"class":124},[118,82545,82546],{"class":128}," str1 ",[118,82548,174],{"class":124},[118,82550,82551],{"class":233}," \"Saturday night plans\"\n",[118,82553,82554,82556,82558,82561,82564,82566,82569],{"class":120,"line":40},[118,82555,77525],{"class":128},[118,82557,58240],{"class":1967},[118,82559,82560],{"class":128},"(str1.",[118,82562,82563],{"class":1967},"startsWith",[118,82565,129],{"class":128},[118,82567,82568],{"class":233},"\"Sat\"",[118,82570,30490],{"class":128},[118,82572,82573],{"class":120,"line":1183},[118,82574,82575],{"class":187},"\u002F\u002F Expected output: true\n",[118,82577,82578,82580,82582,82584,82586,82588,82590,82592,82594],{"class":120,"line":1198},[118,82579,77525],{"class":128},[118,82581,58240],{"class":1967},[118,82583,82560],{"class":128},[118,82585,82563],{"class":1967},[118,82587,129],{"class":128},[118,82589,82568],{"class":233},[118,82591,12440],{"class":128},[118,82593,200],{"class":177},[118,82595,30490],{"class":128},[118,82597,82598],{"class":120,"line":1204},[118,82599,82600],{"class":187},"\u002F\u002F Expected output: false\n",[109,82602,82604],{"className":50626,"code":82603,"language":50628,"meta":39,"style":39},"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",[115,82605,82606,82611,82616,82620,82625,82630],{"__ignoreMap":39},[118,82607,82608],{"class":120,"line":121},[118,82609,82610],{"class":128},"startsWith(searchString)\n",[118,82612,82613],{"class":120,"line":40},[118,82614,82615],{"class":128},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[118,82617,82618],{"class":120,"line":1183},[118,82619,2404],{"emptyLinePlaceholder":45},[118,82621,82622],{"class":120,"line":1198},[118,82623,82624],{"class":128},"const str3 = 'pink老师上课中'\n",[118,82626,82627],{"class":120,"line":1204},[118,82628,82629],{"class":128},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[118,82631,82632],{"class":120,"line":1218},[118,82633,82634],{"class":128},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22915,82636,82638],{"id":82637},"_410534-includes","4.10.5.3.4 includes",[15,82640,82641],{},"includes(searchString) includes(searchString, position)",[72,82643,82644],{},[75,82645,82646],{},"searchString:",[15,82648,82649,82650,82652,82653,82658,82659,82664,82665,21505,82668,82671,82672,82675],{},"一个要在 ",[115,82651,1303],{}," 中查找的字符串。",[21,82654,82657],{"href":82655,"rel":82656},"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",[25],"不能是正则表达式","。所有非正则表达式的值都会被",[21,82660,82663],{"href":82661,"rel":82662},"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",[25],"强制转换为字符串","，因此如果该参数被省略或传入 ",[115,82666,82667],{},"undefined",[115,82669,82670],{},"includes()"," 方法会在字符串中搜索 ",[115,82673,82674],{},"\"undefined\"","，这通常不是你想要的",[72,82677,82678],{"start":40},[75,82679,82680,987],{},[115,82681,82682],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[15,82684,82685,82686,82689,82690],{},"在字符串中开始搜索 ",[115,82687,82688],{},"searchString"," 的位置。默认值为 ",[115,82691,320],{},[72,82693,82694],{"start":1183},[75,82695,82696],{},"返回值：",[15,82698,82699,82700,82702,82703,82707,82708],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[115,82701,82688],{}," 为空字符串的情况），则返回 ",[278,82704,82705],{},[115,82706,1366],{}," ，否则返回 ",[278,82709,82710],{},[115,82711,66013],{},[72,82713,82714],{"start":1198},[75,82715,82716],{},"异常：",[15,82718,82215,82719,13800,82721,82725],{},[115,82720,82688],{},[21,82722,82724],{"href":82655,"rel":82723},[25],"是一个正则表达式","，则会抛出",[15,82727,82728],{},"只要是有就是true，不需要非得以谁开头结尾",[109,82730,82732],{"className":77488,"code":82731,"language":77490,"meta":39,"style":39},"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",[115,82733,82734,82745,82768,82787,82807,82829,82848],{"__ignoreMap":39},[118,82735,82736,82738,82740,82742],{"class":120,"line":121},[118,82737,6797],{"class":124},[118,82739,79768],{"class":128},[118,82741,174],{"class":124},[118,82743,82744],{"class":233}," \"To be, or not to be, that is the question.\"\n",[118,82746,82747,82749,82751,82754,82757,82759,82762,82765],{"class":120,"line":40},[118,82748,77525],{"class":128},[118,82750,58240],{"class":1967},[118,82752,82753],{"class":128},"(str.",[118,82755,82756],{"class":1967},"includes",[118,82758,129],{"class":128},[118,82760,82761],{"class":233},"\"To be\"",[118,82763,82764],{"class":128},"))",[118,82766,82767],{"class":187},"  \u002F\u002F true\n",[118,82769,82770,82772,82774,82776,82778,82780,82783,82785],{"class":120,"line":1183},[118,82771,77525],{"class":128},[118,82773,58240],{"class":1967},[118,82775,82753],{"class":128},[118,82777,82756],{"class":1967},[118,82779,129],{"class":128},[118,82781,82782],{"class":233},"\"question\"",[118,82784,82764],{"class":128},[118,82786,82767],{"class":187},[118,82788,82789,82791,82793,82795,82797,82799,82802,82804],{"class":120,"line":1198},[118,82790,77525],{"class":128},[118,82792,58240],{"class":1967},[118,82794,82753],{"class":128},[118,82796,82756],{"class":1967},[118,82798,129],{"class":128},[118,82800,82801],{"class":233},"\"nonexistent\"",[118,82803,82764],{"class":128},[118,82805,82806],{"class":187},"  \u002F\u002F false\n",[118,82808,82809,82811,82813,82815,82817,82819,82821,82823,82825,82827],{"class":120,"line":1204},[118,82810,77525],{"class":128},[118,82812,58240],{"class":1967},[118,82814,82753],{"class":128},[118,82816,82756],{"class":1967},[118,82818,129],{"class":128},[118,82820,82761],{"class":233},[118,82822,12440],{"class":128},[118,82824,346],{"class":177},[118,82826,82764],{"class":128},[118,82828,82806],{"class":187},[118,82830,82831,82833,82835,82837,82839,82841,82844,82846],{"class":120,"line":1218},[118,82832,77525],{"class":128},[118,82834,58240],{"class":1967},[118,82836,82753],{"class":128},[118,82838,82756],{"class":1967},[118,82840,129],{"class":128},[118,82842,82843],{"class":233},"\"TO BE\"",[118,82845,82764],{"class":128},[118,82847,82806],{"class":187},[118,82849,82850,82852,82854,82856,82858,82860,82862,82864],{"class":120,"line":1224},[118,82851,77525],{"class":128},[118,82853,58240],{"class":1967},[118,82855,82753],{"class":128},[118,82857,82756],{"class":1967},[118,82859,129],{"class":128},[118,82861,7657],{"class":233},[118,82863,82764],{"class":128},[118,82865,82767],{"class":187},[22915,82867,82869],{"id":82868},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[109,82871,82873],{"className":53060,"code":82872,"language":53062,"meta":39,"style":39},"\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",[115,82874,82875,82883,82891,82896,82901,82906,82911,82916,82924],{"__ignoreMap":39},[118,82876,82877,82879,82881],{"class":120,"line":121},[118,82878,1038],{"class":128},[118,82880,51793],{"class":51293},[118,82882,51300],{"class":128},[118,82884,82885,82887,82889],{"class":120,"line":40},[118,82886,52137],{"class":128},[118,82888,51806],{"class":51293},[118,82890,51300],{"class":128},[118,82892,82893],{"class":120,"line":1183},[118,82894,82895],{"class":128},"    const num = 10\n",[118,82897,82898],{"class":120,"line":1198},[118,82899,82900],{"class":128},"    \u002F\u002F 强制转换\n",[118,82902,82903],{"class":120,"line":1204},[118,82904,82905],{"class":128},"    console.log(String(num))\n",[118,82907,82908],{"class":120,"line":1218},[118,82909,82910],{"class":128},"    \u002F\u002F toString()方法转换\n",[118,82912,82913],{"class":120,"line":1224},[118,82914,82915],{"class":128},"    console.log(num.toString())\n",[118,82917,82918,82920,82922],{"class":120,"line":1315},[118,82919,52410],{"class":128},[118,82921,51806],{"class":51293},[118,82923,51300],{"class":128},[118,82925,82926,82928,82930],{"class":120,"line":1321},[118,82927,51778],{"class":128},[118,82929,51793],{"class":51293},[118,82931,51300],{"class":128},[22915,82933,82935],{"id":82934},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[15,82937,82938],{},[1466,82939],{"alt":39,"src":82940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[109,82942,82944],{"className":50626,"code":82943,"language":50628,"meta":39,"style":39},"\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",[115,82945,82946,82956,82970,82974,82982,82996,83016,83028,83036,83040,83048,83060,83068,83080,83085,83090,83095,83142,83158,83166,83174,83178],{"__ignoreMap":39},[118,82947,82948,82950,82952,82954],{"class":120,"line":121},[118,82949,51290],{"class":128},[118,82951,51294],{"class":51293},[118,82953,51297],{"class":1967},[118,82955,51300],{"class":128},[118,82957,82958,82960,82962,82964,82966,82968],{"class":120,"line":40},[118,82959,1038],{"class":128},[118,82961,50628],{"class":51293},[118,82963,51309],{"class":1967},[118,82965,174],{"class":128},[118,82967,51314],{"class":233},[118,82969,51300],{"class":128},[118,82971,82972],{"class":120,"line":1183},[118,82973,2404],{"emptyLinePlaceholder":45},[118,82975,82976,82978,82980],{"class":120,"line":1198},[118,82977,1038],{"class":128},[118,82979,51327],{"class":51293},[118,82981,51300],{"class":128},[118,82983,82984,82986,82988,82990,82992,82994],{"class":120,"line":1204},[118,82985,52137],{"class":128},[118,82987,51337],{"class":51293},[118,82989,51340],{"class":1967},[118,82991,174],{"class":128},[118,82993,51345],{"class":233},[118,82995,51300],{"class":128},[118,82997,82998,83000,83002,83004,83006,83008,83010,83012,83014],{"class":120,"line":1218},[118,82999,52137],{"class":128},[118,83001,51337],{"class":51293},[118,83003,14925],{"class":1967},[118,83005,174],{"class":128},[118,83007,51384],{"class":233},[118,83009,51364],{"class":1967},[118,83011,174],{"class":128},[118,83013,51391],{"class":233},[118,83015,51300],{"class":128},[118,83017,83018,83020,83022,83024,83026],{"class":120,"line":1224},[118,83019,52137],{"class":128},[118,83021,51400],{"class":51293},[118,83023,51403],{"class":128},[118,83025,51400],{"class":51293},[118,83027,51300],{"class":128},[118,83029,83030,83032,83034],{"class":120,"line":1315},[118,83031,51778],{"class":128},[118,83033,51327],{"class":51293},[118,83035,51300],{"class":128},[118,83037,83038],{"class":120,"line":1321},[118,83039,2404],{"emptyLinePlaceholder":45},[118,83041,83042,83044,83046],{"class":120,"line":1333},[118,83043,1038],{"class":128},[118,83045,51793],{"class":51293},[118,83047,51300],{"class":128},[118,83049,83050,83052,83054,83056,83058],{"class":120,"line":1616},[118,83051,52137],{"class":128},[118,83053,51604],{"class":51293},[118,83055,55307],{"class":128},[118,83057,51604],{"class":51293},[118,83059,51300],{"class":128},[118,83061,83062,83064,83066],{"class":120,"line":1621},[118,83063,52137],{"class":128},[118,83065,51806],{"class":51293},[118,83067,51300],{"class":128},[118,83069,83070,83072,83075,83077],{"class":120,"line":1627},[118,83071,11226],{"class":124},[118,83073,83074],{"class":177}," gift",[118,83076,13569],{"class":124},[118,83078,83079],{"class":233}," '50g的茶叶，清洗球'\n",[118,83081,83082],{"class":120,"line":1632},[118,83083,83084],{"class":187},"    \u002F\u002F 1.把字符串拆分为数组\n",[118,83086,83087],{"class":120,"line":1646},[118,83088,83089],{"class":187},"    \u002F\u002F console.log(gift.split(','))\n",[118,83091,83092],{"class":120,"line":1651},[118,83093,83094],{"class":187},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[118,83096,83097,83099,83101,83103,83106,83109,83111,83114,83116,83118,83120,83122,83124,83127,83129,83132,83134,83136,83138,83140],{"class":120,"line":1657},[118,83098,11226],{"class":124},[118,83100,73912],{"class":177},[118,83102,13569],{"class":124},[118,83104,83105],{"class":128}," gift.",[118,83107,83108],{"class":1967},"split",[118,83110,129],{"class":128},[118,83112,83113],{"class":233},"'，'",[118,83115,30819],{"class":128},[118,83117,74037],{"class":1967},[118,83119,129],{"class":128},[118,83121,79788],{"class":5221},[118,83123,79791],{"class":124},[118,83125,83126],{"class":233}," `\u003Cspan>【赠品】${",[118,83128,79788],{"class":128},[118,83130,83131],{"class":233},"}\u003C\u002Fspan>\u003Cbr>`",[118,83133,30819],{"class":128},[118,83135,74216],{"class":1967},[118,83137,129],{"class":128},[118,83139,74221],{"class":233},[118,83141,135],{"class":128},[118,83143,83144,83146,83148,83150,83152,83154,83156],{"class":120,"line":1678},[118,83145,52400],{"class":128},[118,83147,54392],{"class":1967},[118,83149,129],{"class":128},[118,83151,81924],{"class":233},[118,83153,74242],{"class":128},[118,83155,174],{"class":124},[118,83157,73978],{"class":128},[118,83159,83160,83162,83164],{"class":120,"line":1683},[118,83161,52410],{"class":128},[118,83163,51806],{"class":51293},[118,83165,51300],{"class":128},[118,83167,83168,83170,83172],{"class":120,"line":1697},[118,83169,51778],{"class":128},[118,83171,51793],{"class":51293},[118,83173,51300],{"class":128},[118,83175,83176],{"class":120,"line":1702},[118,83177,2404],{"emptyLinePlaceholder":45},[118,83179,83180,83182,83184],{"class":120,"line":1731},[118,83181,51778],{"class":128},[118,83183,50628],{"class":51293},[118,83185,51300],{"class":128},[22003,83187,83189],{"id":83188},"_41054-number","4.10.5.4 Number",[15,83191,83192],{},[1466,83193],{"alt":39,"src":83194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[15,83196,83197],{},"整数也可以进行toFixed来保留小数",[15,83199,83200],{},"比如：",[15,83202,83203],{},"const price=10",[15,83205,83206],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22003,83208,83210],{"id":83209},"_41055-购物车展示","4.10.5.5 购物车展示",[15,83212,83213],{},[1466,83214],{"alt":39,"src":83215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[109,83217,83219],{"className":50626,"code":83218,"language":50628,"meta":39,"style":39},"\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",[115,83220,83221,83231,83245,83249,83257,83271,83291,83303,83311,83317,83327,83337,83347,83351,83355,83361,83373,83387,83391,83395,83401,83413,83429,83439,83455,83459,83463,83469,83479,83489,83493,83497,83505,83517,83529,83541,83545,83549,83557,83569,83573,83577,83588,83598,83610,83622,83632,83636,83640,83648,83657,83669,83679,83689,83693,83697,83705,83714,83721,83731,83743,83747,83751,83760,83770,83781,83793,83805,83809,83813,83822,83832,83843,83847,83851,83857,83869,83881,83891,83901,83919,83931,83935,83939,83948,83960,83970,83980,83992,83996,84004,84012,84016,84024,84038,84046,84060,84088,84096,84104,84114,84118,84126,84134,84143,84151,84160,84170,84174,84178,84186,84194,84203,84211,84219,84232,84236,84240,84248,84256,84265,84273,84281,84296,84300,84304,84312,84320,84329,84337,84345,84359,84367,84371,84375,84380,84406,84411,84448,84453,84476,84481,84535,84540,84576,84580,84586,84591,84600,84614,84623,84642,84651,84661,84666,84671,84684,84689,84743,84769,84777,84785,84789],{"__ignoreMap":39},[118,83222,83223,83225,83227,83229],{"class":120,"line":121},[118,83224,51290],{"class":128},[118,83226,51294],{"class":51293},[118,83228,51297],{"class":1967},[118,83230,51300],{"class":128},[118,83232,83233,83235,83237,83239,83241,83243],{"class":120,"line":40},[118,83234,1038],{"class":128},[118,83236,50628],{"class":51293},[118,83238,51309],{"class":1967},[118,83240,174],{"class":128},[118,83242,51314],{"class":233},[118,83244,51300],{"class":128},[118,83246,83247],{"class":120,"line":1183},[118,83248,2404],{"emptyLinePlaceholder":45},[118,83250,83251,83253,83255],{"class":120,"line":1198},[118,83252,1038],{"class":128},[118,83254,51327],{"class":51293},[118,83256,51300],{"class":128},[118,83258,83259,83261,83263,83265,83267,83269],{"class":120,"line":1204},[118,83260,52137],{"class":128},[118,83262,51337],{"class":51293},[118,83264,51340],{"class":1967},[118,83266,174],{"class":128},[118,83268,51345],{"class":233},[118,83270,51300],{"class":128},[118,83272,83273,83275,83277,83279,83281,83283,83285,83287,83289],{"class":120,"line":1218},[118,83274,52137],{"class":128},[118,83276,51337],{"class":51293},[118,83278,14925],{"class":1967},[118,83280,174],{"class":128},[118,83282,51384],{"class":233},[118,83284,51364],{"class":1967},[118,83286,174],{"class":128},[118,83288,51391],{"class":233},[118,83290,51300],{"class":128},[118,83292,83293,83295,83297,83299,83301],{"class":120,"line":1224},[118,83294,52137],{"class":128},[118,83296,51400],{"class":51293},[118,83298,51403],{"class":128},[118,83300,51400],{"class":51293},[118,83302,51300],{"class":128},[118,83304,83305,83307,83309],{"class":120,"line":1315},[118,83306,52137],{"class":128},[118,83308,5131],{"class":51293},[118,83310,51300],{"class":128},[118,83312,83313,83315],{"class":120,"line":1321},[118,83314,6408],{"class":51293},[118,83316,15577],{"class":128},[118,83318,83319,83321,83323,83325],{"class":120,"line":1333},[118,83320,54688],{"class":177},[118,83322,51430],{"class":128},[118,83324,320],{"class":177},[118,83326,1294],{"class":128},[118,83328,83329,83331,83333,83335],{"class":120,"line":1616},[118,83330,54699],{"class":177},[118,83332,51430],{"class":128},[118,83334,320],{"class":177},[118,83336,1294],{"class":128},[118,83338,83339,83341,83343,83345],{"class":120,"line":1621},[118,83340,72589],{"class":177},[118,83342,51430],{"class":128},[118,83344,60498],{"class":177},[118,83346,1294],{"class":128},[118,83348,83349],{"class":120,"line":1627},[118,83350,2191],{"class":128},[118,83352,83353],{"class":120,"line":1632},[118,83354,2404],{"emptyLinePlaceholder":45},[118,83356,83357,83359],{"class":120,"line":1646},[118,83358,62116],{"class":1967},[118,83360,15577],{"class":128},[118,83362,83363,83365,83367,83369,83371],{"class":120,"line":1651},[118,83364,54764],{"class":177},[118,83366,51430],{"class":128},[118,83368,78567],{"class":177},[118,83370,51485],{"class":124},[118,83372,1294],{"class":128},[118,83374,83375,83377,83379,83381,83383,83385],{"class":120,"line":1657},[118,83376,54699],{"class":177},[118,83378,51430],{"class":128},[118,83380,439],{"class":177},[118,83382,51485],{"class":124},[118,83384,51549],{"class":177},[118,83386,1294],{"class":128},[118,83388,83389],{"class":120,"line":1678},[118,83390,2191],{"class":128},[118,83392,83393],{"class":120,"line":1683},[118,83394,2404],{"emptyLinePlaceholder":45},[118,83396,83397,83399],{"class":120,"line":1697},[118,83398,78618],{"class":1967},[118,83400,15577],{"class":128},[118,83402,83403,83405,83407,83409,83411],{"class":120,"line":1702},[118,83404,54688],{"class":177},[118,83406,51430],{"class":128},[118,83408,703],{"class":177},[118,83410,51485],{"class":124},[118,83412,1294],{"class":128},[118,83414,83415,83417,83419,83421,83423,83425,83427],{"class":120,"line":1731},[118,83416,61853],{"class":177},[118,83418,51430],{"class":128},[118,83420,28114],{"class":177},[118,83422,78673],{"class":177},[118,83424,78676],{"class":177},[118,83426,823],{"class":124},[118,83428,1294],{"class":128},[118,83430,83431,83433,83435,83437],{"class":120,"line":1736},[118,83432,55002],{"class":177},[118,83434,51430],{"class":128},[118,83436,51470],{"class":177},[118,83438,1294],{"class":128},[118,83440,83441,83443,83445,83447,83449,83451,83453],{"class":120,"line":1753},[118,83442,61970],{"class":177},[118,83444,51430],{"class":128},[118,83446,346],{"class":177},[118,83448,51485],{"class":124},[118,83450,51514],{"class":177},[118,83452,62237],{"class":177},[118,83454,1294],{"class":128},[118,83456,83457],{"class":120,"line":1758},[118,83458,2191],{"class":128},[118,83460,83461],{"class":120,"line":1763},[118,83462,2404],{"emptyLinePlaceholder":45},[118,83464,83465,83467],{"class":120,"line":1768},[118,83466,78736],{"class":1967},[118,83468,15577],{"class":128},[118,83470,83471,83473,83475,83477],{"class":120,"line":1782},[118,83472,62018],{"class":177},[118,83474,51430],{"class":128},[118,83476,62023],{"class":177},[118,83478,1294],{"class":128},[118,83480,83481,83483,83485,83487],{"class":120,"line":1787},[118,83482,54877],{"class":177},[118,83484,51430],{"class":128},[118,83486,61811],{"class":177},[118,83488,1294],{"class":128},[118,83490,83491],{"class":120,"line":2581},[118,83492,2191],{"class":128},[118,83494,83495],{"class":120,"line":2595},[118,83496,2404],{"emptyLinePlaceholder":45},[118,83498,83499,83501,83503],{"class":120,"line":2603},[118,83500,78618],{"class":1967},[118,83502,55608],{"class":51293},[118,83504,15577],{"class":128},[118,83506,83507,83509,83511,83513,83515],{"class":120,"line":2608},[118,83508,54764],{"class":177},[118,83510,51430],{"class":128},[118,83512,740],{"class":177},[118,83514,51485],{"class":124},[118,83516,1294],{"class":128},[118,83518,83519,83521,83523,83525,83527],{"class":120,"line":2614},[118,83520,54778],{"class":177},[118,83522,51430],{"class":128},[118,83524,740],{"class":177},[118,83526,51485],{"class":124},[118,83528,1294],{"class":128},[118,83530,83531,83533,83535,83537,83539],{"class":120,"line":2620},[118,83532,61743],{"class":177},[118,83534,51430],{"class":128},[118,83536,447],{"class":177},[118,83538,51485],{"class":124},[118,83540,1294],{"class":128},[118,83542,83543],{"class":120,"line":2625},[118,83544,2191],{"class":128},[118,83546,83547],{"class":120,"line":7953},[118,83548,2404],{"emptyLinePlaceholder":45},[118,83550,83551,83553,83555],{"class":120,"line":7977},[118,83552,78618],{"class":1967},[118,83554,62297],{"class":1967},[118,83556,15577],{"class":128},[118,83558,83559,83561,83563,83565,83567],{"class":120,"line":7982},[118,83560,54764],{"class":177},[118,83562,51430],{"class":128},[118,83564,1726],{"class":177},[118,83566,51485],{"class":124},[118,83568,1294],{"class":128},[118,83570,83571],{"class":120,"line":7988},[118,83572,2191],{"class":128},[118,83574,83575],{"class":120,"line":8015},[118,83576,2404],{"emptyLinePlaceholder":45},[118,83578,83579,83581,83583,83586],{"class":120,"line":8020},[118,83580,78618],{"class":1967},[118,83582,62297],{"class":1967},[118,83584,83585],{"class":1967}," .tag",[118,83587,15577],{"class":128},[118,83589,83590,83592,83594,83596],{"class":120,"line":8026},[118,83591,55002],{"class":177},[118,83593,51430],{"class":128},[118,83595,60862],{"class":177},[118,83597,1294],{"class":128},[118,83599,83600,83602,83604,83606,83608],{"class":120,"line":8038},[118,83601,54688],{"class":177},[118,83603,51430],{"class":128},[118,83605,206],{"class":177},[118,83607,51485],{"class":124},[118,83609,1294],{"class":128},[118,83611,83612,83614,83616,83618,83620],{"class":120,"line":8050},[118,83613,54915],{"class":177},[118,83615,51430],{"class":128},[118,83617,626],{"class":177},[118,83619,51485],{"class":124},[118,83621,1294],{"class":128},[118,83623,83624,83626,83628,83630],{"class":120,"line":8062},[118,83625,57409],{"class":177},[118,83627,51430],{"class":128},[118,83629,62063],{"class":177},[118,83631,1294],{"class":128},[118,83633,83634],{"class":120,"line":9721},[118,83635,2191],{"class":128},[118,83637,83638],{"class":120,"line":9746},[118,83639,2404],{"emptyLinePlaceholder":45},[118,83641,83642,83644,83646],{"class":120,"line":9769},[118,83643,78618],{"class":1967},[118,83645,78910],{"class":1967},[118,83647,31459],{"class":128},[118,83649,83650,83652,83655],{"class":120,"line":9793},[118,83651,78618],{"class":1967},[118,83653,83654],{"class":1967}," .sub-total",[118,83656,15577],{"class":128},[118,83658,83659,83661,83663,83665,83667],{"class":120,"line":9798},[118,83660,54915],{"class":177},[118,83662,51430],{"class":128},[118,83664,778],{"class":177},[118,83666,51485],{"class":124},[118,83668,1294],{"class":128},[118,83670,83671,83673,83675,83677],{"class":120,"line":9803},[118,83672,57409],{"class":177},[118,83674,51430],{"class":128},[118,83676,78933],{"class":177},[118,83678,1294],{"class":128},[118,83680,83681,83683,83685,83687],{"class":120,"line":9808},[118,83682,61830],{"class":177},[118,83684,51430],{"class":128},[118,83686,346],{"class":177},[118,83688,1294],{"class":128},[118,83690,83691],{"class":120,"line":9817},[118,83692,2191],{"class":128},[118,83694,83695],{"class":120,"line":9822},[118,83696,2404],{"emptyLinePlaceholder":45},[118,83698,83699,83701,83703],{"class":120,"line":9828},[118,83700,78618],{"class":1967},[118,83702,78950],{"class":1967},[118,83704,31459],{"class":128},[118,83706,83707,83709,83712],{"class":120,"line":9849},[118,83708,78618],{"class":1967},[118,83710,83711],{"class":1967}," .sub-total::before",[118,83713,31459],{"class":128},[118,83715,83716,83719],{"class":120,"line":9855},[118,83717,83718],{"class":1967},"    .amount::before",[118,83720,15577],{"class":128},[118,83722,83723,83725,83727,83729],{"class":120,"line":9869},[118,83724,78957],{"class":177},[118,83726,51430],{"class":128},[118,83728,78962],{"class":233},[118,83730,1294],{"class":128},[118,83732,83733,83735,83737,83739,83741],{"class":120,"line":9875},[118,83734,54915],{"class":177},[118,83736,51430],{"class":128},[118,83738,626],{"class":177},[118,83740,51485],{"class":124},[118,83742,1294],{"class":128},[118,83744,83745],{"class":120,"line":9902},[118,83746,2191],{"class":128},[118,83748,83749],{"class":120,"line":9911},[118,83750,2404],{"emptyLinePlaceholder":45},[118,83752,83753,83755,83758],{"class":120,"line":9917},[118,83754,78618],{"class":1967},[118,83756,83757],{"class":1967}," .spec",[118,83759,15577],{"class":128},[118,83761,83762,83764,83766,83768],{"class":120,"line":9925},[118,83763,61830],{"class":177},[118,83765,51430],{"class":128},[118,83767,206],{"class":177},[118,83769,1294],{"class":128},[118,83771,83772,83774,83776,83779],{"class":120,"line":9930},[118,83773,57409],{"class":177},[118,83775,51430],{"class":128},[118,83777,83778],{"class":177},"#888",[118,83780,1294],{"class":128},[118,83782,83783,83785,83787,83789,83791],{"class":120,"line":16609},[118,83784,54915],{"class":177},[118,83786,51430],{"class":128},[118,83788,677],{"class":177},[118,83790,51485],{"class":124},[118,83792,1294],{"class":128},[118,83794,83795,83797,83799,83801,83803],{"class":120,"line":16615},[118,83796,61993],{"class":177},[118,83798,51430],{"class":128},[118,83800,828],{"class":177},[118,83802,51485],{"class":124},[118,83804,1294],{"class":128},[118,83806,83807],{"class":120,"line":16638},[118,83808,2191],{"class":128},[118,83810,83811],{"class":120,"line":16644},[118,83812,2404],{"emptyLinePlaceholder":45},[118,83814,83815,83817,83820],{"class":120,"line":16667},[118,83816,78618],{"class":1967},[118,83818,83819],{"class":1967}," .count",[118,83821,15577],{"class":128},[118,83823,83824,83826,83828,83830],{"class":120,"line":16681},[118,83825,61830],{"class":177},[118,83827,51430],{"class":128},[118,83829,346],{"class":177},[118,83831,1294],{"class":128},[118,83833,83834,83836,83838,83841],{"class":120,"line":16701},[118,83835,57409],{"class":177},[118,83837,51430],{"class":128},[118,83839,83840],{"class":177},"#aaa",[118,83842,1294],{"class":128},[118,83844,83845],{"class":120,"line":16707},[118,83846,2191],{"class":128},[118,83848,83849],{"class":120,"line":16718},[118,83850,2404],{"emptyLinePlaceholder":45},[118,83852,83853,83855],{"class":120,"line":16741},[118,83854,72468],{"class":1967},[118,83856,15577],{"class":128},[118,83858,83859,83861,83863,83865,83867],{"class":120,"line":16763},[118,83860,54764],{"class":177},[118,83862,51430],{"class":128},[118,83864,78567],{"class":177},[118,83866,51485],{"class":124},[118,83868,1294],{"class":128},[118,83870,83871,83873,83875,83877,83879],{"class":120,"line":16768},[118,83872,54699],{"class":177},[118,83874,51430],{"class":128},[118,83876,320],{"class":177},[118,83878,51549],{"class":177},[118,83880,1294],{"class":128},[118,83882,83883,83885,83887,83889],{"class":120,"line":16774},[118,83884,55002],{"class":177},[118,83886,51430],{"class":128},[118,83888,51470],{"class":177},[118,83890,1294],{"class":128},[118,83892,83893,83895,83897,83899],{"class":120,"line":16788},[118,83894,55013],{"class":177},[118,83896,51430],{"class":128},[118,83898,51573],{"class":177},[118,83900,1294],{"class":128},[118,83902,83903,83906,83908,83910,83912,83914,83917],{"class":120,"line":16801},[118,83904,83905],{"class":177},"      border-top",[118,83907,51430],{"class":128},[118,83909,346],{"class":177},[118,83911,51485],{"class":124},[118,83913,51514],{"class":177},[118,83915,83916],{"class":177}," #4e4e4e",[118,83918,1294],{"class":128},[118,83920,83921,83923,83925,83927,83929],{"class":120,"line":16806},[118,83922,54688],{"class":177},[118,83924,51430],{"class":128},[118,83926,828],{"class":177},[118,83928,51485],{"class":124},[118,83930,1294],{"class":128},[118,83932,83933],{"class":120,"line":16820},[118,83934,2191],{"class":128},[118,83936,83937],{"class":120,"line":16825},[118,83938,2404],{"emptyLinePlaceholder":45},[118,83940,83941,83943,83946],{"class":120,"line":16831},[118,83942,72468],{"class":1967},[118,83944,83945],{"class":1967}," .amount",[118,83947,15577],{"class":128},[118,83949,83950,83952,83954,83956,83958],{"class":120,"line":16836},[118,83951,54915],{"class":177},[118,83953,51430],{"class":128},[118,83955,778],{"class":177},[118,83957,51485],{"class":124},[118,83959,1294],{"class":128},[118,83961,83962,83964,83966,83968],{"class":120,"line":16850},[118,83963,57409],{"class":177},[118,83965,51430],{"class":128},[118,83967,78933],{"class":177},[118,83969,1294],{"class":128},[118,83971,83972,83974,83976,83978],{"class":120,"line":16855},[118,83973,62327],{"class":177},[118,83975,51430],{"class":128},[118,83977,51482],{"class":177},[118,83979,1294],{"class":128},[118,83981,83982,83984,83986,83988,83990],{"class":120,"line":16860},[118,83983,61743],{"class":177},[118,83985,51430],{"class":128},[118,83987,784],{"class":177},[118,83989,51485],{"class":124},[118,83991,1294],{"class":128},[118,83993,83994],{"class":120,"line":16874},[118,83995,2191],{"class":128},[118,83997,83998,84000,84002],{"class":120,"line":16886},[118,83999,52410],{"class":128},[118,84001,5131],{"class":51293},[118,84003,51300],{"class":128},[118,84005,84006,84008,84010],{"class":120,"line":16891},[118,84007,51778],{"class":128},[118,84009,51327],{"class":51293},[118,84011,51300],{"class":128},[118,84013,84014],{"class":120,"line":16904},[118,84015,2404],{"emptyLinePlaceholder":45},[118,84017,84018,84020,84022],{"class":120,"line":16909},[118,84019,1038],{"class":128},[118,84021,51793],{"class":51293},[118,84023,51300],{"class":128},[118,84025,84026,84028,84030,84032,84034,84036],{"class":120,"line":16914},[118,84027,52137],{"class":128},[118,84029,51604],{"class":51293},[118,84031,53479],{"class":1967},[118,84033,174],{"class":128},[118,84035,62601],{"class":233},[118,84037,51300],{"class":128},[118,84039,84040,84042,84044],{"class":120,"line":16919},[118,84041,52410],{"class":128},[118,84043,51604],{"class":51293},[118,84045,51300],{"class":128},[118,84047,84048,84050,84052,84054,84056,84058],{"class":120,"line":16932},[118,84049,52137],{"class":128},[118,84051,51604],{"class":51293},[118,84053,53479],{"class":1967},[118,84055,174],{"class":128},[118,84057,62573],{"class":233},[118,84059,51300],{"class":128},[118,84061,84062,84064,84066,84069,84071,84073,84075,84078,84080,84082,84084,84086],{"class":120,"line":16937},[118,84063,51334],{"class":128},[118,84065,51604],{"class":51293},[118,84067,84068],{"class":128},">合计：\u003C",[118,84070,118],{"class":51293},[118,84072,53479],{"class":1967},[118,84074,174],{"class":128},[118,84076,84077],{"class":233},"\"amount\"",[118,84079,55307],{"class":128},[118,84081,118],{"class":51293},[118,84083,55307],{"class":128},[118,84085,51604],{"class":51293},[118,84087,51300],{"class":128},[118,84089,84090,84092,84094],{"class":120,"line":32626},[118,84091,52410],{"class":128},[118,84093,51604],{"class":51293},[118,84095,51300],{"class":128},[118,84097,84098,84100,84102],{"class":120,"line":32632},[118,84099,52137],{"class":128},[118,84101,51806],{"class":51293},[118,84103,51300],{"class":128},[118,84105,84106,84108,84110,84112],{"class":120,"line":32638},[118,84107,11226],{"class":124},[118,84109,79370],{"class":177},[118,84111,13569],{"class":124},[118,84113,55440],{"class":128},[118,84115,84116],{"class":120,"line":32644},[118,84117,79379],{"class":128},[118,84119,84120,84122,84124],{"class":120,"line":32650},[118,84121,79384],{"class":128},[118,84123,79387],{"class":233},[118,84125,31459],{"class":128},[118,84127,84128,84130,84132],{"class":120,"line":32661},[118,84129,79394],{"class":128},[118,84131,79397],{"class":233},[118,84133,31459],{"class":128},[118,84135,84136,84138,84141],{"class":120,"line":32667},[118,84137,79404],{"class":128},[118,84139,84140],{"class":177},"289.9",[118,84142,31459],{"class":128},[118,84144,84145,84147,84149],{"class":120,"line":32687},[118,84146,79414],{"class":128},[118,84148,79417],{"class":233},[118,84150,31459],{"class":128},[118,84152,84153,84156,84158],{"class":120,"line":32693},[118,84154,84155],{"class":128},"        count: ",[118,84157,206],{"class":177},[118,84159,31459],{"class":128},[118,84161,84162,84165,84168],{"class":120,"line":32704},[118,84163,84164],{"class":128},"        spec: { color: ",[118,84166,84167],{"class":233},"'白色'",[118,84169,55597],{"class":128},[118,84171,84172],{"class":120,"line":32710},[118,84173,77885],{"class":128},[118,84175,84176],{"class":120,"line":32716},[118,84177,79379],{"class":128},[118,84179,84180,84182,84184],{"class":120,"line":32722},[118,84181,79384],{"class":128},[118,84183,79478],{"class":233},[118,84185,31459],{"class":128},[118,84187,84188,84190,84192],{"class":120,"line":32728},[118,84189,79394],{"class":128},[118,84191,79487],{"class":233},[118,84193,31459],{"class":128},[118,84195,84196,84198,84201],{"class":120,"line":32734},[118,84197,79404],{"class":128},[118,84199,84200],{"class":177},"109.8",[118,84202,31459],{"class":128},[118,84204,84205,84207,84209],{"class":120,"line":32740},[118,84206,79414],{"class":128},[118,84208,79505],{"class":233},[118,84210,31459],{"class":128},[118,84212,84213,84215,84217],{"class":120,"line":32746},[118,84214,84155],{"class":128},[118,84216,200],{"class":177},[118,84218,31459],{"class":128},[118,84220,84221,84224,84226,84228,84230],{"class":120,"line":32766},[118,84222,84223],{"class":128},"        spec: { size: ",[118,84225,81896],{"class":233},[118,84227,55457],{"class":128},[118,84229,81901],{"class":233},[118,84231,55597],{"class":128},[118,84233,84234],{"class":120,"line":32772},[118,84235,77885],{"class":128},[118,84237,84238],{"class":120,"line":32788},[118,84239,79379],{"class":128},[118,84241,84242,84244,84246],{"class":120,"line":32794},[118,84243,79384],{"class":128},[118,84245,79522],{"class":233},[118,84247,31459],{"class":128},[118,84249,84250,84252,84254],{"class":120,"line":32808},[118,84251,79394],{"class":128},[118,84253,79531],{"class":233},[118,84255,31459],{"class":128},[118,84257,84258,84260,84263],{"class":120,"line":32814},[118,84259,79404],{"class":128},[118,84261,84262],{"class":177},"488",[118,84264,31459],{"class":128},[118,84266,84267,84269,84271],{"class":120,"line":32829},[118,84268,79414],{"class":128},[118,84270,79549],{"class":233},[118,84272,31459],{"class":128},[118,84274,84275,84277,84279],{"class":120,"line":32835},[118,84276,84155],{"class":128},[118,84278,346],{"class":177},[118,84280,31459],{"class":128},[118,84282,84283,84285,84288,84291,84294],{"class":120,"line":32844},[118,84284,84164],{"class":128},[118,84286,84287],{"class":233},"'青色'",[118,84289,84290],{"class":128},", sum: ",[118,84292,84293],{"class":233},"'一大四小'",[118,84295,55597],{"class":128},[118,84297,84298],{"class":120,"line":32850},[118,84299,77885],{"class":128},[118,84301,84302],{"class":120,"line":32859},[118,84303,79379],{"class":128},[118,84305,84306,84308,84310],{"class":120,"line":32865},[118,84307,79384],{"class":128},[118,84309,79566],{"class":233},[118,84311,31459],{"class":128},[118,84313,84314,84316,84318],{"class":120,"line":32871},[118,84315,79394],{"class":128},[118,84317,79575],{"class":233},[118,84319,31459],{"class":128},[118,84321,84322,84324,84327],{"class":120,"line":32880},[118,84323,79404],{"class":128},[118,84325,84326],{"class":177},"139",[118,84328,31459],{"class":128},[118,84330,84331,84333,84335],{"class":120,"line":32886},[118,84332,79414],{"class":128},[118,84334,79593],{"class":233},[118,84336,31459],{"class":128},[118,84338,84339,84341,84343],{"class":120,"line":32897},[118,84340,84155],{"class":128},[118,84342,346],{"class":177},[118,84344,31459],{"class":128},[118,84346,84347,84349,84352,84354,84357],{"class":120,"line":32903},[118,84348,84223],{"class":128},[118,84350,84351],{"class":233},"'小号'",[118,84353,55457],{"class":128},[118,84355,84356],{"class":233},"'紫色'",[118,84358,55463],{"class":128},[118,84360,84361,84364],{"class":120,"line":32922},[118,84362,84363],{"class":128},"        gift: ",[118,84365,84366],{"class":233},"'50g茶叶,清洗球'\n",[118,84368,84369],{"class":120,"line":32928},[118,84370,52391],{"class":128},[118,84372,84373],{"class":120,"line":32939},[118,84374,53102],{"class":128},[118,84376,84377],{"class":120,"line":32945},[118,84378,84379],{"class":187},"    \u002F\u002F  1.根据数据渲染页面\n",[118,84381,84382,84384,84386,84388,84390,84392,84394,84396,84398,84400,84402,84404],{"class":120,"line":32965},[118,84383,52400],{"class":128},[118,84385,54392],{"class":1967},[118,84387,129],{"class":128},[118,84389,79894],{"class":233},[118,84391,74242],{"class":128},[118,84393,174],{"class":124},[118,84395,80041],{"class":128},[118,84397,74037],{"class":1967},[118,84399,129],{"class":128},[118,84401,79788],{"class":5221},[118,84403,79791],{"class":124},[118,84405,15577],{"class":128},[118,84407,84408],{"class":120,"line":32981},[118,84409,84410],{"class":187},"      \u002F\u002F 对象解构\n",[118,84412,84413,84415,84417,84419,84421,84423,84425,84428,84430,84432,84434,84437,84439,84442,84444,84446],{"class":120,"line":32987},[118,84414,58221],{"class":124},[118,84416,79800],{"class":128},[118,84418,79813],{"class":177},[118,84420,12440],{"class":128},[118,84422,79803],{"class":177},[118,84424,12440],{"class":128},[118,84426,84427],{"class":177},"count",[118,84429,12440],{"class":128},[118,84431,79808],{"class":177},[118,84433,12440],{"class":128},[118,84435,84436],{"class":177},"spec",[118,84438,12440],{"class":128},[118,84440,84441],{"class":177},"gift",[118,84443,79816],{"class":128},[118,84445,174],{"class":124},[118,84447,79821],{"class":128},[118,84449,84450],{"class":120,"line":33001},[118,84451,84452],{"class":187},"      \u002F\u002F 规格文字模块处理\n",[118,84454,84455,84457,84460,84462,84464,84466,84468,84470,84472,84474],{"class":120,"line":33007},[118,84456,58221],{"class":124},[118,84458,84459],{"class":177}," text",[118,84461,13569],{"class":124},[118,84463,81931],{"class":128},[118,84465,81934],{"class":1967},[118,84467,81937],{"class":128},[118,84469,74216],{"class":1967},[118,84471,129],{"class":128},[118,84473,81944],{"class":233},[118,84475,135],{"class":128},[118,84477,84478],{"class":120,"line":33013},[118,84479,84480],{"class":187},"      \u002F\u002F 处理赠品模块\n",[118,84482,84483,84485,84487,84489,84492,84494,84496,84498,84500,84503,84505,84507,84509,84511,84513,84516,84518,84521,84523,84525,84527,84529,84531,84533],{"class":120,"line":33024},[118,84484,58221],{"class":124},[118,84486,73912],{"class":177},[118,84488,13569],{"class":124},[118,84490,84491],{"class":128}," gift ",[118,84493,1114],{"class":124},[118,84495,83105],{"class":128},[118,84497,83108],{"class":1967},[118,84499,129],{"class":128},[118,84501,84502],{"class":233},"','",[118,84504,30819],{"class":128},[118,84506,74037],{"class":1967},[118,84508,129],{"class":128},[118,84510,79788],{"class":5221},[118,84512,79791],{"class":124},[118,84514,84515],{"class":233}," `\u003Cspan class=\"tag\">【赠品】${",[118,84517,79788],{"class":128},[118,84519,84520],{"class":233},"}\u003C\u002Fspan>`",[118,84522,30819],{"class":128},[118,84524,74216],{"class":1967},[118,84526,129],{"class":128},[118,84528,74221],{"class":233},[118,84530,13719],{"class":128},[118,84532,987],{"class":124},[118,84534,70097],{"class":233},[118,84536,84537],{"class":120,"line":33030},[118,84538,84539],{"class":187},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[118,84541,84542,84544,84547,84549,84552,84554,84556,84558,84561,84563,84565,84567,84570,84572,84574],{"class":120,"line":33036},[118,84543,58221],{"class":124},[118,84545,84546],{"class":177}," subtotal",[118,84548,13569],{"class":124},[118,84550,84551],{"class":128}," ((price ",[118,84553,583],{"class":124},[118,84555,5759],{"class":177},[118,84557,6523],{"class":124},[118,84559,84560],{"class":128}," count) ",[118,84562,712],{"class":124},[118,84564,5759],{"class":177},[118,84566,30819],{"class":128},[118,84568,84569],{"class":1967},"toFixed",[118,84571,129],{"class":128},[118,84573,206],{"class":177},[118,84575,135],{"class":128},[118,84577,84578],{"class":120,"line":33046},[118,84579,2404],{"emptyLinePlaceholder":45},[118,84581,84582,84584],{"class":120,"line":33052},[118,84583,73975],{"class":124},[118,84585,70161],{"class":233},[118,84587,84588],{"class":120,"line":33063},[118,84589,84590],{"class":233},"        \u003Cdiv class=\"item\">\n",[118,84592,84593,84596,84598],{"class":120,"line":33069},[118,84594,84595],{"class":233},"          \u003Cimg src=\"${",[118,84597,79813],{"class":128},[118,84599,79845],{"class":233},[118,84601,84602,84605,84607,84610,84612],{"class":120,"line":33079},[118,84603,84604],{"class":233},"          \u003Cp class=\"name\">${",[118,84606,79803],{"class":128},[118,84608,84609],{"class":233},"}${",[118,84611,1303],{"class":128},[118,84613,79855],{"class":233},[118,84615,84616,84619,84621],{"class":120,"line":33084},[118,84617,84618],{"class":233},"          \u003Cp class=\"spec\">${",[118,84620,5192],{"class":128},[118,84622,79855],{"class":233},[118,84624,84625,84628,84630,84632,84634,84636,84638,84640],{"class":120,"line":33090},[118,84626,84627],{"class":233},"          \u003Cp class=\"price\">${",[118,84629,79808],{"class":128},[118,84631,686],{"class":233},[118,84633,84569],{"class":1967},[118,84635,129],{"class":233},[118,84637,206],{"class":177},[118,84639,557],{"class":233},[118,84641,79855],{"class":233},[118,84643,84644,84647,84649],{"class":120,"line":33139},[118,84645,84646],{"class":233},"          \u003Cp class=\"count\">x${",[118,84648,84427],{"class":128},[118,84650,79855],{"class":233},[118,84652,84653,84656,84659],{"class":120,"line":33186},[118,84654,84655],{"class":233},"          \u003Cp class=\"sub-total\">${",[118,84657,84658],{"class":128},"subtotal",[118,84660,79855],{"class":233},[118,84662,84663],{"class":120,"line":33191},[118,84664,84665],{"class":233},"        \u003C\u002Fdiv> \n",[118,84667,84668],{"class":120,"line":33197},[118,84669,84670],{"class":233},"             `\n",[118,84672,84673,84676,84678,84680,84682],{"class":120,"line":33216},[118,84674,84675],{"class":128},"    }).",[118,84677,74216],{"class":1967},[118,84679,129],{"class":128},[118,84681,74221],{"class":233},[118,84683,135],{"class":128},[118,84685,84686],{"class":120,"line":33222},[118,84687,84688],{"class":187},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[118,84690,84691,84693,84695,84697,84699,84702,84704,84707,84709,84711,84713,84716,84719,84721,84724,84726,84728,84730,84733,84735,84737,84739,84741],{"class":120,"line":33242},[118,84692,11226],{"class":124},[118,84694,62778],{"class":177},[118,84696,13569],{"class":124},[118,84698,80041],{"class":128},[118,84700,84701],{"class":1967},"reduce",[118,84703,2380],{"class":128},[118,84705,84706],{"class":5221},"prev",[118,84708,12440],{"class":128},[118,84710,79788],{"class":5221},[118,84712,13719],{"class":128},[118,84714,84715],{"class":124},"=>",[118,84717,84718],{"class":128}," prev ",[118,84720,609],{"class":124},[118,84722,84723],{"class":128}," (item.price ",[118,84725,583],{"class":124},[118,84727,5759],{"class":177},[118,84729,6523],{"class":124},[118,84731,84732],{"class":128}," item.count) ",[118,84734,712],{"class":124},[118,84736,5759],{"class":177},[118,84738,12440],{"class":128},[118,84740,320],{"class":177},[118,84742,135],{"class":128},[118,84744,84745,84747,84749,84751,84754,84756,84758,84761,84763,84765,84767],{"class":120,"line":33248},[118,84746,52400],{"class":128},[118,84748,54392],{"class":1967},[118,84750,129],{"class":128},[118,84752,84753],{"class":233},"'.amount'",[118,84755,74242],{"class":128},[118,84757,174],{"class":124},[118,84759,84760],{"class":128}," total.",[118,84762,84569],{"class":1967},[118,84764,129],{"class":128},[118,84766,206],{"class":177},[118,84768,135],{"class":128},[118,84770,84771,84773,84775],{"class":120,"line":33254},[118,84772,52410],{"class":128},[118,84774,51806],{"class":51293},[118,84776,51300],{"class":128},[118,84778,84779,84781,84783],{"class":120,"line":33264},[118,84780,51778],{"class":128},[118,84782,51793],{"class":51293},[118,84784,51300],{"class":128},[118,84786,84787],{"class":120,"line":33269},[118,84788,2404],{"emptyLinePlaceholder":45},[118,84790,84791,84793,84795],{"class":120,"line":33275},[118,84792,51778],{"class":128},[118,84794,50628],{"class":51293},[118,84796,51300],{"class":128},[60,84798,84800],{"id":84799},"_411-编程思想","4.11 编程思想",[89,84802,84804],{"id":84803},"_4111-面向过程介绍","4.11.1 面向过程介绍",[15,84806,84807,84810],{},[278,84808,84809],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[15,84812,84813],{},"调用就可以了",[15,84815,84816],{},[1466,84817],{"alt":39,"src":84818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[89,84820,84822],{"id":84821},"_4112-面向对象","4.11.2 面向对象",[15,84824,84825],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[15,84827,84828],{},[1466,84829],{"alt":39,"src":84830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[15,84832,84833],{},"面向对象的特性：",[1135,84835,84836,84839,84842],{},[75,84837,84838],{},"封装性",[75,84840,84841],{},"继承性",[75,84843,84844],{},"多态性",[89,84846,84848],{"id":84847},"_4113-两者比较","4.11.3 两者比较",[15,84850,84851],{},[1466,84852],{"alt":39,"src":84853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[60,84855,84857],{"id":84856},"_412-构造函数回顾","4.12 构造函数回顾",[15,84859,84860],{},[1466,84861],{"alt":39,"src":84862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[15,84864,84865],{},[1466,84866],{"alt":39,"src":84867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[15,84869,84870],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[15,84872,84873],{},[1466,84874],{"alt":39,"src":84875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[60,84877,84879],{"id":84878},"_413-原型","4.13 原型",[89,84881,84883],{"id":84882},"_4131-原型对象的认识","4.13.1 原型对象的认识",[15,84885,84886],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[15,84888,84889],{},[1466,84890],{"alt":39,"src":84891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[15,84893,84894],{},[1466,84895],{"alt":39,"src":84896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[15,84898,84899],{},"原型是构造函数的属性，它也是一个对象",[15,84901,84902],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[15,84904,84905],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[109,84907,84909],{"className":53060,"code":84908,"language":53062,"meta":39,"style":39},"\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",[115,84910,84911,84919,84924,84932,84937,84942,84947,84952,84957,84961,84965,84969,84974,84979,84983,84988,84993,84998,85003,85008,85012,85020],{"__ignoreMap":39},[118,84912,84913,84915,84917],{"class":120,"line":121},[118,84914,1038],{"class":128},[118,84916,51793],{"class":51293},[118,84918,51300],{"class":128},[118,84920,84921],{"class":120,"line":40},[118,84922,84923],{"class":187},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[118,84925,84926,84928,84930],{"class":120,"line":1183},[118,84927,52137],{"class":128},[118,84929,51806],{"class":51293},[118,84931,51300],{"class":128},[118,84933,84934],{"class":120,"line":1198},[118,84935,84936],{"class":128},"    function Star(uname, age) {\n",[118,84938,84939],{"class":120,"line":1204},[118,84940,84941],{"class":128},"      this.uname = uname,\n",[118,84943,84944],{"class":120,"line":1218},[118,84945,84946],{"class":128},"        this.age = age\n",[118,84948,84949],{"class":120,"line":1224},[118,84950,84951],{"class":128},"      \u002F\u002F this.sing = function () {\n",[118,84953,84954],{"class":120,"line":1315},[118,84955,84956],{"class":128},"      \u002F\u002F   console.log('唱歌')\n",[118,84958,84959],{"class":120,"line":1321},[118,84960,2404],{"emptyLinePlaceholder":45},[118,84962,84963],{"class":120,"line":1333},[118,84964,60030],{"class":128},[118,84966,84967],{"class":120,"line":1616},[118,84968,2191],{"class":128},[118,84970,84971],{"class":120,"line":1621},[118,84972,84973],{"class":128},"    Star.prototype.sing = function () {\n",[118,84975,84976],{"class":120,"line":1627},[118,84977,84978],{"class":128},"      console.log('唱歌')\n",[118,84980,84981],{"class":120,"line":1632},[118,84982,2191],{"class":128},[118,84984,84985],{"class":120,"line":1646},[118,84986,84987],{"class":128},"    \u002F\u002F console.dir(Star.prototype)\n",[118,84989,84990],{"class":120,"line":1651},[118,84991,84992],{"class":128},"    const pink = new Star('pink', 18)\n",[118,84994,84995],{"class":120,"line":1657},[118,84996,84997],{"class":128},"    const red = new Star('red', 20)\n",[118,84999,85000],{"class":120,"line":1678},[118,85001,85002],{"class":128},"    pink.sing()\n",[118,85004,85005],{"class":120,"line":1683},[118,85006,85007],{"class":128},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[118,85009,85010],{"class":120,"line":1697},[118,85011,2404],{"emptyLinePlaceholder":45},[118,85013,85014,85016,85018],{"class":120,"line":1702},[118,85015,52410],{"class":128},[118,85017,51806],{"class":51293},[118,85019,51300],{"class":128},[118,85021,85022,85024,85026],{"class":120,"line":1731},[118,85023,51778],{"class":128},[118,85025,51793],{"class":51293},[118,85027,51300],{"class":128},[15,85029,85030],{},[1466,85031],{"alt":39,"src":85032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[109,85034,85036],{"className":53060,"code":85035,"language":53062,"meta":39,"style":39},"\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",[115,85037,85038,85046,85054,85059,85064,85069,85074,85078,85083,85088,85093,85097,85102,85106,85110,85115,85119,85127],{"__ignoreMap":39},[118,85039,85040,85042,85044],{"class":120,"line":121},[118,85041,1038],{"class":128},[118,85043,51793],{"class":51293},[118,85045,51300],{"class":128},[118,85047,85048,85050,85052],{"class":120,"line":40},[118,85049,52137],{"class":128},[118,85051,51806],{"class":51293},[118,85053,51300],{"class":128},[118,85055,85056],{"class":120,"line":1183},[118,85057,85058],{"class":128},"    let that\n",[118,85060,85061],{"class":120,"line":1198},[118,85062,85063],{"class":128},"    function Star(uname) {\n",[118,85065,85066],{"class":120,"line":1204},[118,85067,85068],{"class":128},"      this.uname = uname\n",[118,85070,85071],{"class":120,"line":1218},[118,85072,85073],{"class":128},"      that = this\n",[118,85075,85076],{"class":120,"line":1224},[118,85077,2191],{"class":128},[118,85079,85080],{"class":120,"line":1315},[118,85081,85082],{"class":128},"    \u002F\u002F 实例对象是 ldh\n",[118,85084,85085],{"class":120,"line":1321},[118,85086,85087],{"class":128},"    const ldh = new Star('刘德华')\n",[118,85089,85090],{"class":120,"line":1333},[118,85091,85092],{"class":128},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[118,85094,85095],{"class":120,"line":1616},[118,85096,2404],{"emptyLinePlaceholder":45},[118,85098,85099],{"class":120,"line":1621},[118,85100,85101],{"class":128},"    Star.sing = function () {\n",[118,85103,85104],{"class":120,"line":1627},[118,85105,84978],{"class":128},[118,85107,85108],{"class":120,"line":1632},[118,85109,2191],{"class":128},[118,85111,85112],{"class":120,"line":1646},[118,85113,85114],{"class":128},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[118,85116,85117],{"class":120,"line":1651},[118,85118,2404],{"emptyLinePlaceholder":45},[118,85120,85121,85123,85125],{"class":120,"line":1657},[118,85122,52410],{"class":128},[118,85124,51806],{"class":51293},[118,85126,51300],{"class":128},[118,85128,85129,85131,85133],{"class":120,"line":1678},[118,85130,51778],{"class":128},[118,85132,51793],{"class":51293},[118,85134,51300],{"class":128},[15,85136,85137],{},"构造函数的this指向的是实例对象；",[15,85139,85140],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[89,85142,85144],{"id":85143},"_4132-数组扩展方法","4.13.2 数组扩展方法",[15,85146,85147],{},[1466,85148],{"alt":39,"src":85149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[109,85151,85153],{"className":53060,"code":85152,"language":53062,"meta":39,"style":39},"\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",[115,85154,85155,85163,85171,85176,85181,85186,85191,85196,85201,85206,85211,85216,85221,85225,85230,85235,85240,85245,85249,85254,85259,85264,85269,85273,85278,85283,85288,85293,85297,85302,85306,85314],{"__ignoreMap":39},[118,85156,85157,85159,85161],{"class":120,"line":121},[118,85158,1038],{"class":128},[118,85160,51793],{"class":51293},[118,85162,51300],{"class":128},[118,85164,85165,85167,85169],{"class":120,"line":40},[118,85166,52137],{"class":128},[118,85168,51806],{"class":51293},[118,85170,51300],{"class":128},[118,85172,85173],{"class":120,"line":1183},[118,85174,85175],{"class":128},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[118,85177,85178],{"class":120,"line":1198},[118,85179,85180],{"class":128},"    const arr = [1, 2, 3]\n",[118,85182,85183],{"class":120,"line":1204},[118,85184,85185],{"class":128},"    \u002F\u002F 自己定义数组的扩展方法\n",[118,85187,85188],{"class":120,"line":1218},[118,85189,85190],{"class":128},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[118,85192,85193],{"class":120,"line":1224},[118,85194,85195],{"class":128},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[118,85197,85198],{"class":120,"line":1315},[118,85199,85200],{"class":128},"    \u002F\u002F ①.最大值\n",[118,85202,85203],{"class":120,"line":1321},[118,85204,85205],{"class":128},"    Array.prototype.max = function () {\n",[118,85207,85208],{"class":120,"line":1333},[118,85209,85210],{"class":128},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[118,85212,85213],{"class":120,"line":1616},[118,85214,85215],{"class":128},"      return Math.max(...this)\n",[118,85217,85218],{"class":120,"line":1621},[118,85219,85220],{"class":128},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[118,85222,85223],{"class":120,"line":1627},[118,85224,2191],{"class":128},[118,85226,85227],{"class":120,"line":1632},[118,85228,85229],{"class":128},"    console.log(arr.max())\n",[118,85231,85232],{"class":120,"line":1646},[118,85233,85234],{"class":128},"    \u002F\u002F ②最小值\n",[118,85236,85237],{"class":120,"line":1651},[118,85238,85239],{"class":128},"    Array.prototype.min = function () {\n",[118,85241,85242],{"class":120,"line":1657},[118,85243,85244],{"class":128},"      return Math.min(...this)\n",[118,85246,85247],{"class":120,"line":1678},[118,85248,2191],{"class":128},[118,85250,85251],{"class":120,"line":1683},[118,85252,85253],{"class":128},"    console.log(arr.min())\n",[118,85255,85256],{"class":120,"line":1697},[118,85257,85258],{"class":128},"    \u002F\u002F③求和\n",[118,85260,85261],{"class":120,"line":1702},[118,85262,85263],{"class":128},"    Array.prototype.sum = function () {\n",[118,85265,85266],{"class":120,"line":1731},[118,85267,85268],{"class":128},"      return this.reduce((prev, current) => prev + current, 0)\n",[118,85270,85271],{"class":120,"line":1736},[118,85272,2191],{"class":128},[118,85274,85275],{"class":120,"line":1753},[118,85276,85277],{"class":128},"    console.log(arr.sum())\n",[118,85279,85280],{"class":120,"line":1758},[118,85281,85282],{"class":128},"    \u002F\u002F ③排序\n",[118,85284,85285],{"class":120,"line":1763},[118,85286,85287],{"class":128},"    Array.prototype.rever = function () {\n",[118,85289,85290],{"class":120,"line":1768},[118,85291,85292],{"class":128},"      return this.reverse()\n",[118,85294,85295],{"class":120,"line":1782},[118,85296,2191],{"class":128},[118,85298,85299],{"class":120,"line":1787},[118,85300,85301],{"class":128},"    console.log(arr.rever())\n",[118,85303,85304],{"class":120,"line":2581},[118,85305,2404],{"emptyLinePlaceholder":45},[118,85307,85308,85310,85312],{"class":120,"line":2595},[118,85309,52410],{"class":128},[118,85311,51806],{"class":51293},[118,85313,51300],{"class":128},[118,85315,85316,85318,85320],{"class":120,"line":2603},[118,85317,51778],{"class":128},[118,85319,51793],{"class":51293},[118,85321,51300],{"class":128},[15,85323,85324],{},[1466,85325],{"alt":39,"src":85326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[89,85328,85330],{"id":85329},"_4133-constructor-属性","4.13.3 constructor 属性",[15,85332,85333],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[15,85335,85336],{},[1466,85337],{"alt":39,"src":85338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[109,85340,85342],{"className":53060,"code":85341,"language":53062,"meta":39,"style":39},"\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",[115,85343,85344,85352,85360,85365,85370,85374,85379,85384,85389,85397],{"__ignoreMap":39},[118,85345,85346,85348,85350],{"class":120,"line":121},[118,85347,1038],{"class":128},[118,85349,51793],{"class":51293},[118,85351,51300],{"class":128},[118,85353,85354,85356,85358],{"class":120,"line":40},[118,85355,52137],{"class":128},[118,85357,51806],{"class":51293},[118,85359,51300],{"class":128},[118,85361,85362],{"class":120,"line":1183},[118,85363,85364],{"class":128},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[118,85366,85367],{"class":120,"line":1198},[118,85368,85369],{"class":128},"    function Star() {\n",[118,85371,85372],{"class":120,"line":1204},[118,85373,2191],{"class":128},[118,85375,85376],{"class":120,"line":1218},[118,85377,85378],{"class":128},"    const ldh = new Star()\n",[118,85380,85381],{"class":120,"line":1224},[118,85382,85383],{"class":128},"    console.log(Star.prototype)\n",[118,85385,85386],{"class":120,"line":1315},[118,85387,85388],{"class":128},"    console.log(Star.prototype.constructor === Star)\n",[118,85390,85391,85393,85395],{"class":120,"line":1321},[118,85392,52410],{"class":128},[118,85394,51806],{"class":51293},[118,85396,51300],{"class":128},[118,85398,85399,85401,85403],{"class":120,"line":1333},[118,85400,51778],{"class":128},[118,85402,51793],{"class":51293},[118,85404,51300],{"class":128},[15,85406,85407],{},[1466,85408],{"alt":39,"src":85409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[15,85411,85412],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[109,85414,85416],{"className":53060,"code":85415,"language":53062,"meta":39,"style":39},"  \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",[115,85417,85418,85426,85430,85434,85438,85443,85448,85453,85457,85462,85467,85472,85477,85482,85487,85491,85495,85500,85505,85510,85514,85519,85524,85528,85532,85536],{"__ignoreMap":39},[118,85419,85420,85422,85424],{"class":120,"line":121},[118,85421,52137],{"class":128},[118,85423,51806],{"class":51293},[118,85425,51300],{"class":128},[118,85427,85428],{"class":120,"line":40},[118,85429,85364],{"class":128},[118,85431,85432],{"class":120,"line":1183},[118,85433,85369],{"class":128},[118,85435,85436],{"class":120,"line":1198},[118,85437,2191],{"class":128},[118,85439,85440],{"class":120,"line":1204},[118,85441,85442],{"class":128},"    \u002F\u002F const ldh = new Star()\n",[118,85444,85445],{"class":120,"line":1218},[118,85446,85447],{"class":128},"    \u002F\u002F console.log(Star.prototype)\n",[118,85449,85450],{"class":120,"line":1224},[118,85451,85452],{"class":128},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[118,85454,85455],{"class":120,"line":1315},[118,85456,2404],{"emptyLinePlaceholder":45},[118,85458,85459],{"class":120,"line":1321},[118,85460,85461],{"class":128},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[118,85463,85464],{"class":120,"line":1333},[118,85465,85466],{"class":128},"    \u002F\u002F Star.prototype.sing = function () {\n",[118,85468,85469],{"class":120,"line":1616},[118,85470,85471],{"class":128},"    \u002F\u002F   console.log('唱歌')\n",[118,85473,85474],{"class":120,"line":1621},[118,85475,85476],{"class":128},"    \u002F\u002F }\n",[118,85478,85479],{"class":120,"line":1627},[118,85480,85481],{"class":128},"    \u002F\u002F Star.prototype.dance = function () {\n",[118,85483,85484],{"class":120,"line":1632},[118,85485,85486],{"class":128},"    \u002F\u002F   console.log('跳舞')\n",[118,85488,85489],{"class":120,"line":1646},[118,85490,85476],{"class":128},[118,85492,85493],{"class":120,"line":1651},[118,85494,85383],{"class":128},[118,85496,85497],{"class":120,"line":1657},[118,85498,85499],{"class":128},"    Star.prototype = {\n",[118,85501,85502],{"class":120,"line":1678},[118,85503,85504],{"class":128},"      sing: function () {\n",[118,85506,85507],{"class":120,"line":1683},[118,85508,85509],{"class":128},"        console.log('唱歌')\n",[118,85511,85512],{"class":120,"line":1697},[118,85513,77885],{"class":128},[118,85515,85516],{"class":120,"line":1702},[118,85517,85518],{"class":128},"      dance: function () {\n",[118,85520,85521],{"class":120,"line":1731},[118,85522,85523],{"class":128},"        console.log('跳舞')\n",[118,85525,85526],{"class":120,"line":1736},[118,85527,52391],{"class":128},[118,85529,85530],{"class":120,"line":1753},[118,85531,2191],{"class":128},[118,85533,85534],{"class":120,"line":1758},[118,85535,85383],{"class":128},[118,85537,85538,85540,85542],{"class":120,"line":1763},[118,85539,52410],{"class":128},[118,85541,51806],{"class":51293},[118,85543,51300],{"class":128},[15,85545,85546],{},"进行输出结果后会发现：",[15,85548,85549],{},[1466,85550],{"alt":39,"src":85551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[15,85553,85554],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[15,85556,85557],{},"所以，要重新指回创造这个原型对象的构造函数",[109,85559,85561],{"className":71206,"code":85560,"language":71208,"meta":39,"style":39},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[115,85562,85563,85577,85582,85587,85598,85611,85616,85627,85641,85645],{"__ignoreMap":39},[118,85564,85565,85568,85570,85573,85575],{"class":120,"line":121},[118,85566,85567],{"class":177},"Star",[118,85569,686],{"class":128},[118,85571,85572],{"class":177},"prototype",[118,85574,13569],{"class":124},[118,85576,15577],{"class":128},[118,85578,85579],{"class":120,"line":40},[118,85580,85581],{"class":187},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[118,85583,85584],{"class":120,"line":1183},[118,85585,85586],{"class":128},"  constructor: Star,\n",[118,85588,85589,85592,85594,85596],{"class":120,"line":1198},[118,85590,85591],{"class":1967},"  sing",[118,85593,51430],{"class":128},[118,85595,54442],{"class":124},[118,85597,54445],{"class":128},[118,85599,85600,85602,85604,85606,85609],{"class":120,"line":1204},[118,85601,73746],{"class":128},[118,85603,58240],{"class":1967},[118,85605,129],{"class":128},[118,85607,85608],{"class":233},"'唱歌'",[118,85610,135],{"class":128},[118,85612,85613],{"class":120,"line":1218},[118,85614,85615],{"class":128},"   },\n",[118,85617,85618,85621,85623,85625],{"class":120,"line":1224},[118,85619,85620],{"class":1967},"   dance",[118,85622,51430],{"class":128},[118,85624,54442],{"class":124},[118,85626,54445],{"class":128},[118,85628,85629,85632,85634,85636,85639],{"class":120,"line":1315},[118,85630,85631],{"class":128},"     console.",[118,85633,58240],{"class":1967},[118,85635,129],{"class":128},[118,85637,85638],{"class":233},"'跳舞'",[118,85640,135],{"class":128},[118,85642,85643],{"class":120,"line":1321},[118,85644,4313],{"class":128},[118,85646,85647],{"class":120,"line":1333},[118,85648,1569],{"class":128},[15,85650,85651],{},[1466,85652],{"alt":39,"src":85653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[15,85655,85656],{},"总结1：",[15,85658,85659],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[15,85661,85662],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[15,85664,85665],{},"constructor指的是他的来源",[15,85667,85668],{},[1466,85669],{"alt":39,"src":85670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[15,85672,85673],{},[1466,85674],{"alt":39,"src":85675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[15,85677,85678],{},"总结2：",[15,85680,85681],{},[1466,85682],{"alt":39,"src":85683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[15,85685,85686],{},[1466,85687],{"alt":39,"src":85688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[15,85690,85691],{},[1466,85692],{"alt":39,"src":85693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[89,85695,85697],{"id":85696},"_4134-对象原型","4.13.4 对象原型",[15,85699,85700],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[15,85702,85703],{},"对象原型就是__proto__这个属性",[15,85705,85706],{},[1466,85707],{"alt":39,"src":85708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[15,85710,85711],{},[1466,85712],{"alt":39,"src":85713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[15,85715,85716],{},[1466,85717],{"alt":39,"src":85718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[15,85720,85721],{},[1466,85722],{"alt":39,"src":85723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[109,85725,85727],{"className":53060,"code":85726,"language":53062,"meta":39,"style":39},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[115,85728,85729,85737,85745,85749,85753,85757,85762,85770],{"__ignoreMap":39},[118,85730,85731,85733,85735],{"class":120,"line":121},[118,85732,1038],{"class":128},[118,85734,51793],{"class":51293},[118,85736,51300],{"class":128},[118,85738,85739,85741,85743],{"class":120,"line":40},[118,85740,52137],{"class":128},[118,85742,51806],{"class":51293},[118,85744,51300],{"class":128},[118,85746,85747],{"class":120,"line":1183},[118,85748,85369],{"class":128},[118,85750,85751],{"class":120,"line":1198},[118,85752,2191],{"class":128},[118,85754,85755],{"class":120,"line":1204},[118,85756,85378],{"class":128},[118,85758,85759],{"class":120,"line":1218},[118,85760,85761],{"class":128},"    console.log(ldh)\n",[118,85763,85764,85766,85768],{"class":120,"line":1224},[118,85765,52410],{"class":128},[118,85767,51806],{"class":51293},[118,85769,51300],{"class":128},[118,85771,85772,85774,85776],{"class":120,"line":1315},[118,85773,51778],{"class":128},[118,85775,51793],{"class":51293},[118,85777,51300],{"class":128},[15,85779,85780],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[15,85782,85783],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[15,85785,85786],{},[1466,85787],{"alt":39,"src":85788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[15,85790,85791],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[15,85793,85794],{},"对象原型指向原型对象",[15,85796,85797],{},[1466,85798],{"alt":39,"src":85799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[15,85801,85802],{},[1466,85803],{"alt":39,"src":85804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[15,85806,85807],{},[1466,85808],{"alt":39,"src":85809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[89,85811,85813],{"id":85812},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[15,85815,85816],{},[1466,85817],{"alt":39,"src":85818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[72,85820,85821,85824,85827,85830],{},[75,85822,85823],{},"构造函数通过new的形式实例化得到实例对象",[75,85825,85826],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[75,85828,85829],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[75,85831,85832],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[15,85834,85835],{},[1466,85836],{"alt":39,"src":85837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[15,85839,85840],{},"题目梳理：",[15,85842,85843],{},[1466,85844],{"alt":39,"src":85845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[89,85847,85849],{"id":85848},"_4136-原型继承","4.13.6 原型继承",[15,85851,85852],{},[1466,85853],{"alt":39,"src":85854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[15,85856,85857],{},[1466,85858],{"alt":39,"src":85859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[15,85861,85862],{},[1466,85863],{"alt":39,"src":85864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[15,85866,85867],{},[1466,85868],{"alt":39,"src":85869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[15,85871,85872],{},[1466,85873],{"alt":39,"src":85874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[15,85876,85877],{},[1466,85878],{"alt":39,"src":85879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[15,85881,85882],{},[1466,85883],{"alt":39,"src":85884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[15,85886,85887],{},[1466,85888],{"alt":39,"src":85889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[15,85891,85892],{},"回顾：构造函数每次new得到对象都是不同的",[89,85894,85896],{"id":85895},"_4137-原型链","4.13.7 原型链",[15,85898,85899],{},[1466,85900],{"alt":39,"src":85901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[15,85903,85904],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[15,85906,85907],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[15,85909,85910],{},"大哥是Object",[15,85912,85913],{},[1466,85914],{"alt":39,"src":85915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[15,85917,85918],{},[1466,85919],{"alt":39,"src":85920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[15,85922,85923],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[15,85925,85926],{},"万物皆对象",[89,85928,85930],{"id":85929},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[15,85932,85933],{},"模态框",[15,85935,85936],{},"以后遇见这个效果直接使用这个就行",[15,85938,85939],{},[1466,85940],{"alt":39,"src":85941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[15,85943,85944],{},[1466,85945],{"alt":39,"src":85946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[15,85948,85949],{},[1466,85950],{"alt":39,"src":85951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[15,85953,85954],{},[1466,85955],{"alt":39,"src":85956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[15,85958,85959],{},"补充知识点：",[72,85961,85962],{},[75,85963,85964],{},"append()",[15,85966,85967],{},[1466,85968],{"alt":39,"src":85969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[109,85971,85973],{"className":50626,"code":85972,"language":50628,"meta":39,"style":39},"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",[115,85974,85975,85980,85985,85990,85994,85998,86002,86007,86012,86017,86021],{"__ignoreMap":39},[118,85976,85977],{"class":120,"line":121},[118,85978,85979],{"class":128},"append(param1)\n",[118,85981,85982],{"class":120,"line":40},[118,85983,85984],{"class":128},"append(param1, param2)\n",[118,85986,85987],{"class":120,"line":1183},[118,85988,85989],{"class":128},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[118,85991,85992],{"class":120,"line":1198},[118,85993,2404],{"emptyLinePlaceholder":45},[118,85995,85996],{"class":120,"line":1204},[118,85997,2404],{"emptyLinePlaceholder":45},[118,85999,86000],{"class":120,"line":1218},[118,86001,2404],{"emptyLinePlaceholder":45},[118,86003,86004],{"class":120,"line":1224},[118,86005,86006],{"class":128},"let div = document.createElement(\"div\");\n",[118,86008,86009],{"class":120,"line":1315},[118,86010,86011],{"class":128},"let p = document.createElement(\"p\");\n",[118,86013,86014],{"class":120,"line":1321},[118,86015,86016],{"class":128},"div.append(p);\n",[118,86018,86019],{"class":120,"line":1333},[118,86020,2404],{"emptyLinePlaceholder":45},[118,86022,86023,86026,86028],{"class":120,"line":1616},[118,86024,86025],{"class":128},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[118,86027,15],{"class":51293},[118,86029,86030],{"class":128},"> ]\n",[72,86032,86033],{"start":40},[75,86034,86035],{},"remove()",[15,86037,86038],{},"自己删自己",[15,86040,86041],{},[1466,86042],{"alt":39,"src":86043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[109,86045,86047],{"className":50626,"code":86046,"language":50628,"meta":39,"style":39},"\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",[115,86048,86049,86059,86073,86077,86085,86099,86119,86131,86139,86146,86158,86171,86206,86218,86229,86241,86253,86265,86292,86302,86306,86310,86319,86331,86345,86355,86367,86371,86375,86385,86396,86406,86416,86429,86442,86452,86456,86460,86469,86479,86491,86495,86499,86508,86518,86528,86540,86544,86548,86558,86574,86585,86595,86605,86617,86629,86641,86645,86649,86662,86673,86677,86685,86693,86697,86705,86725,86745,86753,86758,86784,86789,86794,86813,86818,86830,86835,86846,86856,86866,86871,86876,86880,86885,86890,86895,86915,86920,86940,86945,86959,86964,86969,86974,86990,86994,86999,87028,87033,87038,87043,87054,87058,87062,87066,87071,87096,87101,87126,87131,87140,87144,87149,87174,87178,87203,87207,87216,87220,87225,87243,87253,87257,87265,87273,87277],{"__ignoreMap":39},[118,86050,86051,86053,86055,86057],{"class":120,"line":121},[118,86052,51290],{"class":128},[118,86054,51294],{"class":51293},[118,86056,51297],{"class":1967},[118,86058,51300],{"class":128},[118,86060,86061,86063,86065,86067,86069,86071],{"class":120,"line":40},[118,86062,1038],{"class":128},[118,86064,50628],{"class":51293},[118,86066,51309],{"class":1967},[118,86068,174],{"class":128},[118,86070,51314],{"class":233},[118,86072,51300],{"class":128},[118,86074,86075],{"class":120,"line":1183},[118,86076,2404],{"emptyLinePlaceholder":45},[118,86078,86079,86081,86083],{"class":120,"line":1198},[118,86080,1038],{"class":128},[118,86082,51327],{"class":51293},[118,86084,51300],{"class":128},[118,86086,86087,86089,86091,86093,86095,86097],{"class":120,"line":1204},[118,86088,52137],{"class":128},[118,86090,51337],{"class":51293},[118,86092,51340],{"class":1967},[118,86094,174],{"class":128},[118,86096,51345],{"class":233},[118,86098,51300],{"class":128},[118,86100,86101,86103,86105,86107,86109,86111,86113,86115,86117],{"class":120,"line":1218},[118,86102,52137],{"class":128},[118,86104,51337],{"class":51293},[118,86106,14925],{"class":1967},[118,86108,174],{"class":128},[118,86110,51384],{"class":233},[118,86112,51364],{"class":1967},[118,86114,174],{"class":128},[118,86116,51391],{"class":233},[118,86118,51300],{"class":128},[118,86120,86121,86123,86125,86127,86129],{"class":120,"line":1224},[118,86122,52137],{"class":128},[118,86124,51400],{"class":51293},[118,86126,51403],{"class":128},[118,86128,51400],{"class":51293},[118,86130,51300],{"class":128},[118,86132,86133,86135,86137],{"class":120,"line":1315},[118,86134,52137],{"class":128},[118,86136,5131],{"class":51293},[118,86138,51300],{"class":128},[118,86140,86141,86144],{"class":120,"line":1321},[118,86142,86143],{"class":1967},"    .modal",[118,86145,15577],{"class":128},[118,86147,86148,86150,86152,86154,86156],{"class":120,"line":1333},[118,86149,54764],{"class":177},[118,86151,51430],{"class":128},[118,86153,3977],{"class":177},[118,86155,51485],{"class":124},[118,86157,1294],{"class":128},[118,86159,86160,86163,86165,86167,86169],{"class":120,"line":1616},[118,86161,86162],{"class":177},"      min-height",[118,86164,51430],{"class":128},[118,86166,439],{"class":177},[118,86168,51485],{"class":124},[118,86170,1294],{"class":128},[118,86172,86173,86175,86177,86179,86181,86183,86185,86187,86189,86191,86193,86195,86197,86199,86201,86204],{"class":120,"line":1621},[118,86174,78743],{"class":177},[118,86176,51430],{"class":128},[118,86178,320],{"class":177},[118,86180,4097],{"class":177},[118,86182,2042],{"class":177},[118,86184,51485],{"class":124},[118,86186,78760],{"class":177},[118,86188,129],{"class":128},[118,86190,320],{"class":177},[118,86192,12440],{"class":128},[118,86194,320],{"class":177},[118,86196,12440],{"class":128},[118,86198,320],{"class":177},[118,86200,12440],{"class":128},[118,86202,86203],{"class":177},"0.1",[118,86205,2723],{"class":128},[118,86207,86208,86210,86212,86214,86216],{"class":120,"line":1627},[118,86209,55127],{"class":177},[118,86211,51430],{"class":128},[118,86213,421],{"class":177},[118,86215,51485],{"class":124},[118,86217,1294],{"class":128},[118,86219,86220,86222,86224,86227],{"class":120,"line":1632},[118,86221,54752],{"class":177},[118,86223,51430],{"class":128},[118,86225,86226],{"class":177},"fixed",[118,86228,1294],{"class":128},[118,86230,86231,86234,86236,86239],{"class":120,"line":1646},[118,86232,86233],{"class":177},"      z-index",[118,86235,51430],{"class":128},[118,86237,86238],{"class":177},"999",[118,86240,1294],{"class":128},[118,86242,86243,86245,86247,86249,86251],{"class":120,"line":1651},[118,86244,54831],{"class":177},[118,86246,51430],{"class":128},[118,86248,784],{"class":177},[118,86250,456],{"class":124},[118,86252,1294],{"class":128},[118,86254,86255,86257,86259,86261,86263],{"class":120,"line":1657},[118,86256,54940],{"class":177},[118,86258,51430],{"class":128},[118,86260,784],{"class":177},[118,86262,456],{"class":124},[118,86264,1294],{"class":128},[118,86266,86267,86269,86271,86273,86275,86278,86280,86282,86284,86286,86288,86290],{"class":120,"line":1678},[118,86268,78784],{"class":177},[118,86270,51430],{"class":128},[118,86272,78789],{"class":177},[118,86274,129],{"class":128},[118,86276,86277],{"class":177},"-50",[118,86279,456],{"class":124},[118,86281,12440],{"class":128},[118,86283,86277],{"class":177},[118,86285,456],{"class":124},[118,86287,12440],{"class":128},[118,86289,320],{"class":177},[118,86291,2723],{"class":128},[118,86293,86294,86296,86298,86300],{"class":120,"line":1683},[118,86295,54877],{"class":177},[118,86297,51430],{"class":128},[118,86299,60835],{"class":177},[118,86301,1294],{"class":128},[118,86303,86304],{"class":120,"line":1697},[118,86305,2191],{"class":128},[118,86307,86308],{"class":120,"line":1702},[118,86309,2404],{"emptyLinePlaceholder":45},[118,86311,86312,86314,86317],{"class":120,"line":1731},[118,86313,86143],{"class":1967},[118,86315,86316],{"class":1967}," .header",[118,86318,15577],{"class":128},[118,86320,86321,86323,86325,86327,86329],{"class":120,"line":1736},[118,86322,57352],{"class":177},[118,86324,51430],{"class":128},[118,86326,529],{"class":177},[118,86328,51485],{"class":124},[118,86330,1294],{"class":128},[118,86332,86333,86335,86337,86339,86341,86343],{"class":120,"line":1753},[118,86334,54688],{"class":177},[118,86336,51430],{"class":128},[118,86338,320],{"class":177},[118,86340,2042],{"class":177},[118,86342,51485],{"class":124},[118,86344,1294],{"class":128},[118,86346,86347,86349,86351,86353],{"class":120,"line":1758},[118,86348,54752],{"class":177},[118,86350,51430],{"class":128},[118,86352,54757],{"class":177},[118,86354,1294],{"class":128},[118,86356,86357,86359,86361,86363,86365],{"class":120,"line":1763},[118,86358,54915],{"class":177},[118,86360,51430],{"class":128},[118,86362,828],{"class":177},[118,86364,51485],{"class":124},[118,86366,1294],{"class":128},[118,86368,86369],{"class":120,"line":1768},[118,86370,2191],{"class":128},[118,86372,86373],{"class":120,"line":1782},[118,86374,2404],{"emptyLinePlaceholder":45},[118,86376,86377,86379,86381,86383],{"class":120,"line":1787},[118,86378,86143],{"class":1967},[118,86380,86316],{"class":1967},[118,86382,3036],{"class":51293},[118,86384,15577],{"class":128},[118,86386,86387,86390,86392,86394],{"class":120,"line":2581},[118,86388,86389],{"class":177},"      font-style",[118,86391,51430],{"class":128},[118,86393,63834],{"class":177},[118,86395,1294],{"class":128},[118,86397,86398,86400,86402,86404],{"class":120,"line":2595},[118,86399,57409],{"class":177},[118,86401,51430],{"class":128},[118,86403,62063],{"class":177},[118,86405,1294],{"class":128},[118,86407,86408,86410,86412,86414],{"class":120,"line":2603},[118,86409,54752],{"class":177},[118,86411,51430],{"class":128},[118,86413,54824],{"class":177},[118,86415,1294],{"class":128},[118,86417,86418,86421,86423,86425,86427],{"class":120,"line":2608},[118,86419,86420],{"class":177},"      right",[118,86422,51430],{"class":128},[118,86424,703],{"class":177},[118,86426,51485],{"class":124},[118,86428,1294],{"class":128},[118,86430,86431,86433,86435,86438,86440],{"class":120,"line":2614},[118,86432,54940],{"class":177},[118,86434,51430],{"class":128},[118,86436,86437],{"class":177},"-2",[118,86439,51485],{"class":124},[118,86441,1294],{"class":128},[118,86443,86444,86446,86448,86450],{"class":120,"line":2620},[118,86445,62018],{"class":177},[118,86447,51430],{"class":128},[118,86449,62023],{"class":177},[118,86451,1294],{"class":128},[118,86453,86454],{"class":120,"line":2625},[118,86455,2191],{"class":128},[118,86457,86458],{"class":120,"line":7953},[118,86459,2404],{"emptyLinePlaceholder":45},[118,86461,86462,86464,86467],{"class":120,"line":7977},[118,86463,86143],{"class":1967},[118,86465,86466],{"class":1967}," .body",[118,86468,15577],{"class":128},[118,86470,86471,86473,86475,86477],{"class":120,"line":7982},[118,86472,57279],{"class":177},[118,86474,51430],{"class":128},[118,86476,51585],{"class":177},[118,86478,1294],{"class":128},[118,86480,86481,86483,86485,86487,86489],{"class":120,"line":7988},[118,86482,54688],{"class":177},[118,86484,51430],{"class":128},[118,86486,574],{"class":177},[118,86488,51485],{"class":124},[118,86490,1294],{"class":128},[118,86492,86493],{"class":120,"line":8015},[118,86494,2191],{"class":128},[118,86496,86497],{"class":120,"line":8020},[118,86498,2404],{"emptyLinePlaceholder":45},[118,86500,86501,86503,86506],{"class":120,"line":8026},[118,86502,86143],{"class":1967},[118,86504,86505],{"class":1967}," .footer",[118,86507,15577],{"class":128},[118,86509,86510,86512,86514,86516],{"class":120,"line":8038},[118,86511,55002],{"class":177},[118,86513,51430],{"class":128},[118,86515,51470],{"class":177},[118,86517,1294],{"class":128},[118,86519,86520,86522,86524,86526],{"class":120,"line":8050},[118,86521,55013],{"class":177},[118,86523,51430],{"class":128},[118,86525,51573],{"class":177},[118,86527,1294],{"class":128},[118,86529,86530,86532,86534,86536,86538],{"class":120,"line":8062},[118,86531,54688],{"class":177},[118,86533,51430],{"class":128},[118,86535,574],{"class":177},[118,86537,51485],{"class":124},[118,86539,1294],{"class":128},[118,86541,86542],{"class":120,"line":9721},[118,86543,2191],{"class":128},[118,86545,86546],{"class":120,"line":9746},[118,86547,2404],{"emptyLinePlaceholder":45},[118,86549,86550,86552,86554,86556],{"class":120,"line":9769},[118,86551,86143],{"class":1967},[118,86553,86505],{"class":1967},[118,86555,1402],{"class":51293},[118,86557,15577],{"class":128},[118,86559,86560,86562,86564,86566,86568,86570,86572],{"class":120,"line":9793},[118,86561,54688],{"class":177},[118,86563,51430],{"class":128},[118,86565,200],{"class":177},[118,86567,51485],{"class":124},[118,86569,2087],{"class":177},[118,86571,51485],{"class":124},[118,86573,1294],{"class":128},[118,86575,86576,86578,86580,86583],{"class":120,"line":9798},[118,86577,61714],{"class":177},[118,86579,51430],{"class":128},[118,86581,86582],{"class":177},"#ccc",[118,86584,1294],{"class":128},[118,86586,86587,86589,86591,86593],{"class":120,"line":9803},[118,86588,63963],{"class":177},[118,86590,51430],{"class":128},[118,86592,54730],{"class":177},[118,86594,1294],{"class":128},[118,86596,86597,86599,86601,86603],{"class":120,"line":9808},[118,86598,57409],{"class":177},[118,86600,51430],{"class":128},[118,86602,60835],{"class":177},[118,86604,1294],{"class":128},[118,86606,86607,86609,86611,86613,86615],{"class":120,"line":9817},[118,86608,55127],{"class":177},[118,86610,51430],{"class":128},[118,86612,206],{"class":177},[118,86614,51485],{"class":124},[118,86616,1294],{"class":128},[118,86618,86619,86621,86623,86625,86627],{"class":120,"line":9822},[118,86620,61743],{"class":177},[118,86622,51430],{"class":128},[118,86624,574],{"class":177},[118,86626,51485],{"class":124},[118,86628,1294],{"class":128},[118,86630,86631,86633,86635,86637,86639],{"class":120,"line":9828},[118,86632,54915],{"class":177},[118,86634,51430],{"class":128},[118,86636,677],{"class":177},[118,86638,51485],{"class":124},[118,86640,1294],{"class":128},[118,86642,86643],{"class":120,"line":9849},[118,86644,2191],{"class":128},[118,86646,86647],{"class":120,"line":9855},[118,86648,2404],{"emptyLinePlaceholder":45},[118,86650,86651,86653,86655,86657,86660],{"class":120,"line":9869},[118,86652,86143],{"class":1967},[118,86654,86505],{"class":1967},[118,86656,1402],{"class":51293},[118,86658,86659],{"class":1967},".submit",[118,86661,15577],{"class":128},[118,86663,86664,86666,86668,86671],{"class":120,"line":9875},[118,86665,54877],{"class":177},[118,86667,51430],{"class":128},[118,86669,86670],{"class":177},"#369",[118,86672,1294],{"class":128},[118,86674,86675],{"class":120,"line":9902},[118,86676,2191],{"class":128},[118,86678,86679,86681,86683],{"class":120,"line":9911},[118,86680,52410],{"class":128},[118,86682,5131],{"class":51293},[118,86684,51300],{"class":128},[118,86686,86687,86689,86691],{"class":120,"line":9917},[118,86688,51778],{"class":128},[118,86690,51327],{"class":51293},[118,86692,51300],{"class":128},[118,86694,86695],{"class":120,"line":9925},[118,86696,2404],{"emptyLinePlaceholder":45},[118,86698,86699,86701,86703],{"class":120,"line":9930},[118,86700,1038],{"class":128},[118,86702,51793],{"class":51293},[118,86704,51300],{"class":128},[118,86706,86707,86709,86711,86713,86715,86718,86721,86723],{"class":120,"line":16609},[118,86708,52137],{"class":128},[118,86710,53880],{"class":51293},[118,86712,14964],{"class":1967},[118,86714,174],{"class":128},[118,86716,86717],{"class":233},"\"delete\"",[118,86719,86720],{"class":128},">删除\u003C\u002F",[118,86722,53880],{"class":51293},[118,86724,51300],{"class":128},[118,86726,86727,86729,86731,86733,86735,86738,86741,86743],{"class":120,"line":16615},[118,86728,52137],{"class":128},[118,86730,53880],{"class":51293},[118,86732,14964],{"class":1967},[118,86734,174],{"class":128},[118,86736,86737],{"class":233},"\"login\"",[118,86739,86740],{"class":128},">登录\u003C\u002F",[118,86742,53880],{"class":51293},[118,86744,51300],{"class":128},[118,86746,86747,86749,86751],{"class":120,"line":16638},[118,86748,52137],{"class":128},[118,86750,51806],{"class":51293},[118,86752,51300],{"class":128},[118,86754,86755],{"class":120,"line":16644},[118,86756,86757],{"class":187},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[118,86759,86760,86762,86765,86767,86769,86771,86773,86775,86778,86780,86782],{"class":120,"line":16667},[118,86761,70077],{"class":124},[118,86763,86764],{"class":1967}," Modal",[118,86766,129],{"class":128},[118,86768,51400],{"class":5221},[118,86770,13569],{"class":124},[118,86772,69923],{"class":233},[118,86774,12440],{"class":128},[118,86776,86777],{"class":5221},"message",[118,86779,13569],{"class":124},[118,86781,69923],{"class":233},[118,86783,12447],{"class":128},[118,86785,86786],{"class":120,"line":16681},[118,86787,86788],{"class":187},"      \u002F\u002F 创建Model 模态框盒子\n",[118,86790,86791],{"class":120,"line":16701},[118,86792,86793],{"class":187},"      \u002F\u002F 1.1 创建div标签\n",[118,86795,86796,86798,86801,86803,86805,86807,86809,86811],{"class":120,"line":16707},[118,86797,70044],{"class":177},[118,86799,86800],{"class":128},".modalBox ",[118,86802,174],{"class":124},[118,86804,54389],{"class":128},[118,86806,70144],{"class":1967},[118,86808,129],{"class":128},[118,86810,81924],{"class":233},[118,86812,135],{"class":128},[118,86814,86815],{"class":120,"line":16718},[118,86816,86817],{"class":187},"      \u002F\u002F 1.2 给div 添加类名为model\n",[118,86819,86820,86822,86825,86827],{"class":120,"line":16741},[118,86821,70044],{"class":177},[118,86823,86824],{"class":128},".modalBox.className ",[118,86826,174],{"class":124},[118,86828,86829],{"class":233}," 'modal'\n",[118,86831,86832],{"class":120,"line":16763},[118,86833,86834],{"class":187},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[118,86836,86837,86839,86842,86844],{"class":120,"line":16768},[118,86838,70044],{"class":177},[118,86840,86841],{"class":128},".modalBox.innerHTML ",[118,86843,174],{"class":124},[118,86845,70161],{"class":233},[118,86847,86848,86851,86853],{"class":120,"line":16774},[118,86849,86850],{"class":233},"        \u003Cdiv class=\"header\">${",[118,86852,51400],{"class":128},[118,86854,86855],{"class":233},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[118,86857,86858,86861,86863],{"class":120,"line":16788},[118,86859,86860],{"class":233},"        \u003Cdiv class=\"body\">${",[118,86862,86777],{"class":128},[118,86864,86865],{"class":233},"}\u003C\u002Fdiv>\n",[118,86867,86868],{"class":120,"line":16801},[118,86869,86870],{"class":233},"      `\n",[118,86872,86873],{"class":120,"line":16806},[118,86874,86875],{"class":187},"      \u002F\u002F console.log(this.modalBox)\n",[118,86877,86878],{"class":120,"line":16820},[118,86879,2191],{"class":128},[118,86881,86882],{"class":120,"line":16825},[118,86883,86884],{"class":187},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[118,86886,86887],{"class":120,"line":16831},[118,86888,86889],{"class":187},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[118,86891,86892],{"class":120,"line":16836},[118,86893,86894],{"class":187},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[118,86896,86897,86900,86902,86904,86906,86909,86911,86913],{"class":120,"line":16850},[118,86898,86899],{"class":177},"    Modal",[118,86901,686],{"class":128},[118,86903,85572],{"class":177},[118,86905,686],{"class":128},[118,86907,86908],{"class":1967},"open",[118,86910,13569],{"class":124},[118,86912,58911],{"class":124},[118,86914,54445],{"class":128},[118,86916,86917],{"class":120,"line":16855},[118,86918,86919],{"class":187},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[118,86921,86922,86924,86927,86929,86931,86933,86935,86938],{"class":120,"line":16860},[118,86923,58221],{"class":124},[118,86925,86926],{"class":177}," box",[118,86928,13569],{"class":124},[118,86930,54389],{"class":128},[118,86932,54392],{"class":1967},[118,86934,129],{"class":128},[118,86936,86937],{"class":233},"'.modal'",[118,86939,135],{"class":128},[118,86941,86942],{"class":120,"line":16874},[118,86943,86944],{"class":187},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[118,86946,86947,86950,86952,86955,86957],{"class":120,"line":16886},[118,86948,86949],{"class":128},"      box ",[118,86951,1719],{"class":124},[118,86953,86954],{"class":128}," box.",[118,86956,56999],{"class":1967},[118,86958,1980],{"class":128},[118,86960,86961],{"class":120,"line":16891},[118,86962,86963],{"class":187},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[118,86965,86966],{"class":120,"line":16904},[118,86967,86968],{"class":187},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[118,86970,86971],{"class":120,"line":16909},[118,86972,86973],{"class":187},"      \u002F\u002F append可以增加对象\n",[118,86975,86976,86979,86982,86984,86987],{"class":120,"line":16914},[118,86977,86978],{"class":128},"      document.body.",[118,86980,86981],{"class":1967},"append",[118,86983,129],{"class":128},[118,86985,86986],{"class":177},"this",[118,86988,86989],{"class":128},".modalBox)\n",[118,86991,86992],{"class":120,"line":16919},[118,86993,2404],{"emptyLinePlaceholder":45},[118,86995,86996],{"class":120,"line":16932},[118,86997,86998],{"class":187},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[118,87000,87001,87003,87006,87008,87010,87013,87015,87017,87019,87021,87024,87026],{"class":120,"line":16937},[118,87002,70044],{"class":177},[118,87004,87005],{"class":128},".modalBox.",[118,87007,54392],{"class":1967},[118,87009,129],{"class":128},[118,87011,87012],{"class":233},"'i'",[118,87014,30819],{"class":128},[118,87016,57806],{"class":1967},[118,87018,129],{"class":128},[118,87020,57811],{"class":233},[118,87022,87023],{"class":128},", () ",[118,87025,84715],{"class":124},[118,87027,15577],{"class":128},[118,87029,87030],{"class":120,"line":32626},[118,87031,87032],{"class":187},"        \u002F\u002F 这个地方需要用到箭头函数\n",[118,87034,87035],{"class":120,"line":32632},[118,87036,87037],{"class":187},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[118,87039,87040],{"class":120,"line":32638},[118,87041,87042],{"class":187},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[118,87044,87045,87047,87049,87052],{"class":120,"line":32644},[118,87046,64719],{"class":177},[118,87048,686],{"class":128},[118,87050,87051],{"class":1967},"close",[118,87053,1980],{"class":128},[118,87055,87056],{"class":120,"line":32650},[118,87057,64808],{"class":128},[118,87059,87060],{"class":120,"line":32661},[118,87061,2191],{"class":128},[118,87063,87064],{"class":120,"line":32667},[118,87065,2404],{"emptyLinePlaceholder":45},[118,87067,87068],{"class":120,"line":32687},[118,87069,87070],{"class":187},"    \u002F\u002F 测试一下 点击 删除按钮\n",[118,87072,87073,87075,87077,87079,87082,87084,87086,87088,87090,87092,87094],{"class":120,"line":32693},[118,87074,52400],{"class":128},[118,87076,54392],{"class":1967},[118,87078,129],{"class":128},[118,87080,87081],{"class":233},"'#delete'",[118,87083,30819],{"class":128},[118,87085,57806],{"class":1967},[118,87087,129],{"class":128},[118,87089,57811],{"class":233},[118,87091,87023],{"class":128},[118,87093,84715],{"class":124},[118,87095,15577],{"class":128},[118,87097,87098],{"class":120,"line":32704},[118,87099,87100],{"class":187},"      \u002F\u002F 先调用Model构造函数\n",[118,87102,87103,87105,87108,87110,87112,87114,87116,87119,87121,87124],{"class":120,"line":32710},[118,87104,58221],{"class":124},[118,87106,87107],{"class":177}," del",[118,87109,13569],{"class":124},[118,87111,11583],{"class":124},[118,87113,86764],{"class":1967},[118,87115,129],{"class":128},[118,87117,87118],{"class":233},"'温馨的提示'",[118,87120,12440],{"class":128},[118,87122,87123],{"class":233},"'您没有删除权限操作'",[118,87125,135],{"class":128},[118,87127,87128],{"class":120,"line":32716},[118,87129,87130],{"class":187},"      \u002F\u002F 实例对象调用open方法\n",[118,87132,87133,87136,87138],{"class":120,"line":32722},[118,87134,87135],{"class":128},"      del.",[118,87137,86908],{"class":1967},[118,87139,1980],{"class":128},[118,87141,87142],{"class":120,"line":32728},[118,87143,33454],{"class":128},[118,87145,87146],{"class":120,"line":32734},[118,87147,87148],{"class":187},"    \u002F\u002F 测试一下 点击 登录按钮\n",[118,87150,87151,87153,87155,87157,87160,87162,87164,87166,87168,87170,87172],{"class":120,"line":32740},[118,87152,52400],{"class":128},[118,87154,54392],{"class":1967},[118,87156,129],{"class":128},[118,87158,87159],{"class":233},"'#login'",[118,87161,30819],{"class":128},[118,87163,57806],{"class":1967},[118,87165,129],{"class":128},[118,87167,57811],{"class":233},[118,87169,87023],{"class":128},[118,87171,84715],{"class":124},[118,87173,15577],{"class":128},[118,87175,87176],{"class":120,"line":32746},[118,87177,87100],{"class":187},[118,87179,87180,87182,87185,87187,87189,87191,87193,87196,87198,87201],{"class":120,"line":32766},[118,87181,58221],{"class":124},[118,87183,87184],{"class":177}," log",[118,87186,13569],{"class":124},[118,87188,11583],{"class":124},[118,87190,86764],{"class":1967},[118,87192,129],{"class":128},[118,87194,87195],{"class":233},"'友情提示'",[118,87197,12440],{"class":128},[118,87199,87200],{"class":233},"'您还没有登录呢'",[118,87202,135],{"class":128},[118,87204,87205],{"class":120,"line":32772},[118,87206,87130],{"class":187},[118,87208,87209,87212,87214],{"class":120,"line":32788},[118,87210,87211],{"class":128},"      log.",[118,87213,86908],{"class":1967},[118,87215,1980],{"class":128},[118,87217,87218],{"class":120,"line":32794},[118,87219,33454],{"class":128},[118,87221,87222],{"class":120,"line":32808},[118,87223,87224],{"class":187},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[118,87226,87227,87229,87231,87233,87235,87237,87239,87241],{"class":120,"line":32814},[118,87228,86899],{"class":177},[118,87230,686],{"class":128},[118,87232,85572],{"class":177},[118,87234,686],{"class":128},[118,87236,87051],{"class":1967},[118,87238,13569],{"class":124},[118,87240,58911],{"class":124},[118,87242,54445],{"class":128},[118,87244,87245,87247,87249,87251],{"class":120,"line":32829},[118,87246,70044],{"class":177},[118,87248,87005],{"class":128},[118,87250,56999],{"class":1967},[118,87252,1980],{"class":128},[118,87254,87255],{"class":120,"line":32835},[118,87256,2191],{"class":128},[118,87258,87259,87261,87263],{"class":120,"line":32844},[118,87260,52410],{"class":128},[118,87262,51806],{"class":51293},[118,87264,51300],{"class":128},[118,87266,87267,87269,87271],{"class":120,"line":32850},[118,87268,51778],{"class":128},[118,87270,51793],{"class":51293},[118,87272,51300],{"class":128},[118,87274,87275],{"class":120,"line":32859},[118,87276,2404],{"emptyLinePlaceholder":45},[118,87278,87279,87281,87283],{"class":120,"line":32865},[118,87280,51778],{"class":128},[118,87282,50628],{"class":51293},[118,87284,51300],{"class":128},[15,87286,87287],{},[1466,87288],{"alt":39,"src":87289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[60,87291,87293],{"id":87292},"_414-深浅拷贝","4.14 深浅拷贝",[89,87295,87297],{"id":87296},"_4141-浅拷贝","4.14.1 浅拷贝",[15,87299,87300],{},[1466,87301],{"alt":39,"src":87302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[15,87304,87305],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[15,87307,87308],{},[1466,87309],{"alt":39,"src":87310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[15,87312,87313],{},[1466,87314],{"alt":39,"src":87315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[15,87317,87318],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[15,87320,87321],{},[1466,87322],{"alt":39,"src":87323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[15,87325,11337],{},[15,87327,87328],{},[1466,87329],{"alt":39,"src":87330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[89,87332,87334],{"id":87333},"_4142-深拷贝","4.14.2 深拷贝",[15,87336,87337],{},"深拷贝：拷贝的是对象，不是地址",[15,87339,87340],{},"常用的三种方法：",[72,87342,87343,87346,87349],{},[75,87344,87345],{},"通过递归实现深拷贝",[75,87347,87348],{},"lodash\u002FcloneDeep",[75,87350,87351],{},"通过JSON.stringify()实现",[22003,87353,87355],{"id":87354},"_41421-递归函数","4.14.2.1 递归函数",[15,87357,87358],{},[1466,87359],{"alt":39,"src":87360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[72,87362,87363],{},[75,87364,87365],{},"死递归占溢出：",[109,87367,87369],{"className":53060,"code":87368,"language":53062,"meta":39,"style":39},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[115,87370,87371,87379,87387,87391,87396,87400,87405,87413],{"__ignoreMap":39},[118,87372,87373,87375,87377],{"class":120,"line":121},[118,87374,1038],{"class":128},[118,87376,51793],{"class":51293},[118,87378,51300],{"class":128},[118,87380,87381,87383,87385],{"class":120,"line":40},[118,87382,52137],{"class":128},[118,87384,51806],{"class":51293},[118,87386,51300],{"class":128},[118,87388,87389],{"class":120,"line":1183},[118,87390,77136],{"class":128},[118,87392,87393],{"class":120,"line":1198},[118,87394,87395],{"class":128},"      fn()\n",[118,87397,87398],{"class":120,"line":1204},[118,87399,2191],{"class":128},[118,87401,87402],{"class":120,"line":1218},[118,87403,87404],{"class":128},"    fn()\n",[118,87406,87407,87409,87411],{"class":120,"line":1224},[118,87408,52410],{"class":128},[118,87410,51806],{"class":51293},[118,87412,51300],{"class":128},[118,87414,87415,87417,87419],{"class":120,"line":1315},[118,87416,51778],{"class":128},[118,87418,51793],{"class":51293},[118,87420,51300],{"class":128},[72,87422,87423],{"start":40},[75,87424,87425],{},"递归函数要加判断条件：",[15,87427,87428],{},[1466,87429],{"alt":39,"src":87430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[72,87432,87433],{"start":1183},[75,87434,87435],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[109,87437,87439],{"className":50626,"code":87438,"language":50628,"meta":39,"style":39},"\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",[115,87440,87441,87451,87465,87469,87477,87491,87511,87523,87531,87535,87543,87555,87563,87571,87596,87608,87612,87619,87627,87635,87639],{"__ignoreMap":39},[118,87442,87443,87445,87447,87449],{"class":120,"line":121},[118,87444,51290],{"class":128},[118,87446,51294],{"class":51293},[118,87448,51297],{"class":1967},[118,87450,51300],{"class":128},[118,87452,87453,87455,87457,87459,87461,87463],{"class":120,"line":40},[118,87454,1038],{"class":128},[118,87456,50628],{"class":51293},[118,87458,51309],{"class":1967},[118,87460,174],{"class":128},[118,87462,51314],{"class":233},[118,87464,51300],{"class":128},[118,87466,87467],{"class":120,"line":1183},[118,87468,2404],{"emptyLinePlaceholder":45},[118,87470,87471,87473,87475],{"class":120,"line":1198},[118,87472,1038],{"class":128},[118,87474,51327],{"class":51293},[118,87476,51300],{"class":128},[118,87478,87479,87481,87483,87485,87487,87489],{"class":120,"line":1204},[118,87480,52137],{"class":128},[118,87482,51337],{"class":51293},[118,87484,51340],{"class":1967},[118,87486,174],{"class":128},[118,87488,51345],{"class":233},[118,87490,51300],{"class":128},[118,87492,87493,87495,87497,87499,87501,87503,87505,87507,87509],{"class":120,"line":1218},[118,87494,52137],{"class":128},[118,87496,51337],{"class":51293},[118,87498,14925],{"class":1967},[118,87500,174],{"class":128},[118,87502,51384],{"class":233},[118,87504,51364],{"class":1967},[118,87506,174],{"class":128},[118,87508,51391],{"class":233},[118,87510,51300],{"class":128},[118,87512,87513,87515,87517,87519,87521],{"class":120,"line":1224},[118,87514,52137],{"class":128},[118,87516,51400],{"class":51293},[118,87518,51403],{"class":128},[118,87520,51400],{"class":51293},[118,87522,51300],{"class":128},[118,87524,87525,87527,87529],{"class":120,"line":1315},[118,87526,51778],{"class":128},[118,87528,51327],{"class":51293},[118,87530,51300],{"class":128},[118,87532,87533],{"class":120,"line":1321},[118,87534,2404],{"emptyLinePlaceholder":45},[118,87536,87537,87539,87541],{"class":120,"line":1333},[118,87538,1038],{"class":128},[118,87540,51793],{"class":51293},[118,87542,51300],{"class":128},[118,87544,87545,87547,87549,87551,87553],{"class":120,"line":1616},[118,87546,52137],{"class":128},[118,87548,51604],{"class":51293},[118,87550,55307],{"class":128},[118,87552,51604],{"class":51293},[118,87554,51300],{"class":128},[118,87556,87557,87559,87561],{"class":120,"line":1621},[118,87558,52137],{"class":128},[118,87560,51806],{"class":51293},[118,87562,51300],{"class":128},[118,87564,87565,87567,87569],{"class":120,"line":1627},[118,87566,70077],{"class":124},[118,87568,73766],{"class":1967},[118,87570,10858],{"class":128},[118,87572,87573,87575,87577,87579,87581,87583,87585,87587,87589,87591,87594],{"class":120,"line":1632},[118,87574,55764],{"class":128},[118,87576,54392],{"class":1967},[118,87578,129],{"class":128},[118,87580,81924],{"class":233},[118,87582,74242],{"class":128},[118,87584,174],{"class":124},[118,87586,11583],{"class":124},[118,87588,73782],{"class":1967},[118,87590,17266],{"class":128},[118,87592,87593],{"class":1967},"toLocaleString",[118,87595,1980],{"class":128},[118,87597,87598,87601,87604,87606],{"class":120,"line":1646},[118,87599,87600],{"class":1967},"      setTimeout",[118,87602,87603],{"class":128},"(getTime, ",[118,87605,6415],{"class":177},[118,87607,135],{"class":128},[118,87609,87610],{"class":120,"line":1651},[118,87611,2191],{"class":128},[118,87613,87614,87617],{"class":120,"line":1657},[118,87615,87616],{"class":1967},"    getTime",[118,87618,1980],{"class":128},[118,87620,87621,87623,87625],{"class":120,"line":1678},[118,87622,52410],{"class":128},[118,87624,51806],{"class":51293},[118,87626,51300],{"class":128},[118,87628,87629,87631,87633],{"class":120,"line":1683},[118,87630,51778],{"class":128},[118,87632,51793],{"class":51293},[118,87634,51300],{"class":128},[118,87636,87637],{"class":120,"line":1697},[118,87638,2404],{"emptyLinePlaceholder":45},[118,87640,87641,87643,87645],{"class":120,"line":1702},[118,87642,51778],{"class":128},[118,87644,50628],{"class":51293},[118,87646,51300],{"class":128},[15,87648,87649],{},[1466,87650],{"alt":39,"src":87651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[72,87653,87654],{"start":1198},[75,87655,87345],{},[15,87657,87658],{},[1466,87659],{"alt":39,"src":87660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[15,87662,87663],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[15,87665,39182],{},[15,87667,87668],{},"这个是简易版的递归函数深拷贝",[15,87670,87671],{},"一定要注意先数组再对象，因为万物皆可对象",[109,87673,87675],{"className":50626,"code":87674,"language":50628,"meta":39,"style":39},"\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",[115,87676,87677,87687,87701,87705,87713,87727,87747,87759,87767,87771,87779,87787,87797,87806,87814,87830,87834,87842,87846,87850,87862,87867,87886,87902,87907,87912,87917,87932,87937,87942,87951,87959,87976,87984,87990,87998,88003,88008,88017,88021,88025,88029,88040,88049,88059,88073,88083,88091,88099,88107,88111],{"__ignoreMap":39},[118,87678,87679,87681,87683,87685],{"class":120,"line":121},[118,87680,51290],{"class":128},[118,87682,51294],{"class":51293},[118,87684,51297],{"class":1967},[118,87686,51300],{"class":128},[118,87688,87689,87691,87693,87695,87697,87699],{"class":120,"line":40},[118,87690,1038],{"class":128},[118,87692,50628],{"class":51293},[118,87694,51309],{"class":1967},[118,87696,174],{"class":128},[118,87698,51314],{"class":233},[118,87700,51300],{"class":128},[118,87702,87703],{"class":120,"line":1183},[118,87704,2404],{"emptyLinePlaceholder":45},[118,87706,87707,87709,87711],{"class":120,"line":1198},[118,87708,1038],{"class":128},[118,87710,51327],{"class":51293},[118,87712,51300],{"class":128},[118,87714,87715,87717,87719,87721,87723,87725],{"class":120,"line":1204},[118,87716,52137],{"class":128},[118,87718,51337],{"class":51293},[118,87720,51340],{"class":1967},[118,87722,174],{"class":128},[118,87724,51345],{"class":233},[118,87726,51300],{"class":128},[118,87728,87729,87731,87733,87735,87737,87739,87741,87743,87745],{"class":120,"line":1218},[118,87730,52137],{"class":128},[118,87732,51337],{"class":51293},[118,87734,14925],{"class":1967},[118,87736,174],{"class":128},[118,87738,51384],{"class":233},[118,87740,51364],{"class":1967},[118,87742,174],{"class":128},[118,87744,51391],{"class":233},[118,87746,51300],{"class":128},[118,87748,87749,87751,87753,87755,87757],{"class":120,"line":1224},[118,87750,52137],{"class":128},[118,87752,51400],{"class":51293},[118,87754,51403],{"class":128},[118,87756,51400],{"class":51293},[118,87758,51300],{"class":128},[118,87760,87761,87763,87765],{"class":120,"line":1315},[118,87762,51778],{"class":128},[118,87764,51327],{"class":51293},[118,87766,51300],{"class":128},[118,87768,87769],{"class":120,"line":1321},[118,87770,2404],{"emptyLinePlaceholder":45},[118,87772,87773,87775,87777],{"class":120,"line":1333},[118,87774,1038],{"class":128},[118,87776,51793],{"class":51293},[118,87778,51300],{"class":128},[118,87780,87781,87783,87785],{"class":120,"line":1616},[118,87782,52137],{"class":128},[118,87784,51806],{"class":51293},[118,87786,51300],{"class":128},[118,87788,87789,87791,87793,87795],{"class":120,"line":1621},[118,87790,11226],{"class":124},[118,87792,69964],{"class":177},[118,87794,13569],{"class":124},[118,87796,15577],{"class":128},[118,87798,87799,87801,87804],{"class":120,"line":1627},[118,87800,71609],{"class":128},[118,87802,87803],{"class":233},"'pink'",[118,87805,31459],{"class":128},[118,87807,87808,87810,87812],{"class":120,"line":1632},[118,87809,71619],{"class":128},[118,87811,778],{"class":177},[118,87813,31459],{"class":128},[118,87815,87816,87819,87822,87824,87827],{"class":120,"line":1646},[118,87817,87818],{"class":128},"      hobby: [",[118,87820,87821],{"class":233},"'乒乓球'",[118,87823,12440],{"class":128},[118,87825,87826],{"class":233},"'足球'",[118,87828,87829],{"class":128},"],\n",[118,87831,87832],{"class":120,"line":1651},[118,87833,77865],{"class":128},[118,87835,87836,87839],{"class":120,"line":1657},[118,87837,87838],{"class":128},"        baby: ",[118,87840,87841],{"class":233},"'小pink'\n",[118,87843,87844],{"class":120,"line":1678},[118,87845,52391],{"class":128},[118,87847,87848],{"class":120,"line":1683},[118,87849,2191],{"class":128},[118,87851,87852,87854,87857,87859],{"class":120,"line":1697},[118,87853,11226],{"class":124},[118,87855,87856],{"class":177}," o",[118,87858,13569],{"class":124},[118,87860,87861],{"class":128}," {}\n",[118,87863,87864],{"class":120,"line":1702},[118,87865,87866],{"class":187},"    \u002F\u002F 拷贝函数\n",[118,87868,87869,87871,87874,87876,87879,87881,87884],{"class":120,"line":1731},[118,87870,70077],{"class":124},[118,87872,87873],{"class":1967}," deepCopy",[118,87875,129],{"class":128},[118,87877,87878],{"class":5221},"newObj",[118,87880,12440],{"class":128},[118,87882,87883],{"class":5221},"oldObj",[118,87885,12447],{"class":128},[118,87887,87888,87890,87892,87894,87897,87899],{"class":120,"line":1736},[118,87889,52277],{"class":124},[118,87891,1662],{"class":128},[118,87893,51840],{"class":124},[118,87895,87896],{"class":128}," k ",[118,87898,26036],{"class":124},[118,87900,87901],{"class":128}," oldObj) {\n",[118,87903,87904],{"class":120,"line":1753},[118,87905,87906],{"class":187},"        \u002F\u002F 处理数组的问题\n",[118,87908,87909],{"class":120,"line":1758},[118,87910,87911],{"class":187},"        \u002F\u002F 判断是否属于数组\n",[118,87913,87914],{"class":120,"line":1763},[118,87915,87916],{"class":187},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[118,87918,87919,87921,87924,87927,87930],{"class":120,"line":1768},[118,87920,2501],{"class":124},[118,87922,87923],{"class":128}," (oldObj[k] ",[118,87925,87926],{"class":124},"instanceof",[118,87928,87929],{"class":1967}," Array",[118,87931,12447],{"class":128},[118,87933,87934],{"class":120,"line":1782},[118,87935,87936],{"class":187},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[118,87938,87939],{"class":120,"line":1787},[118,87940,87941],{"class":187},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[118,87943,87944,87947,87949],{"class":120,"line":2581},[118,87945,87946],{"class":128},"          newObj[k] ",[118,87948,174],{"class":124},[118,87950,51831],{"class":128},[118,87952,87953,87956],{"class":120,"line":2595},[118,87954,87955],{"class":1967},"          deepCopy",[118,87957,87958],{"class":128},"(newObj[k], oldObj[k])\n",[118,87960,87961,87963,87965,87967,87969,87971,87974],{"class":120,"line":2603},[118,87962,80073],{"class":128},[118,87964,1705],{"class":124},[118,87966,1708],{"class":124},[118,87968,87923],{"class":128},[118,87970,87926],{"class":124},[118,87972,87973],{"class":1967}," Object",[118,87975,12447],{"class":128},[118,87977,87978,87980,87982],{"class":120,"line":2608},[118,87979,87946],{"class":128},[118,87981,174],{"class":124},[118,87983,87861],{"class":128},[118,87985,87986,87988],{"class":120,"line":2614},[118,87987,87955],{"class":1967},[118,87989,87958],{"class":128},[118,87991,87992,87994,87996],{"class":120,"line":2620},[118,87993,80073],{"class":128},[118,87995,1705],{"class":124},[118,87997,15577],{"class":128},[118,87999,88000],{"class":120,"line":2625},[118,88001,88002],{"class":187},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[118,88004,88005],{"class":120,"line":7953},[118,88006,88007],{"class":187},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[118,88009,88010,88012,88014],{"class":120,"line":7977},[118,88011,87946],{"class":128},[118,88013,174],{"class":124},[118,88015,88016],{"class":128}," oldObj[k]\n",[118,88018,88019],{"class":120,"line":7982},[118,88020,2533],{"class":128},[118,88022,88023],{"class":120,"line":7988},[118,88024,52391],{"class":128},[118,88026,88027],{"class":120,"line":8015},[118,88028,2191],{"class":128},[118,88030,88031,88034,88037],{"class":120,"line":8020},[118,88032,88033],{"class":1967},"    deepCopy",[118,88035,88036],{"class":128},"(o, obj) ",[118,88038,88039],{"class":187},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[118,88041,88042,88044,88046],{"class":120,"line":8026},[118,88043,73746],{"class":128},[118,88045,58240],{"class":1967},[118,88047,88048],{"class":128},"(o)\n",[118,88050,88051,88054,88056],{"class":120,"line":8038},[118,88052,88053],{"class":128},"    o.age ",[118,88055,174],{"class":124},[118,88057,88058],{"class":177}," 20\n",[118,88060,88061,88064,88066,88068,88070],{"class":120,"line":8050},[118,88062,88063],{"class":128},"    o.hobby[",[118,88065,320],{"class":177},[118,88067,4447],{"class":128},[118,88069,174],{"class":124},[118,88071,88072],{"class":233}," '篮球'\n",[118,88074,88075,88078,88080],{"class":120,"line":8062},[118,88076,88077],{"class":128},"    o.family ",[118,88079,174],{"class":124},[118,88081,88082],{"class":233}," '老pink'\n",[118,88084,88085,88087,88089],{"class":120,"line":9721},[118,88086,73746],{"class":128},[118,88088,58240],{"class":1967},[118,88090,70029],{"class":128},[118,88092,88093,88095,88097],{"class":120,"line":9746},[118,88094,52410],{"class":128},[118,88096,51806],{"class":51293},[118,88098,51300],{"class":128},[118,88100,88101,88103,88105],{"class":120,"line":9769},[118,88102,51778],{"class":128},[118,88104,51793],{"class":51293},[118,88106,51300],{"class":128},[118,88108,88109],{"class":120,"line":9793},[118,88110,2404],{"emptyLinePlaceholder":45},[118,88112,88113,88115,88117],{"class":120,"line":9798},[118,88114,51778],{"class":128},[118,88116,50628],{"class":51293},[118,88118,51300],{"class":128},[15,88120,88121],{},[1466,88122],{"alt":39,"src":88123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22003,88125,88127,88128],{"id":88126},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[278,88129,88130],{},"js库lodash里面cloneDeep内部实现了深拷贝",[15,88132,88133],{},[21,88134,88135],{"href":88135,"rel":88136},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25],[15,88138,88139],{},"lodash里边的方法都要加上一个下划线_",[15,88141,88142],{},"_.cloneDeep()",[109,88144,88146],{"className":50626,"code":88145,"language":50628,"meta":39,"style":39},"\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",[115,88147,88148,88158,88172,88176,88184,88198,88218,88230,88238,88242,88250,88255,88274,88282,88292,88300,88308,88320,88324,88330,88334,88338,88354,88362,88371,88379,88387,88395,88399],{"__ignoreMap":39},[118,88149,88150,88152,88154,88156],{"class":120,"line":121},[118,88151,51290],{"class":128},[118,88153,51294],{"class":51293},[118,88155,51297],{"class":1967},[118,88157,51300],{"class":128},[118,88159,88160,88162,88164,88166,88168,88170],{"class":120,"line":40},[118,88161,1038],{"class":128},[118,88163,50628],{"class":51293},[118,88165,51309],{"class":1967},[118,88167,174],{"class":128},[118,88169,51314],{"class":233},[118,88171,51300],{"class":128},[118,88173,88174],{"class":120,"line":1183},[118,88175,2404],{"emptyLinePlaceholder":45},[118,88177,88178,88180,88182],{"class":120,"line":1198},[118,88179,1038],{"class":128},[118,88181,51327],{"class":51293},[118,88183,51300],{"class":128},[118,88185,88186,88188,88190,88192,88194,88196],{"class":120,"line":1204},[118,88187,52137],{"class":128},[118,88189,51337],{"class":51293},[118,88191,51340],{"class":1967},[118,88193,174],{"class":128},[118,88195,51345],{"class":233},[118,88197,51300],{"class":128},[118,88199,88200,88202,88204,88206,88208,88210,88212,88214,88216],{"class":120,"line":1218},[118,88201,52137],{"class":128},[118,88203,51337],{"class":51293},[118,88205,14925],{"class":1967},[118,88207,174],{"class":128},[118,88209,51384],{"class":233},[118,88211,51364],{"class":1967},[118,88213,174],{"class":128},[118,88215,51391],{"class":233},[118,88217,51300],{"class":128},[118,88219,88220,88222,88224,88226,88228],{"class":120,"line":1224},[118,88221,52137],{"class":128},[118,88223,51400],{"class":51293},[118,88225,51403],{"class":128},[118,88227,51400],{"class":51293},[118,88229,51300],{"class":128},[118,88231,88232,88234,88236],{"class":120,"line":1315},[118,88233,51778],{"class":128},[118,88235,51327],{"class":51293},[118,88237,51300],{"class":128},[118,88239,88240],{"class":120,"line":1321},[118,88241,2404],{"emptyLinePlaceholder":45},[118,88243,88244,88246,88248],{"class":120,"line":1333},[118,88245,1038],{"class":128},[118,88247,51793],{"class":51293},[118,88249,51300],{"class":128},[118,88251,88252],{"class":120,"line":1616},[118,88253,88254],{"class":187},"  \u003C!-- 先引用这个库 -->\n",[118,88256,88257,88259,88261,88263,88265,88268,88270,88272],{"class":120,"line":1621},[118,88258,52137],{"class":128},[118,88260,51806],{"class":51293},[118,88262,55232],{"class":1967},[118,88264,174],{"class":128},[118,88266,88267],{"class":233},"\"lodash.min.js\"",[118,88269,55307],{"class":128},[118,88271,51806],{"class":51293},[118,88273,51300],{"class":128},[118,88275,88276,88278,88280],{"class":120,"line":1627},[118,88277,52137],{"class":128},[118,88279,51806],{"class":51293},[118,88281,51300],{"class":128},[118,88283,88284,88286,88288,88290],{"class":120,"line":1632},[118,88285,11226],{"class":124},[118,88287,69964],{"class":177},[118,88289,13569],{"class":124},[118,88291,15577],{"class":128},[118,88293,88294,88296,88298],{"class":120,"line":1646},[118,88295,71609],{"class":128},[118,88297,87803],{"class":233},[118,88299,31459],{"class":128},[118,88301,88302,88304,88306],{"class":120,"line":1651},[118,88303,71619],{"class":128},[118,88305,778],{"class":177},[118,88307,31459],{"class":128},[118,88309,88310,88312,88314,88316,88318],{"class":120,"line":1657},[118,88311,87818],{"class":128},[118,88313,87821],{"class":233},[118,88315,12440],{"class":128},[118,88317,87826],{"class":233},[118,88319,87829],{"class":128},[118,88321,88322],{"class":120,"line":1678},[118,88323,77865],{"class":128},[118,88325,88326,88328],{"class":120,"line":1683},[118,88327,87838],{"class":128},[118,88329,87841],{"class":233},[118,88331,88332],{"class":120,"line":1697},[118,88333,52391],{"class":128},[118,88335,88336],{"class":120,"line":1702},[118,88337,2191],{"class":128},[118,88339,88340,88342,88344,88346,88349,88352],{"class":120,"line":1731},[118,88341,11226],{"class":124},[118,88343,87856],{"class":177},[118,88345,13569],{"class":124},[118,88347,88348],{"class":128}," _.",[118,88350,88351],{"class":1967},"cloneDeep",[118,88353,70029],{"class":128},[118,88355,88356,88358,88360],{"class":120,"line":1736},[118,88357,73746],{"class":128},[118,88359,58240],{"class":1967},[118,88361,88048],{"class":128},[118,88363,88364,88367,88369],{"class":120,"line":1753},[118,88365,88366],{"class":128},"    o.family.baby ",[118,88368,174],{"class":124},[118,88370,88082],{"class":233},[118,88372,88373,88375,88377],{"class":120,"line":1758},[118,88374,73746],{"class":128},[118,88376,58240],{"class":1967},[118,88378,70029],{"class":128},[118,88380,88381,88383,88385],{"class":120,"line":1763},[118,88382,52410],{"class":128},[118,88384,51806],{"class":51293},[118,88386,51300],{"class":128},[118,88388,88389,88391,88393],{"class":120,"line":1768},[118,88390,51778],{"class":128},[118,88392,51793],{"class":51293},[118,88394,51300],{"class":128},[118,88396,88397],{"class":120,"line":1782},[118,88398,2404],{"emptyLinePlaceholder":45},[118,88400,88401,88403,88405],{"class":120,"line":1787},[118,88402,51778],{"class":128},[118,88404,50628],{"class":51293},[118,88406,51300],{"class":128},[15,88408,88409],{},[1466,88410],{"alt":39,"src":88411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22003,88413,88415],{"id":88414},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[109,88417,88419],{"className":50626,"code":88418,"language":50628,"meta":39,"style":39},"\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",[115,88420,88421,88431,88445,88449,88457,88471,88491,88503,88511,88515,88523,88531,88541,88549,88557,88569,88573,88579,88583,88587,88592,88597,88602,88628,88636,88645,88653,88661,88669,88673],{"__ignoreMap":39},[118,88422,88423,88425,88427,88429],{"class":120,"line":121},[118,88424,51290],{"class":128},[118,88426,51294],{"class":51293},[118,88428,51297],{"class":1967},[118,88430,51300],{"class":128},[118,88432,88433,88435,88437,88439,88441,88443],{"class":120,"line":40},[118,88434,1038],{"class":128},[118,88436,50628],{"class":51293},[118,88438,51309],{"class":1967},[118,88440,174],{"class":128},[118,88442,51314],{"class":233},[118,88444,51300],{"class":128},[118,88446,88447],{"class":120,"line":1183},[118,88448,2404],{"emptyLinePlaceholder":45},[118,88450,88451,88453,88455],{"class":120,"line":1198},[118,88452,1038],{"class":128},[118,88454,51327],{"class":51293},[118,88456,51300],{"class":128},[118,88458,88459,88461,88463,88465,88467,88469],{"class":120,"line":1204},[118,88460,52137],{"class":128},[118,88462,51337],{"class":51293},[118,88464,51340],{"class":1967},[118,88466,174],{"class":128},[118,88468,51345],{"class":233},[118,88470,51300],{"class":128},[118,88472,88473,88475,88477,88479,88481,88483,88485,88487,88489],{"class":120,"line":1218},[118,88474,52137],{"class":128},[118,88476,51337],{"class":51293},[118,88478,14925],{"class":1967},[118,88480,174],{"class":128},[118,88482,51384],{"class":233},[118,88484,51364],{"class":1967},[118,88486,174],{"class":128},[118,88488,51391],{"class":233},[118,88490,51300],{"class":128},[118,88492,88493,88495,88497,88499,88501],{"class":120,"line":1224},[118,88494,52137],{"class":128},[118,88496,51400],{"class":51293},[118,88498,51403],{"class":128},[118,88500,51400],{"class":51293},[118,88502,51300],{"class":128},[118,88504,88505,88507,88509],{"class":120,"line":1315},[118,88506,51778],{"class":128},[118,88508,51327],{"class":51293},[118,88510,51300],{"class":128},[118,88512,88513],{"class":120,"line":1321},[118,88514,2404],{"emptyLinePlaceholder":45},[118,88516,88517,88519,88521],{"class":120,"line":1333},[118,88518,1038],{"class":128},[118,88520,51793],{"class":51293},[118,88522,51300],{"class":128},[118,88524,88525,88527,88529],{"class":120,"line":1616},[118,88526,52137],{"class":128},[118,88528,51806],{"class":51293},[118,88530,51300],{"class":128},[118,88532,88533,88535,88537,88539],{"class":120,"line":1621},[118,88534,11226],{"class":124},[118,88536,69964],{"class":177},[118,88538,13569],{"class":124},[118,88540,15577],{"class":128},[118,88542,88543,88545,88547],{"class":120,"line":1627},[118,88544,71609],{"class":128},[118,88546,87803],{"class":233},[118,88548,31459],{"class":128},[118,88550,88551,88553,88555],{"class":120,"line":1632},[118,88552,71619],{"class":128},[118,88554,778],{"class":177},[118,88556,31459],{"class":128},[118,88558,88559,88561,88563,88565,88567],{"class":120,"line":1646},[118,88560,87818],{"class":128},[118,88562,87821],{"class":233},[118,88564,12440],{"class":128},[118,88566,87826],{"class":233},[118,88568,87829],{"class":128},[118,88570,88571],{"class":120,"line":1651},[118,88572,77865],{"class":128},[118,88574,88575,88577],{"class":120,"line":1657},[118,88576,87838],{"class":128},[118,88578,87841],{"class":233},[118,88580,88581],{"class":120,"line":1678},[118,88582,52391],{"class":128},[118,88584,88585],{"class":120,"line":1683},[118,88586,2191],{"class":128},[118,88588,88589],{"class":120,"line":1697},[118,88590,88591],{"class":187},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[118,88593,88594],{"class":120,"line":1702},[118,88595,88596],{"class":187},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[118,88598,88599],{"class":120,"line":1731},[118,88600,88601],{"class":187},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[118,88603,88604,88606,88608,88610,88613,88615,88618,88620,88622,88624,88626],{"class":120,"line":1736},[118,88605,11226],{"class":124},[118,88607,87856],{"class":177},[118,88609,13569],{"class":124},[118,88611,88612],{"class":177}," JSON",[118,88614,686],{"class":128},[118,88616,88617],{"class":1967},"parse",[118,88619,129],{"class":128},[118,88621,71657],{"class":177},[118,88623,686],{"class":128},[118,88625,71662],{"class":1967},[118,88627,71665],{"class":128},[118,88629,88630,88632,88634],{"class":120,"line":1753},[118,88631,73746],{"class":128},[118,88633,58240],{"class":1967},[118,88635,88048],{"class":128},[118,88637,88638,88640,88642],{"class":120,"line":1758},[118,88639,88366],{"class":128},[118,88641,174],{"class":124},[118,88643,88644],{"class":233}," '123'\n",[118,88646,88647,88649,88651],{"class":120,"line":1763},[118,88648,73746],{"class":128},[118,88650,58240],{"class":1967},[118,88652,70029],{"class":128},[118,88654,88655,88657,88659],{"class":120,"line":1768},[118,88656,52410],{"class":128},[118,88658,51806],{"class":51293},[118,88660,51300],{"class":128},[118,88662,88663,88665,88667],{"class":120,"line":1782},[118,88664,51778],{"class":128},[118,88666,51793],{"class":51293},[118,88668,51300],{"class":128},[118,88670,88671],{"class":120,"line":1787},[118,88672,2404],{"emptyLinePlaceholder":45},[118,88674,88675,88677,88679],{"class":120,"line":2581},[118,88676,51778],{"class":128},[118,88678,50628],{"class":51293},[118,88680,51300],{"class":128},[15,88682,88683],{},[1466,88684],{"alt":39,"src":88685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[60,88687,88689],{"id":88688},"_415-异常处理","4.15 异常处理",[72,88691,88692],{},[75,88693,88694],{},"throw抛异常",[15,88696,88697],{},[1466,88698],{"alt":39,"src":88699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[72,88701,88702],{"start":40},[75,88703,88704],{},"try\u002Fcatch 捕获错误信息",[15,88706,88707],{},[1466,88708],{"alt":39,"src":88709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[109,88711,88713],{"className":50626,"code":88712,"language":50628,"meta":39,"style":39},"\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",[115,88714,88715,88725,88739,88743,88751,88765,88785,88797,88805,88809,88817,88829,88837,88846,88853,88858,88877,88886,88897,88902,88912,88917,88922,88927,88944,88948,88953,88960,88972,88976,88988,88992,88996,89001,89006,89013,89021,89029,89033],{"__ignoreMap":39},[118,88716,88717,88719,88721,88723],{"class":120,"line":121},[118,88718,51290],{"class":128},[118,88720,51294],{"class":51293},[118,88722,51297],{"class":1967},[118,88724,51300],{"class":128},[118,88726,88727,88729,88731,88733,88735,88737],{"class":120,"line":40},[118,88728,1038],{"class":128},[118,88730,50628],{"class":51293},[118,88732,51309],{"class":1967},[118,88734,174],{"class":128},[118,88736,51314],{"class":233},[118,88738,51300],{"class":128},[118,88740,88741],{"class":120,"line":1183},[118,88742,2404],{"emptyLinePlaceholder":45},[118,88744,88745,88747,88749],{"class":120,"line":1198},[118,88746,1038],{"class":128},[118,88748,51327],{"class":51293},[118,88750,51300],{"class":128},[118,88752,88753,88755,88757,88759,88761,88763],{"class":120,"line":1204},[118,88754,52137],{"class":128},[118,88756,51337],{"class":51293},[118,88758,51340],{"class":1967},[118,88760,174],{"class":128},[118,88762,51345],{"class":233},[118,88764,51300],{"class":128},[118,88766,88767,88769,88771,88773,88775,88777,88779,88781,88783],{"class":120,"line":1218},[118,88768,52137],{"class":128},[118,88770,51337],{"class":51293},[118,88772,14925],{"class":1967},[118,88774,174],{"class":128},[118,88776,51384],{"class":233},[118,88778,51364],{"class":1967},[118,88780,174],{"class":128},[118,88782,51391],{"class":233},[118,88784,51300],{"class":128},[118,88786,88787,88789,88791,88793,88795],{"class":120,"line":1224},[118,88788,52137],{"class":128},[118,88790,51400],{"class":51293},[118,88792,51403],{"class":128},[118,88794,51400],{"class":51293},[118,88796,51300],{"class":128},[118,88798,88799,88801,88803],{"class":120,"line":1315},[118,88800,51778],{"class":128},[118,88802,51327],{"class":51293},[118,88804,51300],{"class":128},[118,88806,88807],{"class":120,"line":1321},[118,88808,2404],{"emptyLinePlaceholder":45},[118,88810,88811,88813,88815],{"class":120,"line":1333},[118,88812,1038],{"class":128},[118,88814,51793],{"class":51293},[118,88816,51300],{"class":128},[118,88818,88819,88821,88823,88825,88827],{"class":120,"line":1616},[118,88820,52137],{"class":128},[118,88822,15],{"class":51293},[118,88824,53487],{"class":128},[118,88826,15],{"class":51293},[118,88828,51300],{"class":128},[118,88830,88831,88833,88835],{"class":120,"line":1621},[118,88832,52137],{"class":128},[118,88834,51806],{"class":51293},[118,88836,51300],{"class":128},[118,88838,88839,88841,88844],{"class":120,"line":1627},[118,88840,70077],{"class":124},[118,88842,88843],{"class":1967}," fn",[118,88845,10858],{"class":128},[118,88847,88848,88851],{"class":120,"line":1632},[118,88849,88850],{"class":124},"      try",[118,88852,15577],{"class":128},[118,88854,88855],{"class":120,"line":1646},[118,88856,88857],{"class":187},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[118,88859,88860,88862,88864,88866,88868,88870,88872,88875],{"class":120,"line":1651},[118,88861,61263],{"class":124},[118,88863,6830],{"class":177},[118,88865,13569],{"class":124},[118,88867,54389],{"class":128},[118,88869,54392],{"class":1967},[118,88871,129],{"class":128},[118,88873,88874],{"class":233},"'.p'",[118,88876,135],{"class":128},[118,88878,88879,88882,88884],{"class":120,"line":1657},[118,88880,88881],{"class":128},"        p.style.color ",[118,88883,174],{"class":124},[118,88885,67044],{"class":233},[118,88887,88888,88891,88894],{"class":120,"line":1678},[118,88889,88890],{"class":128},"      } ",[118,88892,88893],{"class":124},"catch",[118,88895,88896],{"class":128}," (err) {\n",[118,88898,88899],{"class":120,"line":1683},[118,88900,88901],{"class":187},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[118,88903,88904,88907,88909],{"class":120,"line":1697},[118,88905,88906],{"class":128},"        console.",[118,88908,58240],{"class":1967},[118,88910,88911],{"class":128},"(err.message)\n",[118,88913,88914],{"class":120,"line":1702},[118,88915,88916],{"class":187},"        \u002F\u002F 想要中断程序，需要加return\n",[118,88918,88919],{"class":120,"line":1731},[118,88920,88921],{"class":187},"        \u002F\u002F return\n",[118,88923,88924],{"class":120,"line":1736},[118,88925,88926],{"class":187},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[118,88928,88929,88932,88934,88937,88939,88942],{"class":120,"line":1753},[118,88930,88931],{"class":124},"        throw",[118,88933,11583],{"class":124},[118,88935,88936],{"class":1967}," Error",[118,88938,129],{"class":128},[118,88940,88941],{"class":233},"'你看看，选择器错误了吧'",[118,88943,135],{"class":128},[118,88945,88946],{"class":120,"line":1758},[118,88947,52391],{"class":128},[118,88949,88950],{"class":120,"line":1763},[118,88951,88952],{"class":187},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[118,88954,88955,88958],{"class":120,"line":1768},[118,88956,88957],{"class":124},"      finally",[118,88959,15577],{"class":128},[118,88961,88962,88965,88967,88970],{"class":120,"line":1782},[118,88963,88964],{"class":1967},"        alert",[118,88966,129],{"class":128},[118,88968,88969],{"class":233},"'弹出对话框'",[118,88971,135],{"class":128},[118,88973,88974],{"class":120,"line":1787},[118,88975,52391],{"class":128},[118,88977,88978,88980,88982,88984,88986],{"class":120,"line":2581},[118,88979,58237],{"class":128},[118,88981,58240],{"class":1967},[118,88983,129],{"class":128},[118,88985,600],{"class":177},[118,88987,135],{"class":128},[118,88989,88990],{"class":120,"line":2595},[118,88991,2404],{"emptyLinePlaceholder":45},[118,88993,88994],{"class":120,"line":2603},[118,88995,2191],{"class":128},[118,88997,88998],{"class":120,"line":2608},[118,88999,89000],{"class":187},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[118,89002,89003],{"class":120,"line":2614},[118,89004,89005],{"class":187},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[118,89007,89008,89011],{"class":120,"line":2620},[118,89009,89010],{"class":1967},"    fn",[118,89012,1980],{"class":128},[118,89014,89015,89017,89019],{"class":120,"line":2625},[118,89016,52410],{"class":128},[118,89018,51806],{"class":51293},[118,89020,51300],{"class":128},[118,89022,89023,89025,89027],{"class":120,"line":7953},[118,89024,51778],{"class":128},[118,89026,51793],{"class":51293},[118,89028,51300],{"class":128},[118,89030,89031],{"class":120,"line":7977},[118,89032,2404],{"emptyLinePlaceholder":45},[118,89034,89035,89037,89039],{"class":120,"line":7982},[118,89036,51778],{"class":128},[118,89038,50628],{"class":51293},[118,89040,51300],{"class":128},[15,89042,89043],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[72,89045,89046],{"start":1183},[75,89047,89048],{},"debugger",[15,89050,89051],{},[1466,89052],{"alt":39,"src":89053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[15,89055,89056],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[60,89058,89060],{"id":89059},"_416-处理this","4.16 处理this",[89,89062,89064],{"id":89063},"_4161-this的指向","4.16.1 this的指向",[72,89066,89067],{},[75,89068,89069],{},"普通函数的this",[15,89071,89072],{},[1466,89073],{"alt":39,"src":89074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[72,89076,89077],{"start":40},[75,89078,89079],{},"箭头函数的this",[15,89081,89082],{},[1466,89083],{"alt":39,"src":89084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[15,89086,89087],{},[1466,89088],{"alt":39,"src":89089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[15,89091,89092],{},[1466,89093],{"alt":39,"src":89094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[89,89096,89098],{"id":89097},"_4162-this的改变","4.16.2 this的改变",[15,89100,89101],{},"call() apply() bind()",[72,89103,89104],{},[75,89105,89106],{},"call()",[15,89108,89109],{},[1466,89110],{"alt":39,"src":89111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[15,89113,89114],{},"两个作用：①调用函数；②改变this指向",[109,89116,89118],{"className":53060,"code":89117,"language":53062,"meta":39,"style":39},"\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",[115,89119,89120,89128,89136,89140,89145,89149,89154,89159,89164,89168,89173,89181],{"__ignoreMap":39},[118,89121,89122,89124,89126],{"class":120,"line":121},[118,89123,1038],{"class":128},[118,89125,51793],{"class":51293},[118,89127,51300],{"class":128},[118,89129,89130,89132,89134],{"class":120,"line":40},[118,89131,52137],{"class":128},[118,89133,51806],{"class":51293},[118,89135,51300],{"class":128},[118,89137,89138],{"class":120,"line":1183},[118,89139,71516],{"class":128},[118,89141,89142],{"class":120,"line":1198},[118,89143,89144],{"class":128},"      uname: 'pink'\n",[118,89146,89147],{"class":120,"line":1204},[118,89148,2191],{"class":128},[118,89150,89151],{"class":120,"line":1218},[118,89152,89153],{"class":128},"    function fn(x, y) {\n",[118,89155,89156],{"class":120,"line":1224},[118,89157,89158],{"class":128},"      console.log(this)  \u002F\u002Fwindow\n",[118,89160,89161],{"class":120,"line":1315},[118,89162,89163],{"class":128},"      console.log(x + y)\n",[118,89165,89166],{"class":120,"line":1321},[118,89167,2191],{"class":128},[118,89169,89170],{"class":120,"line":1333},[118,89171,89172],{"class":128},"    fn.call(obj, 1, 2)\n",[118,89174,89175,89177,89179],{"class":120,"line":1616},[118,89176,52410],{"class":128},[118,89178,51806],{"class":51293},[118,89180,51300],{"class":128},[118,89182,89183,89185,89187],{"class":120,"line":1621},[118,89184,51778],{"class":128},[118,89186,51793],{"class":51293},[118,89188,51300],{"class":128},[15,89190,89191],{},[1466,89192],{"alt":39,"src":89193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[72,89195,89196],{"start":40},[75,89197,89198],{},"apply()",[15,89200,89201],{},[1466,89202],{"alt":39,"src":89203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[15,89205,89114],{},[15,89207,89208],{},"call传递的是普通参数，而apply必须传递的是数组",[109,89210,89212],{"className":50626,"code":89211,"language":50628,"meta":39,"style":39},"\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",[115,89213,89214,89224,89238,89242,89250,89264,89284,89296,89304,89308,89316,89324,89334,89341,89345,89350,89366,89378,89392,89396,89401,89420,89425,89429,89434,89439,89447,89452,89474,89479,89495,89511,89523,89527,89532,89551,89559,89567,89571],{"__ignoreMap":39},[118,89215,89216,89218,89220,89222],{"class":120,"line":121},[118,89217,51290],{"class":128},[118,89219,51294],{"class":51293},[118,89221,51297],{"class":1967},[118,89223,51300],{"class":128},[118,89225,89226,89228,89230,89232,89234,89236],{"class":120,"line":40},[118,89227,1038],{"class":128},[118,89229,50628],{"class":51293},[118,89231,51309],{"class":1967},[118,89233,174],{"class":128},[118,89235,51314],{"class":233},[118,89237,51300],{"class":128},[118,89239,89240],{"class":120,"line":1183},[118,89241,2404],{"emptyLinePlaceholder":45},[118,89243,89244,89246,89248],{"class":120,"line":1198},[118,89245,1038],{"class":128},[118,89247,51327],{"class":51293},[118,89249,51300],{"class":128},[118,89251,89252,89254,89256,89258,89260,89262],{"class":120,"line":1204},[118,89253,52137],{"class":128},[118,89255,51337],{"class":51293},[118,89257,51340],{"class":1967},[118,89259,174],{"class":128},[118,89261,51345],{"class":233},[118,89263,51300],{"class":128},[118,89265,89266,89268,89270,89272,89274,89276,89278,89280,89282],{"class":120,"line":1218},[118,89267,52137],{"class":128},[118,89269,51337],{"class":51293},[118,89271,14925],{"class":1967},[118,89273,174],{"class":128},[118,89275,51384],{"class":233},[118,89277,51364],{"class":1967},[118,89279,174],{"class":128},[118,89281,51391],{"class":233},[118,89283,51300],{"class":128},[118,89285,89286,89288,89290,89292,89294],{"class":120,"line":1224},[118,89287,52137],{"class":128},[118,89289,51400],{"class":51293},[118,89291,51403],{"class":128},[118,89293,51400],{"class":51293},[118,89295,51300],{"class":128},[118,89297,89298,89300,89302],{"class":120,"line":1315},[118,89299,51778],{"class":128},[118,89301,51327],{"class":51293},[118,89303,51300],{"class":128},[118,89305,89306],{"class":120,"line":1321},[118,89307,2404],{"emptyLinePlaceholder":45},[118,89309,89310,89312,89314],{"class":120,"line":1333},[118,89311,1038],{"class":128},[118,89313,51793],{"class":51293},[118,89315,51300],{"class":128},[118,89317,89318,89320,89322],{"class":120,"line":1616},[118,89319,52137],{"class":128},[118,89321,51806],{"class":51293},[118,89323,51300],{"class":128},[118,89325,89326,89328,89330,89332],{"class":120,"line":1621},[118,89327,11226],{"class":124},[118,89329,69964],{"class":177},[118,89331,13569],{"class":124},[118,89333,15577],{"class":128},[118,89335,89336,89338],{"class":120,"line":1627},[118,89337,71619],{"class":128},[118,89339,89340],{"class":177},"18\n",[118,89342,89343],{"class":120,"line":1632},[118,89344,2191],{"class":128},[118,89346,89347],{"class":120,"line":1646},[118,89348,89349],{"class":187},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[118,89351,89352,89354,89356,89358,89360,89362,89364],{"class":120,"line":1651},[118,89353,70077],{"class":124},[118,89355,88843],{"class":1967},[118,89357,129],{"class":128},[118,89359,948],{"class":5221},[118,89361,12440],{"class":128},[118,89363,973],{"class":5221},[118,89365,12447],{"class":128},[118,89367,89368,89370,89372,89374,89376],{"class":120,"line":1657},[118,89369,58237],{"class":128},[118,89371,58240],{"class":1967},[118,89373,129],{"class":128},[118,89375,86986],{"class":177},[118,89377,135],{"class":128},[118,89379,89380,89382,89384,89387,89389],{"class":120,"line":1678},[118,89381,58237],{"class":128},[118,89383,58240],{"class":1967},[118,89385,89386],{"class":128},"(x ",[118,89388,609],{"class":124},[118,89390,89391],{"class":128}," y)\n",[118,89393,89394],{"class":120,"line":1683},[118,89395,2191],{"class":128},[118,89397,89398],{"class":120,"line":1697},[118,89399,89400],{"class":187},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[118,89402,89403,89406,89409,89412,89414,89416,89418],{"class":120,"line":1702},[118,89404,89405],{"class":128},"    fn.",[118,89407,89408],{"class":1967},"apply",[118,89410,89411],{"class":128},"(obj, [",[118,89413,346],{"class":177},[118,89415,12440],{"class":128},[118,89417,206],{"class":177},[118,89419,4661],{"class":128},[118,89421,89422],{"class":120,"line":1731},[118,89423,89424],{"class":187},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[118,89426,89427],{"class":120,"line":1736},[118,89428,2404],{"emptyLinePlaceholder":45},[118,89430,89431],{"class":120,"line":1753},[118,89432,89433],{"class":187},"    \u002F\u002F 使用场景：求数组最大值\n",[118,89435,89436],{"class":120,"line":1758},[118,89437,89438],{"class":187},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[118,89440,89441,89444],{"class":120,"line":1763},[118,89442,89443],{"class":187},"    \u002F\u002F console.log(max)",[118,89445,89446],{"class":187},"   \u002F\u002F3\n",[118,89448,89449],{"class":120,"line":1768},[118,89450,89451],{"class":187},"    \u002F\u002F 指向空或者Math都是可以的\n",[118,89453,89454,89456,89458,89460,89462,89464,89466,89468,89470,89472],{"class":120,"line":1782},[118,89455,11226],{"class":124},[118,89457,57688],{"class":177},[118,89459,13569],{"class":124},[118,89461,52219],{"class":128},[118,89463,439],{"class":177},[118,89465,12440],{"class":128},[118,89467,632],{"class":177},[118,89469,12440],{"class":128},[118,89471,663],{"class":177},[118,89473,33239],{"class":128},[118,89475,89476],{"class":120,"line":1787},[118,89477,89478],{"class":187},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[118,89480,89481,89483,89485,89487,89490,89492],{"class":120,"line":2581},[118,89482,11226],{"class":124},[118,89484,5956],{"class":177},[118,89486,13569],{"class":124},[118,89488,89489],{"class":128}," Math.max.",[118,89491,89408],{"class":1967},[118,89493,89494],{"class":128},"(Math, arr)\n",[118,89496,89497,89499,89502,89504,89507,89509],{"class":120,"line":2595},[118,89498,11226],{"class":124},[118,89500,89501],{"class":177}," min",[118,89503,13569],{"class":124},[118,89505,89506],{"class":128}," Math.min.",[118,89508,89408],{"class":1967},[118,89510,89494],{"class":128},[118,89512,89513,89515,89517,89520],{"class":120,"line":2603},[118,89514,73746],{"class":128},[118,89516,58240],{"class":1967},[118,89518,89519],{"class":128},"(max, min)     ",[118,89521,89522],{"class":187},"\u002F\u002F100,4\n",[118,89524,89525],{"class":120,"line":2608},[118,89526,2404],{"emptyLinePlaceholder":45},[118,89528,89529],{"class":120,"line":2614},[118,89530,89531],{"class":187},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[118,89533,89534,89536,89538,89541,89543,89545,89548],{"class":120,"line":2620},[118,89535,73746],{"class":128},[118,89537,58240],{"class":1967},[118,89539,89540],{"class":128},"(Max.",[118,89542,6020],{"class":1967},[118,89544,129],{"class":128},[118,89546,89547],{"class":124},"...",[118,89549,89550],{"class":128},"arr))\n",[118,89552,89553,89555,89557],{"class":120,"line":2625},[118,89554,52410],{"class":128},[118,89556,51806],{"class":51293},[118,89558,51300],{"class":128},[118,89560,89561,89563,89565],{"class":120,"line":7953},[118,89562,51778],{"class":128},[118,89564,51793],{"class":51293},[118,89566,51300],{"class":128},[118,89568,89569],{"class":120,"line":7977},[118,89570,2404],{"emptyLinePlaceholder":45},[118,89572,89573,89575,89577],{"class":120,"line":7982},[118,89574,51778],{"class":128},[118,89576,50628],{"class":51293},[118,89578,51300],{"class":128},[15,89580,89581],{},[1466,89582],{"alt":39,"src":89583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[72,89585,89586],{"start":1183},[75,89587,89588],{},"bind()",[15,89590,89591],{},[1466,89592],{"alt":39,"src":89593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[15,89595,89596],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[15,89598,89599],{},"bind的语法跟call很相似",[109,89601,89603],{"className":53060,"code":89602,"language":53062,"meta":39,"style":39},"\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",[115,89604,89605,89613,89621,89625,89630,89634,89638,89643,89647,89652,89657,89662,89667,89672,89677,89682,89686,89694],{"__ignoreMap":39},[118,89606,89607,89609,89611],{"class":120,"line":121},[118,89608,1038],{"class":128},[118,89610,51793],{"class":51293},[118,89612,51300],{"class":128},[118,89614,89615,89617,89619],{"class":120,"line":40},[118,89616,52137],{"class":128},[118,89618,51806],{"class":51293},[118,89620,51300],{"class":128},[118,89622,89623],{"class":120,"line":1183},[118,89624,71516],{"class":128},[118,89626,89627],{"class":120,"line":1198},[118,89628,89629],{"class":128},"      age: 18\n",[118,89631,89632],{"class":120,"line":1204},[118,89633,2191],{"class":128},[118,89635,89636],{"class":120,"line":1218},[118,89637,77136],{"class":128},[118,89639,89640],{"class":120,"line":1224},[118,89641,89642],{"class":128},"      console.log(this)\n",[118,89644,89645],{"class":120,"line":1315},[118,89646,2191],{"class":128},[118,89648,89649],{"class":120,"line":1321},[118,89650,89651],{"class":128},"    \u002F\u002F 1.bind 不会调用函数\n",[118,89653,89654],{"class":120,"line":1333},[118,89655,89656],{"class":128},"    \u002F\u002F 2.bind能改变this的指向\n",[118,89658,89659],{"class":120,"line":1616},[118,89660,89661],{"class":128},"    fn.bind()\n",[118,89663,89664],{"class":120,"line":1621},[118,89665,89666],{"class":128},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[118,89668,89669],{"class":120,"line":1627},[118,89670,89671],{"class":128},"    const fun = fn.bind(obj)\n",[118,89673,89674],{"class":120,"line":1632},[118,89675,89676],{"class":128},"    \u002F\u002F console.log(fun)\n",[118,89678,89679],{"class":120,"line":1646},[118,89680,89681],{"class":128},"    \u002F\u002F 调用,查看this的指向\n",[118,89683,89684],{"class":120,"line":1651},[118,89685,52644],{"class":128},[118,89687,89688,89690,89692],{"class":120,"line":1657},[118,89689,52410],{"class":128},[118,89691,51806],{"class":51293},[118,89693,51300],{"class":128},[118,89695,89696,89698,89700],{"class":120,"line":1678},[118,89697,51778],{"class":128},[118,89699,51793],{"class":51293},[118,89701,51300],{"class":128},[15,89703,89704],{},[1466,89705],{"alt":39,"src":89706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[72,89708,89709],{"start":1198},[75,89710,89711],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[109,89713,89715],{"className":53060,"code":89714,"language":53062,"meta":39,"style":39},"\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",[115,89716,89717,89725,89738,89746,89751,89755,89760,89765,89770,89775,89780,89785,89790,89795,89799,89807],{"__ignoreMap":39},[118,89718,89719,89721,89723],{"class":120,"line":121},[118,89720,1038],{"class":128},[118,89722,51793],{"class":51293},[118,89724,51300],{"class":128},[118,89726,89727,89729,89731,89734,89736],{"class":120,"line":40},[118,89728,52137],{"class":128},[118,89730,53880],{"class":51293},[118,89732,89733],{"class":128},">禁用\u003C\u002F",[118,89735,53880],{"class":51293},[118,89737,51300],{"class":128},[118,89739,89740,89742,89744],{"class":120,"line":1183},[118,89741,52137],{"class":128},[118,89743,51806],{"class":51293},[118,89745,51300],{"class":128},[118,89747,89748],{"class":120,"line":1198},[118,89749,89750],{"class":128},"    const btn = document.querySelector('button')\n",[118,89752,89753],{"class":120,"line":1204},[118,89754,59009],{"class":128},[118,89756,89757],{"class":120,"line":1218},[118,89758,89759],{"class":128},"      this.disabled = true\n",[118,89761,89762],{"class":120,"line":1224},[118,89763,89764],{"class":128},"      \u002F\u002F 定时器是window进行调用的\n",[118,89766,89767],{"class":120,"line":1315},[118,89768,89769],{"class":128},"      setTimeout(function () {\n",[118,89771,89772],{"class":120,"line":1321},[118,89773,89774],{"class":128},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[118,89776,89777],{"class":120,"line":1333},[118,89778,89779],{"class":128},"        this.disabled = false\n",[118,89781,89782],{"class":120,"line":1616},[118,89783,89784],{"class":128},"      }.bind(this), 2000)\n",[118,89786,89787],{"class":120,"line":1621},[118,89788,89789],{"class":128},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[118,89791,89792],{"class":120,"line":1627},[118,89793,89794],{"class":128},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[118,89796,89797],{"class":120,"line":1632},[118,89798,33454],{"class":128},[118,89800,89801,89803,89805],{"class":120,"line":1646},[118,89802,52410],{"class":128},[118,89804,51806],{"class":51293},[118,89806,51300],{"class":128},[118,89808,89809,89811,89813],{"class":120,"line":1651},[118,89810,51778],{"class":128},[118,89812,51793],{"class":51293},[118,89814,51300],{"class":128},[72,89816,89817],{"start":1204},[75,89818,21958],{},[15,89820,89821],{},[1466,89822],{"alt":39,"src":89823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[60,89825,89827],{"id":89826},"_417-性能优化","4.17 性能优化",[89,89829,89831],{"id":89830},"_4171-防抖","4.17.1 防抖",[15,89833,89834],{},[1466,89835],{"alt":39,"src":89836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[15,89838,89839],{},[278,89840,89841],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[15,89843,89844],{},"防抖实现方式：",[1135,89846,89847],{},[75,89848,89849],{},"lodash 提供了防抖处理",[15,89851,89852],{},"_.debounce(func,[wait=0],[options={}])",[15,89854,89855],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[109,89857,89859],{"className":50626,"code":89858,"language":50628,"meta":39,"style":39},"\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",[115,89860,89861,89871,89885,89889,89897,89911,89931,89943,89951,89957,89967,89979,89991,90002,90014,90024,90034,90047,90051,90059,90067,90071,90079,90097,90115,90123,90142,90152,90161,90172,90177,90181,90186,90191,90196,90221,90229,90237,90241],{"__ignoreMap":39},[118,89862,89863,89865,89867,89869],{"class":120,"line":121},[118,89864,51290],{"class":128},[118,89866,51294],{"class":51293},[118,89868,51297],{"class":1967},[118,89870,51300],{"class":128},[118,89872,89873,89875,89877,89879,89881,89883],{"class":120,"line":40},[118,89874,1038],{"class":128},[118,89876,50628],{"class":51293},[118,89878,51309],{"class":1967},[118,89880,174],{"class":128},[118,89882,51314],{"class":233},[118,89884,51300],{"class":128},[118,89886,89887],{"class":120,"line":1183},[118,89888,2404],{"emptyLinePlaceholder":45},[118,89890,89891,89893,89895],{"class":120,"line":1198},[118,89892,1038],{"class":128},[118,89894,51327],{"class":51293},[118,89896,51300],{"class":128},[118,89898,89899,89901,89903,89905,89907,89909],{"class":120,"line":1204},[118,89900,52137],{"class":128},[118,89902,51337],{"class":51293},[118,89904,51340],{"class":1967},[118,89906,174],{"class":128},[118,89908,51345],{"class":233},[118,89910,51300],{"class":128},[118,89912,89913,89915,89917,89919,89921,89923,89925,89927,89929],{"class":120,"line":1218},[118,89914,52137],{"class":128},[118,89916,51337],{"class":51293},[118,89918,14925],{"class":1967},[118,89920,174],{"class":128},[118,89922,51384],{"class":233},[118,89924,51364],{"class":1967},[118,89926,174],{"class":128},[118,89928,51391],{"class":233},[118,89930,51300],{"class":128},[118,89932,89933,89935,89937,89939,89941],{"class":120,"line":1224},[118,89934,52137],{"class":128},[118,89936,51400],{"class":51293},[118,89938,51403],{"class":128},[118,89940,51400],{"class":51293},[118,89942,51300],{"class":128},[118,89944,89945,89947,89949],{"class":120,"line":1315},[118,89946,52137],{"class":128},[118,89948,5131],{"class":51293},[118,89950,51300],{"class":128},[118,89952,89953,89955],{"class":120,"line":1321},[118,89954,54745],{"class":1967},[118,89956,15577],{"class":128},[118,89958,89959,89961,89963,89965],{"class":120,"line":1333},[118,89960,72589],{"class":177},[118,89962,51430],{"class":128},[118,89964,60498],{"class":177},[118,89966,1294],{"class":128},[118,89968,89969,89971,89973,89975,89977],{"class":120,"line":1616},[118,89970,54764],{"class":177},[118,89972,51430],{"class":128},[118,89974,1726],{"class":177},[118,89976,51485],{"class":124},[118,89978,1294],{"class":128},[118,89980,89981,89983,89985,89987,89989],{"class":120,"line":1621},[118,89982,54778],{"class":177},[118,89984,51430],{"class":128},[118,89986,1726],{"class":177},[118,89988,51485],{"class":124},[118,89990,1294],{"class":128},[118,89992,89993,89995,89997,90000],{"class":120,"line":1627},[118,89994,54877],{"class":177},[118,89996,51430],{"class":128},[118,89998,89999],{"class":177},"gray",[118,90001,1294],{"class":128},[118,90003,90004,90006,90008,90010,90012],{"class":120,"line":1632},[118,90005,54915],{"class":177},[118,90007,51430],{"class":128},[118,90009,953],{"class":177},[118,90011,51485],{"class":124},[118,90013,1294],{"class":128},[118,90015,90016,90018,90020,90022],{"class":120,"line":1646},[118,90017,57409],{"class":177},[118,90019,51430],{"class":128},[118,90021,60835],{"class":177},[118,90023,1294],{"class":128},[118,90025,90026,90028,90030,90032],{"class":120,"line":1651},[118,90027,57279],{"class":177},[118,90029,51430],{"class":128},[118,90031,51585],{"class":177},[118,90033,1294],{"class":128},[118,90035,90036,90039,90041,90043,90045],{"class":120,"line":1657},[118,90037,90038],{"class":177},"      padding-top",[118,90040,51430],{"class":128},[118,90042,447],{"class":177},[118,90044,51485],{"class":124},[118,90046,1294],{"class":128},[118,90048,90049],{"class":120,"line":1678},[118,90050,2191],{"class":128},[118,90052,90053,90055,90057],{"class":120,"line":1683},[118,90054,52410],{"class":128},[118,90056,5131],{"class":51293},[118,90058,51300],{"class":128},[118,90060,90061,90063,90065],{"class":120,"line":1697},[118,90062,51778],{"class":128},[118,90064,51327],{"class":51293},[118,90066,51300],{"class":128},[118,90068,90069],{"class":120,"line":1702},[118,90070,2404],{"emptyLinePlaceholder":45},[118,90072,90073,90075,90077],{"class":120,"line":1731},[118,90074,1038],{"class":128},[118,90076,51793],{"class":51293},[118,90078,51300],{"class":128},[118,90080,90081,90083,90085,90087,90089,90091,90093,90095],{"class":120,"line":1736},[118,90082,52137],{"class":128},[118,90084,51604],{"class":51293},[118,90086,53479],{"class":1967},[118,90088,174],{"class":128},[118,90090,53484],{"class":233},[118,90092,55307],{"class":128},[118,90094,51604],{"class":51293},[118,90096,51300],{"class":128},[118,90098,90099,90101,90103,90105,90107,90109,90111,90113],{"class":120,"line":1753},[118,90100,52137],{"class":128},[118,90102,51806],{"class":51293},[118,90104,55232],{"class":1967},[118,90106,174],{"class":128},[118,90108,88267],{"class":233},[118,90110,55307],{"class":128},[118,90112,51806],{"class":51293},[118,90114,51300],{"class":128},[118,90116,90117,90119,90121],{"class":120,"line":1758},[118,90118,52137],{"class":128},[118,90120,51806],{"class":51293},[118,90122,51300],{"class":128},[118,90124,90125,90127,90129,90131,90133,90135,90137,90140],{"class":120,"line":1763},[118,90126,11226],{"class":124},[118,90128,86926],{"class":177},[118,90130,13569],{"class":124},[118,90132,54389],{"class":128},[118,90134,54392],{"class":1967},[118,90136,129],{"class":128},[118,90138,90139],{"class":233},"'.box'",[118,90141,135],{"class":128},[118,90143,90144,90146,90148,90150],{"class":120,"line":1768},[118,90145,52212],{"class":124},[118,90147,9443],{"class":128},[118,90149,174],{"class":124},[118,90151,47326],{"class":177},[118,90153,90154,90156,90159],{"class":120,"line":1782},[118,90155,70077],{"class":124},[118,90157,90158],{"class":1967}," mouseMove",[118,90160,10858],{"class":128},[118,90162,90163,90166,90168,90170],{"class":120,"line":1787},[118,90164,90165],{"class":128},"      box.innerHTML ",[118,90167,174],{"class":124},[118,90169,3036],{"class":128},[118,90171,2706],{"class":124},[118,90173,90174],{"class":120,"line":2581},[118,90175,90176],{"class":187},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[118,90178,90179],{"class":120,"line":2595},[118,90180,2191],{"class":128},[118,90182,90183],{"class":120,"line":2603},[118,90184,90185],{"class":187},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[118,90187,90188],{"class":120,"line":2608},[118,90189,90190],{"class":187},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[118,90192,90193],{"class":120,"line":2614},[118,90194,90195],{"class":187},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[118,90197,90198,90201,90203,90205,90208,90211,90214,90217,90219],{"class":120,"line":2620},[118,90199,90200],{"class":128},"    box.",[118,90202,57806],{"class":1967},[118,90204,129],{"class":128},[118,90206,90207],{"class":233},"'mousemove'",[118,90209,90210],{"class":128},", _.",[118,90212,90213],{"class":1967},"debounce",[118,90215,90216],{"class":128},"(mouseMove, ",[118,90218,65067],{"class":177},[118,90220,30490],{"class":128},[118,90222,90223,90225,90227],{"class":120,"line":2625},[118,90224,52410],{"class":128},[118,90226,51806],{"class":51293},[118,90228,51300],{"class":128},[118,90230,90231,90233,90235],{"class":120,"line":7953},[118,90232,51778],{"class":128},[118,90234,51793],{"class":51293},[118,90236,51300],{"class":128},[118,90238,90239],{"class":120,"line":7977},[118,90240,2404],{"emptyLinePlaceholder":45},[118,90242,90243,90245,90247],{"class":120,"line":7982},[118,90244,51778],{"class":128},[118,90246,50628],{"class":51293},[118,90248,51300],{"class":128},[1135,90250,90251],{},[75,90252,90253],{},"手写一个防抖函数来处理",[15,90255,90256],{},"防抖的核心就是利用定时器来实现的：",[15,90258,90259],{},"①声明一个定时器变量",[15,90261,90262],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[15,90264,90265],{},"③如果没有定时器则开启定时器，记得存到变量里面",[109,90267,90269],{"className":50626,"code":90268,"language":50628,"meta":39,"style":39},"\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",[115,90270,90271,90281,90295,90299,90307,90321,90341,90353,90361,90367,90377,90389,90401,90411,90423,90433,90443,90455,90459,90467,90475,90479,90487,90505,90523,90531,90549,90559,90567,90577,90581,90585,90589,90594,90599,90604,90609,90614,90619,90637,90644,90649,90657,90662,90675,90691,90701,90706,90710,90714,90734,90738,90743,90748,90753,90758,90766,90774,90778],{"__ignoreMap":39},[118,90272,90273,90275,90277,90279],{"class":120,"line":121},[118,90274,51290],{"class":128},[118,90276,51294],{"class":51293},[118,90278,51297],{"class":1967},[118,90280,51300],{"class":128},[118,90282,90283,90285,90287,90289,90291,90293],{"class":120,"line":40},[118,90284,1038],{"class":128},[118,90286,50628],{"class":51293},[118,90288,51309],{"class":1967},[118,90290,174],{"class":128},[118,90292,51314],{"class":233},[118,90294,51300],{"class":128},[118,90296,90297],{"class":120,"line":1183},[118,90298,2404],{"emptyLinePlaceholder":45},[118,90300,90301,90303,90305],{"class":120,"line":1198},[118,90302,1038],{"class":128},[118,90304,51327],{"class":51293},[118,90306,51300],{"class":128},[118,90308,90309,90311,90313,90315,90317,90319],{"class":120,"line":1204},[118,90310,52137],{"class":128},[118,90312,51337],{"class":51293},[118,90314,51340],{"class":1967},[118,90316,174],{"class":128},[118,90318,51345],{"class":233},[118,90320,51300],{"class":128},[118,90322,90323,90325,90327,90329,90331,90333,90335,90337,90339],{"class":120,"line":1218},[118,90324,52137],{"class":128},[118,90326,51337],{"class":51293},[118,90328,14925],{"class":1967},[118,90330,174],{"class":128},[118,90332,51384],{"class":233},[118,90334,51364],{"class":1967},[118,90336,174],{"class":128},[118,90338,51391],{"class":233},[118,90340,51300],{"class":128},[118,90342,90343,90345,90347,90349,90351],{"class":120,"line":1224},[118,90344,52137],{"class":128},[118,90346,51400],{"class":51293},[118,90348,51403],{"class":128},[118,90350,51400],{"class":51293},[118,90352,51300],{"class":128},[118,90354,90355,90357,90359],{"class":120,"line":1315},[118,90356,52137],{"class":128},[118,90358,5131],{"class":51293},[118,90360,51300],{"class":128},[118,90362,90363,90365],{"class":120,"line":1321},[118,90364,54745],{"class":1967},[118,90366,15577],{"class":128},[118,90368,90369,90371,90373,90375],{"class":120,"line":1333},[118,90370,72589],{"class":177},[118,90372,51430],{"class":128},[118,90374,60498],{"class":177},[118,90376,1294],{"class":128},[118,90378,90379,90381,90383,90385,90387],{"class":120,"line":1616},[118,90380,54764],{"class":177},[118,90382,51430],{"class":128},[118,90384,1726],{"class":177},[118,90386,51485],{"class":124},[118,90388,1294],{"class":128},[118,90390,90391,90393,90395,90397,90399],{"class":120,"line":1621},[118,90392,54778],{"class":177},[118,90394,51430],{"class":128},[118,90396,1726],{"class":177},[118,90398,51485],{"class":124},[118,90400,1294],{"class":128},[118,90402,90403,90405,90407,90409],{"class":120,"line":1627},[118,90404,54877],{"class":177},[118,90406,51430],{"class":128},[118,90408,89999],{"class":177},[118,90410,1294],{"class":128},[118,90412,90413,90415,90417,90419,90421],{"class":120,"line":1632},[118,90414,54915],{"class":177},[118,90416,51430],{"class":128},[118,90418,953],{"class":177},[118,90420,51485],{"class":124},[118,90422,1294],{"class":128},[118,90424,90425,90427,90429,90431],{"class":120,"line":1646},[118,90426,57409],{"class":177},[118,90428,51430],{"class":128},[118,90430,60835],{"class":177},[118,90432,1294],{"class":128},[118,90434,90435,90437,90439,90441],{"class":120,"line":1651},[118,90436,57279],{"class":177},[118,90438,51430],{"class":128},[118,90440,51585],{"class":177},[118,90442,1294],{"class":128},[118,90444,90445,90447,90449,90451,90453],{"class":120,"line":1657},[118,90446,90038],{"class":177},[118,90448,51430],{"class":128},[118,90450,447],{"class":177},[118,90452,51485],{"class":124},[118,90454,1294],{"class":128},[118,90456,90457],{"class":120,"line":1678},[118,90458,2191],{"class":128},[118,90460,90461,90463,90465],{"class":120,"line":1683},[118,90462,52410],{"class":128},[118,90464,5131],{"class":51293},[118,90466,51300],{"class":128},[118,90468,90469,90471,90473],{"class":120,"line":1697},[118,90470,51778],{"class":128},[118,90472,51327],{"class":51293},[118,90474,51300],{"class":128},[118,90476,90477],{"class":120,"line":1702},[118,90478,2404],{"emptyLinePlaceholder":45},[118,90480,90481,90483,90485],{"class":120,"line":1731},[118,90482,1038],{"class":128},[118,90484,51793],{"class":51293},[118,90486,51300],{"class":128},[118,90488,90489,90491,90493,90495,90497,90499,90501,90503],{"class":120,"line":1736},[118,90490,52137],{"class":128},[118,90492,51604],{"class":51293},[118,90494,53479],{"class":1967},[118,90496,174],{"class":128},[118,90498,53484],{"class":233},[118,90500,55307],{"class":128},[118,90502,51604],{"class":51293},[118,90504,51300],{"class":128},[118,90506,90507,90509,90511,90513,90515,90517,90519,90521],{"class":120,"line":1753},[118,90508,52137],{"class":128},[118,90510,51806],{"class":51293},[118,90512,55232],{"class":1967},[118,90514,174],{"class":128},[118,90516,88267],{"class":233},[118,90518,55307],{"class":128},[118,90520,51806],{"class":51293},[118,90522,51300],{"class":128},[118,90524,90525,90527,90529],{"class":120,"line":1758},[118,90526,52137],{"class":128},[118,90528,51806],{"class":51293},[118,90530,51300],{"class":128},[118,90532,90533,90535,90537,90539,90541,90543,90545,90547],{"class":120,"line":1763},[118,90534,11226],{"class":124},[118,90536,86926],{"class":177},[118,90538,13569],{"class":124},[118,90540,54389],{"class":128},[118,90542,54392],{"class":1967},[118,90544,129],{"class":128},[118,90546,90139],{"class":233},[118,90548,135],{"class":128},[118,90550,90551,90553,90555,90557],{"class":120,"line":1768},[118,90552,52212],{"class":124},[118,90554,9443],{"class":128},[118,90556,174],{"class":124},[118,90558,47326],{"class":177},[118,90560,90561,90563,90565],{"class":120,"line":1782},[118,90562,70077],{"class":124},[118,90564,90158],{"class":1967},[118,90566,10858],{"class":128},[118,90568,90569,90571,90573,90575],{"class":120,"line":1787},[118,90570,90165],{"class":128},[118,90572,174],{"class":124},[118,90574,3036],{"class":128},[118,90576,2706],{"class":124},[118,90578,90579],{"class":120,"line":2581},[118,90580,90176],{"class":187},[118,90582,90583],{"class":120,"line":2595},[118,90584,2191],{"class":128},[118,90586,90587],{"class":120,"line":2603},[118,90588,90185],{"class":187},[118,90590,90591],{"class":120,"line":2608},[118,90592,90593],{"class":187},"    \u002F\u002F 手写防抖函数\n",[118,90595,90596],{"class":120,"line":2614},[118,90597,90598],{"class":187},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[118,90600,90601],{"class":120,"line":2620},[118,90602,90603],{"class":187},"    \u002F\u002F 1.声明定时器变量\n",[118,90605,90606],{"class":120,"line":2625},[118,90607,90608],{"class":187},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[118,90610,90611],{"class":120,"line":7953},[118,90612,90613],{"class":187},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[118,90615,90616],{"class":120,"line":7977},[118,90617,90618],{"class":187},"    \u002F\u002F 4.定时器里面写函数调用\n",[118,90620,90621,90623,90626,90628,90631,90633,90635],{"class":120,"line":7982},[118,90622,70077],{"class":124},[118,90624,90625],{"class":1967}," debounce",[118,90627,129],{"class":128},[118,90629,90630],{"class":5221},"fn",[118,90632,12440],{"class":128},[118,90634,848],{"class":5221},[118,90636,12447],{"class":128},[118,90638,90639,90641],{"class":120,"line":7988},[118,90640,79765],{"class":124},[118,90642,90643],{"class":128}," timer\n",[118,90645,90646],{"class":120,"line":8015},[118,90647,90648],{"class":187},"      \u002F\u002F return 返回一个匿名函数\n",[118,90650,90651,90653,90655],{"class":120,"line":8020},[118,90652,73975],{"class":124},[118,90654,58911],{"class":124},[118,90656,54445],{"class":128},[118,90658,90659],{"class":120,"line":8026},[118,90660,90661],{"class":187},"        \u002F\u002F 这里边写第二三四步\n",[118,90663,90664,90666,90669,90672],{"class":120,"line":8038},[118,90665,2501],{"class":124},[118,90667,90668],{"class":128}," (timer) ",[118,90670,90671],{"class":1967},"clearTimeout",[118,90673,90674],{"class":128},"(timer)\n",[118,90676,90677,90680,90682,90685,90687,90689],{"class":120,"line":8050},[118,90678,90679],{"class":128},"        timer ",[118,90681,174],{"class":124},[118,90683,90684],{"class":1967}," setTimeout",[118,90686,129],{"class":128},[118,90688,54442],{"class":124},[118,90690,54445],{"class":128},[118,90692,90693,90696,90698],{"class":120,"line":8062},[118,90694,90695],{"class":1967},"          fn",[118,90697,13055],{"class":128},[118,90699,90700],{"class":187},"\u002F\u002F加小括号调用fn }, t)\n",[118,90702,90703],{"class":120,"line":9721},[118,90704,90705],{"class":128},"        }, t)\n",[118,90707,90708],{"class":120,"line":9746},[118,90709,52391],{"class":128},[118,90711,90712],{"class":120,"line":9769},[118,90713,2191],{"class":128},[118,90715,90716,90718,90720,90722,90724,90726,90728,90730,90732],{"class":120,"line":9793},[118,90717,90200],{"class":128},[118,90719,57806],{"class":1967},[118,90721,129],{"class":128},[118,90723,90207],{"class":233},[118,90725,12440],{"class":128},[118,90727,90213],{"class":1967},[118,90729,90216],{"class":128},[118,90731,65067],{"class":177},[118,90733,30490],{"class":128},[118,90735,90736],{"class":120,"line":9798},[118,90737,2404],{"emptyLinePlaceholder":45},[118,90739,90740],{"class":120,"line":9803},[118,90741,90742],{"class":187},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[118,90744,90745],{"class":120,"line":9808},[118,90746,90747],{"class":187},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[118,90749,90750],{"class":120,"line":9817},[118,90751,90752],{"class":187},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[118,90754,90755],{"class":120,"line":9822},[118,90756,90757],{"class":187},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[118,90759,90760,90762,90764],{"class":120,"line":9828},[118,90761,52410],{"class":128},[118,90763,51806],{"class":51293},[118,90765,51300],{"class":128},[118,90767,90768,90770,90772],{"class":120,"line":9849},[118,90769,51778],{"class":128},[118,90771,51793],{"class":51293},[118,90773,51300],{"class":128},[118,90775,90776],{"class":120,"line":9855},[118,90777,2404],{"emptyLinePlaceholder":45},[118,90779,90780,90782,90784],{"class":120,"line":9869},[118,90781,51778],{"class":128},[118,90783,50628],{"class":51293},[118,90785,51300],{"class":128},[89,90787,90789],{"id":90788},"_4172-节流","4.17.2 节流",[15,90791,90792],{},[1466,90793],{"alt":39,"src":90794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[15,90796,90797],{},[1466,90798],{"alt":39,"src":90799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[15,90801,90802],{},[278,90803,90804],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[15,90806,90807],{},"实现方式：",[1135,90809,90810],{},[75,90811,90812],{},"lodash 提供的节流函数来处理",[15,90814,90815],{},"_.throttle(func,[wait=0],[options=])",[15,90817,90818],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[109,90820,90822],{"className":50626,"code":90821,"language":50628,"meta":39,"style":39},"\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",[115,90823,90824,90834,90848,90852,90860,90874,90894,90906,90914,90920,90930,90942,90954,90964,90976,90986,90996,91008,91012,91020,91028,91032,91040,91058,91076,91084,91102,91112,91120,91130,91134,91138,91142,91147,91152,91173,91181,91189,91193],{"__ignoreMap":39},[118,90825,90826,90828,90830,90832],{"class":120,"line":121},[118,90827,51290],{"class":128},[118,90829,51294],{"class":51293},[118,90831,51297],{"class":1967},[118,90833,51300],{"class":128},[118,90835,90836,90838,90840,90842,90844,90846],{"class":120,"line":40},[118,90837,1038],{"class":128},[118,90839,50628],{"class":51293},[118,90841,51309],{"class":1967},[118,90843,174],{"class":128},[118,90845,51314],{"class":233},[118,90847,51300],{"class":128},[118,90849,90850],{"class":120,"line":1183},[118,90851,2404],{"emptyLinePlaceholder":45},[118,90853,90854,90856,90858],{"class":120,"line":1198},[118,90855,1038],{"class":128},[118,90857,51327],{"class":51293},[118,90859,51300],{"class":128},[118,90861,90862,90864,90866,90868,90870,90872],{"class":120,"line":1204},[118,90863,52137],{"class":128},[118,90865,51337],{"class":51293},[118,90867,51340],{"class":1967},[118,90869,174],{"class":128},[118,90871,51345],{"class":233},[118,90873,51300],{"class":128},[118,90875,90876,90878,90880,90882,90884,90886,90888,90890,90892],{"class":120,"line":1218},[118,90877,52137],{"class":128},[118,90879,51337],{"class":51293},[118,90881,14925],{"class":1967},[118,90883,174],{"class":128},[118,90885,51384],{"class":233},[118,90887,51364],{"class":1967},[118,90889,174],{"class":128},[118,90891,51391],{"class":233},[118,90893,51300],{"class":128},[118,90895,90896,90898,90900,90902,90904],{"class":120,"line":1224},[118,90897,52137],{"class":128},[118,90899,51400],{"class":51293},[118,90901,51403],{"class":128},[118,90903,51400],{"class":51293},[118,90905,51300],{"class":128},[118,90907,90908,90910,90912],{"class":120,"line":1315},[118,90909,52137],{"class":128},[118,90911,5131],{"class":51293},[118,90913,51300],{"class":128},[118,90915,90916,90918],{"class":120,"line":1321},[118,90917,54745],{"class":1967},[118,90919,15577],{"class":128},[118,90921,90922,90924,90926,90928],{"class":120,"line":1333},[118,90923,72589],{"class":177},[118,90925,51430],{"class":128},[118,90927,60498],{"class":177},[118,90929,1294],{"class":128},[118,90931,90932,90934,90936,90938,90940],{"class":120,"line":1616},[118,90933,54764],{"class":177},[118,90935,51430],{"class":128},[118,90937,1726],{"class":177},[118,90939,51485],{"class":124},[118,90941,1294],{"class":128},[118,90943,90944,90946,90948,90950,90952],{"class":120,"line":1621},[118,90945,54778],{"class":177},[118,90947,51430],{"class":128},[118,90949,1726],{"class":177},[118,90951,51485],{"class":124},[118,90953,1294],{"class":128},[118,90955,90956,90958,90960,90962],{"class":120,"line":1627},[118,90957,54877],{"class":177},[118,90959,51430],{"class":128},[118,90961,89999],{"class":177},[118,90963,1294],{"class":128},[118,90965,90966,90968,90970,90972,90974],{"class":120,"line":1632},[118,90967,54915],{"class":177},[118,90969,51430],{"class":128},[118,90971,953],{"class":177},[118,90973,51485],{"class":124},[118,90975,1294],{"class":128},[118,90977,90978,90980,90982,90984],{"class":120,"line":1646},[118,90979,57409],{"class":177},[118,90981,51430],{"class":128},[118,90983,60835],{"class":177},[118,90985,1294],{"class":128},[118,90987,90988,90990,90992,90994],{"class":120,"line":1651},[118,90989,57279],{"class":177},[118,90991,51430],{"class":128},[118,90993,51585],{"class":177},[118,90995,1294],{"class":128},[118,90997,90998,91000,91002,91004,91006],{"class":120,"line":1657},[118,90999,90038],{"class":177},[118,91001,51430],{"class":128},[118,91003,447],{"class":177},[118,91005,51485],{"class":124},[118,91007,1294],{"class":128},[118,91009,91010],{"class":120,"line":1678},[118,91011,2191],{"class":128},[118,91013,91014,91016,91018],{"class":120,"line":1683},[118,91015,52410],{"class":128},[118,91017,5131],{"class":51293},[118,91019,51300],{"class":128},[118,91021,91022,91024,91026],{"class":120,"line":1697},[118,91023,51778],{"class":128},[118,91025,51327],{"class":51293},[118,91027,51300],{"class":128},[118,91029,91030],{"class":120,"line":1702},[118,91031,2404],{"emptyLinePlaceholder":45},[118,91033,91034,91036,91038],{"class":120,"line":1731},[118,91035,1038],{"class":128},[118,91037,51793],{"class":51293},[118,91039,51300],{"class":128},[118,91041,91042,91044,91046,91048,91050,91052,91054,91056],{"class":120,"line":1736},[118,91043,52137],{"class":128},[118,91045,51604],{"class":51293},[118,91047,53479],{"class":1967},[118,91049,174],{"class":128},[118,91051,53484],{"class":233},[118,91053,55307],{"class":128},[118,91055,51604],{"class":51293},[118,91057,51300],{"class":128},[118,91059,91060,91062,91064,91066,91068,91070,91072,91074],{"class":120,"line":1753},[118,91061,52137],{"class":128},[118,91063,51806],{"class":51293},[118,91065,55232],{"class":1967},[118,91067,174],{"class":128},[118,91069,88267],{"class":233},[118,91071,55307],{"class":128},[118,91073,51806],{"class":51293},[118,91075,51300],{"class":128},[118,91077,91078,91080,91082],{"class":120,"line":1758},[118,91079,52137],{"class":128},[118,91081,51806],{"class":51293},[118,91083,51300],{"class":128},[118,91085,91086,91088,91090,91092,91094,91096,91098,91100],{"class":120,"line":1763},[118,91087,11226],{"class":124},[118,91089,86926],{"class":177},[118,91091,13569],{"class":124},[118,91093,54389],{"class":128},[118,91095,54392],{"class":1967},[118,91097,129],{"class":128},[118,91099,90139],{"class":233},[118,91101,135],{"class":128},[118,91103,91104,91106,91108,91110],{"class":120,"line":1768},[118,91105,52212],{"class":124},[118,91107,9443],{"class":128},[118,91109,174],{"class":124},[118,91111,47326],{"class":177},[118,91113,91114,91116,91118],{"class":120,"line":1782},[118,91115,70077],{"class":124},[118,91117,90158],{"class":1967},[118,91119,10858],{"class":128},[118,91121,91122,91124,91126,91128],{"class":120,"line":1787},[118,91123,90165],{"class":128},[118,91125,174],{"class":124},[118,91127,3036],{"class":128},[118,91129,2706],{"class":124},[118,91131,91132],{"class":120,"line":2581},[118,91133,90176],{"class":187},[118,91135,91136],{"class":120,"line":2595},[118,91137,2191],{"class":128},[118,91139,91140],{"class":120,"line":2603},[118,91141,90185],{"class":187},[118,91143,91144],{"class":120,"line":2608},[118,91145,91146],{"class":187},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[118,91148,91149],{"class":120,"line":2614},[118,91150,91151],{"class":187},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[118,91153,91154,91156,91158,91160,91162,91164,91167,91169,91171],{"class":120,"line":2620},[118,91155,90200],{"class":128},[118,91157,57806],{"class":1967},[118,91159,129],{"class":128},[118,91161,90207],{"class":233},[118,91163,90210],{"class":128},[118,91165,91166],{"class":1967},"throttle",[118,91168,90216],{"class":128},[118,91170,65067],{"class":177},[118,91172,30490],{"class":128},[118,91174,91175,91177,91179],{"class":120,"line":2625},[118,91176,52410],{"class":128},[118,91178,51806],{"class":51293},[118,91180,51300],{"class":128},[118,91182,91183,91185,91187],{"class":120,"line":7953},[118,91184,51778],{"class":128},[118,91186,51793],{"class":51293},[118,91188,51300],{"class":128},[118,91190,91191],{"class":120,"line":7977},[118,91192,2404],{"emptyLinePlaceholder":45},[118,91194,91195,91197,91199],{"class":120,"line":7982},[118,91196,51778],{"class":128},[118,91198,50628],{"class":51293},[118,91200,51300],{"class":128},[1135,91202,91203],{},[75,91204,91205],{},"手写一个节流函数来处理",[15,91207,70945],{},[15,91209,90259],{},[15,91211,91212],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[15,91214,91215],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[109,91217,91219],{"className":50626,"code":91218,"language":50628,"meta":39,"style":39},"\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",[115,91220,91221,91231,91245,91249,91257,91271,91291,91303,91311,91317,91327,91339,91351,91361,91373,91383,91393,91405,91409,91417,91425,91429,91437,91455,91473,91481,91499,91509,91517,91527,91531,91535,91539,91544,91549,91554,91559,91564,91569,91586,91592,91600,91611,91626,91633,91638,91643,91653,91658,91663,91668,91672,91676,91680,91700,91708,91716,91720],{"__ignoreMap":39},[118,91222,91223,91225,91227,91229],{"class":120,"line":121},[118,91224,51290],{"class":128},[118,91226,51294],{"class":51293},[118,91228,51297],{"class":1967},[118,91230,51300],{"class":128},[118,91232,91233,91235,91237,91239,91241,91243],{"class":120,"line":40},[118,91234,1038],{"class":128},[118,91236,50628],{"class":51293},[118,91238,51309],{"class":1967},[118,91240,174],{"class":128},[118,91242,51314],{"class":233},[118,91244,51300],{"class":128},[118,91246,91247],{"class":120,"line":1183},[118,91248,2404],{"emptyLinePlaceholder":45},[118,91250,91251,91253,91255],{"class":120,"line":1198},[118,91252,1038],{"class":128},[118,91254,51327],{"class":51293},[118,91256,51300],{"class":128},[118,91258,91259,91261,91263,91265,91267,91269],{"class":120,"line":1204},[118,91260,52137],{"class":128},[118,91262,51337],{"class":51293},[118,91264,51340],{"class":1967},[118,91266,174],{"class":128},[118,91268,51345],{"class":233},[118,91270,51300],{"class":128},[118,91272,91273,91275,91277,91279,91281,91283,91285,91287,91289],{"class":120,"line":1218},[118,91274,52137],{"class":128},[118,91276,51337],{"class":51293},[118,91278,14925],{"class":1967},[118,91280,174],{"class":128},[118,91282,51384],{"class":233},[118,91284,51364],{"class":1967},[118,91286,174],{"class":128},[118,91288,51391],{"class":233},[118,91290,51300],{"class":128},[118,91292,91293,91295,91297,91299,91301],{"class":120,"line":1224},[118,91294,52137],{"class":128},[118,91296,51400],{"class":51293},[118,91298,51403],{"class":128},[118,91300,51400],{"class":51293},[118,91302,51300],{"class":128},[118,91304,91305,91307,91309],{"class":120,"line":1315},[118,91306,52137],{"class":128},[118,91308,5131],{"class":51293},[118,91310,51300],{"class":128},[118,91312,91313,91315],{"class":120,"line":1321},[118,91314,54745],{"class":1967},[118,91316,15577],{"class":128},[118,91318,91319,91321,91323,91325],{"class":120,"line":1333},[118,91320,72589],{"class":177},[118,91322,51430],{"class":128},[118,91324,60498],{"class":177},[118,91326,1294],{"class":128},[118,91328,91329,91331,91333,91335,91337],{"class":120,"line":1616},[118,91330,54764],{"class":177},[118,91332,51430],{"class":128},[118,91334,1726],{"class":177},[118,91336,51485],{"class":124},[118,91338,1294],{"class":128},[118,91340,91341,91343,91345,91347,91349],{"class":120,"line":1621},[118,91342,54778],{"class":177},[118,91344,51430],{"class":128},[118,91346,1726],{"class":177},[118,91348,51485],{"class":124},[118,91350,1294],{"class":128},[118,91352,91353,91355,91357,91359],{"class":120,"line":1627},[118,91354,54877],{"class":177},[118,91356,51430],{"class":128},[118,91358,89999],{"class":177},[118,91360,1294],{"class":128},[118,91362,91363,91365,91367,91369,91371],{"class":120,"line":1632},[118,91364,54915],{"class":177},[118,91366,51430],{"class":128},[118,91368,953],{"class":177},[118,91370,51485],{"class":124},[118,91372,1294],{"class":128},[118,91374,91375,91377,91379,91381],{"class":120,"line":1646},[118,91376,57409],{"class":177},[118,91378,51430],{"class":128},[118,91380,60835],{"class":177},[118,91382,1294],{"class":128},[118,91384,91385,91387,91389,91391],{"class":120,"line":1651},[118,91386,57279],{"class":177},[118,91388,51430],{"class":128},[118,91390,51585],{"class":177},[118,91392,1294],{"class":128},[118,91394,91395,91397,91399,91401,91403],{"class":120,"line":1657},[118,91396,90038],{"class":177},[118,91398,51430],{"class":128},[118,91400,447],{"class":177},[118,91402,51485],{"class":124},[118,91404,1294],{"class":128},[118,91406,91407],{"class":120,"line":1678},[118,91408,2191],{"class":128},[118,91410,91411,91413,91415],{"class":120,"line":1683},[118,91412,52410],{"class":128},[118,91414,5131],{"class":51293},[118,91416,51300],{"class":128},[118,91418,91419,91421,91423],{"class":120,"line":1697},[118,91420,51778],{"class":128},[118,91422,51327],{"class":51293},[118,91424,51300],{"class":128},[118,91426,91427],{"class":120,"line":1702},[118,91428,2404],{"emptyLinePlaceholder":45},[118,91430,91431,91433,91435],{"class":120,"line":1731},[118,91432,1038],{"class":128},[118,91434,51793],{"class":51293},[118,91436,51300],{"class":128},[118,91438,91439,91441,91443,91445,91447,91449,91451,91453],{"class":120,"line":1736},[118,91440,52137],{"class":128},[118,91442,51604],{"class":51293},[118,91444,53479],{"class":1967},[118,91446,174],{"class":128},[118,91448,53484],{"class":233},[118,91450,55307],{"class":128},[118,91452,51604],{"class":51293},[118,91454,51300],{"class":128},[118,91456,91457,91459,91461,91463,91465,91467,91469,91471],{"class":120,"line":1753},[118,91458,52137],{"class":128},[118,91460,51806],{"class":51293},[118,91462,55232],{"class":1967},[118,91464,174],{"class":128},[118,91466,88267],{"class":233},[118,91468,55307],{"class":128},[118,91470,51806],{"class":51293},[118,91472,51300],{"class":128},[118,91474,91475,91477,91479],{"class":120,"line":1758},[118,91476,52137],{"class":128},[118,91478,51806],{"class":51293},[118,91480,51300],{"class":128},[118,91482,91483,91485,91487,91489,91491,91493,91495,91497],{"class":120,"line":1763},[118,91484,11226],{"class":124},[118,91486,86926],{"class":177},[118,91488,13569],{"class":124},[118,91490,54389],{"class":128},[118,91492,54392],{"class":1967},[118,91494,129],{"class":128},[118,91496,90139],{"class":233},[118,91498,135],{"class":128},[118,91500,91501,91503,91505,91507],{"class":120,"line":1768},[118,91502,52212],{"class":124},[118,91504,9443],{"class":128},[118,91506,174],{"class":124},[118,91508,47326],{"class":177},[118,91510,91511,91513,91515],{"class":120,"line":1782},[118,91512,70077],{"class":124},[118,91514,90158],{"class":1967},[118,91516,10858],{"class":128},[118,91518,91519,91521,91523,91525],{"class":120,"line":1787},[118,91520,90165],{"class":128},[118,91522,174],{"class":124},[118,91524,3036],{"class":128},[118,91526,2706],{"class":124},[118,91528,91529],{"class":120,"line":2581},[118,91530,90176],{"class":187},[118,91532,91533],{"class":120,"line":2595},[118,91534,2191],{"class":128},[118,91536,91537],{"class":120,"line":2603},[118,91538,90185],{"class":187},[118,91540,91541],{"class":120,"line":2608},[118,91542,91543],{"class":187},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[118,91545,91546],{"class":120,"line":2614},[118,91547,91548],{"class":187},"    \u002F\u002F 1.声明一个定时器变量\n",[118,91550,91551],{"class":120,"line":2620},[118,91552,91553],{"class":187},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[118,91555,91556],{"class":120,"line":2625},[118,91557,91558],{"class":187},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[118,91560,91561],{"class":120,"line":7953},[118,91562,91563],{"class":187},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[118,91565,91566],{"class":120,"line":7977},[118,91567,91568],{"class":187},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[118,91570,91571,91573,91576,91578,91580,91582,91584],{"class":120,"line":7982},[118,91572,70077],{"class":124},[118,91574,91575],{"class":1967}," throttle",[118,91577,129],{"class":128},[118,91579,90630],{"class":5221},[118,91581,12440],{"class":128},[118,91583,848],{"class":5221},[118,91585,12447],{"class":128},[118,91587,91588,91590],{"class":120,"line":7988},[118,91589,79765],{"class":124},[118,91591,90643],{"class":128},[118,91593,91594,91596,91598],{"class":120,"line":8015},[118,91595,73975],{"class":124},[118,91597,58911],{"class":124},[118,91599,54445],{"class":128},[118,91601,91602,91604,91606,91608],{"class":120,"line":8020},[118,91603,2501],{"class":124},[118,91605,1662],{"class":128},[118,91607,355],{"class":124},[118,91609,91610],{"class":128},"timer) {\n",[118,91612,91613,91616,91618,91620,91622,91624],{"class":120,"line":8026},[118,91614,91615],{"class":128},"          timer ",[118,91617,174],{"class":124},[118,91619,90684],{"class":1967},[118,91621,129],{"class":128},[118,91623,54442],{"class":124},[118,91625,54445],{"class":128},[118,91627,91628,91631],{"class":120,"line":8038},[118,91629,91630],{"class":1967},"            fn",[118,91632,1980],{"class":128},[118,91634,91635],{"class":120,"line":8050},[118,91636,91637],{"class":187},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[118,91639,91640],{"class":120,"line":8062},[118,91641,91642],{"class":187},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[118,91644,91645,91648,91650],{"class":120,"line":9721},[118,91646,91647],{"class":128},"            timer ",[118,91649,174],{"class":124},[118,91651,91652],{"class":177}," null\n",[118,91654,91655],{"class":120,"line":9746},[118,91656,91657],{"class":187},"            \u002F\u002F 不能用clearTimeout(timer)\n",[118,91659,91660],{"class":120,"line":9769},[118,91661,91662],{"class":187},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[118,91664,91665],{"class":120,"line":9793},[118,91666,91667],{"class":128},"          }, t)\n",[118,91669,91670],{"class":120,"line":9798},[118,91671,2533],{"class":128},[118,91673,91674],{"class":120,"line":9803},[118,91675,52391],{"class":128},[118,91677,91678],{"class":120,"line":9808},[118,91679,2191],{"class":128},[118,91681,91682,91684,91686,91688,91690,91692,91694,91696,91698],{"class":120,"line":9817},[118,91683,90200],{"class":128},[118,91685,57806],{"class":1967},[118,91687,129],{"class":128},[118,91689,90207],{"class":233},[118,91691,12440],{"class":128},[118,91693,91166],{"class":1967},[118,91695,90216],{"class":128},[118,91697,65067],{"class":177},[118,91699,30490],{"class":128},[118,91701,91702,91704,91706],{"class":120,"line":9822},[118,91703,52410],{"class":128},[118,91705,51806],{"class":51293},[118,91707,51300],{"class":128},[118,91709,91710,91712,91714],{"class":120,"line":9828},[118,91711,51778],{"class":128},[118,91713,51793],{"class":51293},[118,91715,51300],{"class":128},[118,91717,91718],{"class":120,"line":9849},[118,91719,2404],{"emptyLinePlaceholder":45},[118,91721,91722,91724,91726],{"class":120,"line":9855},[118,91723,51778],{"class":128},[118,91725,50628],{"class":51293},[118,91727,51300],{"class":128},[89,91729,91731],{"id":91730},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[109,91733,91735],{"className":53060,"code":91734,"language":53062,"meta":39,"style":39},"\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",[115,91736,91737,91745,91753,91758,91763,91768,91773,91777,91785],{"__ignoreMap":39},[118,91738,91739,91741,91743],{"class":120,"line":121},[118,91740,1038],{"class":128},[118,91742,51793],{"class":51293},[118,91744,51300],{"class":128},[118,91746,91747,91749,91751],{"class":120,"line":40},[118,91748,52137],{"class":128},[118,91750,51806],{"class":51293},[118,91752,51300],{"class":128},[118,91754,91755],{"class":120,"line":1183},[118,91756,91757],{"class":128},"    let timer = null\n",[118,91759,91760],{"class":120,"line":1198},[118,91761,91762],{"class":128},"    timer = setTimeout(() => {\n",[118,91764,91765],{"class":120,"line":1204},[118,91766,91767],{"class":128},"      clearTimeout(timer)\n",[118,91769,91770],{"class":120,"line":1218},[118,91771,91772],{"class":128},"      console.log(timer)\n",[118,91774,91775],{"class":120,"line":1224},[118,91776,60218],{"class":128},[118,91778,91779,91781,91783],{"class":120,"line":1315},[118,91780,52410],{"class":128},[118,91782,51806],{"class":51293},[118,91784,51300],{"class":128},[118,91786,91787,91789,91791],{"class":120,"line":1321},[118,91788,51778],{"class":128},[118,91790,51793],{"class":51293},[118,91792,51300],{"class":128},[15,91794,91795],{},"输出为1",[15,91797,91798],{},"在开启的定时器里边写清除定时器",[15,91800,91801],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[89,91803,91805],{"id":91804},"_4174-节流综合案例","4.17.4 节流综合案例",[15,91807,91808],{},"页面打开，可以记录上一次的视频播放位置",[15,91810,91811],{},[1466,91812],{"alt":39,"src":91813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[15,91815,91816],{},[1466,91817],{"alt":39,"src":91818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[109,91820,91822],{"className":50626,"code":91821,"language":50628,"meta":39,"style":39},"\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",[115,91823,91824,91834,91848,91852,91860,91874,91894,91914,91936,91949,91957,91963,91973,91983,91993,91997,92001,92008,92021,92033,92037,92041,92051,92063,92077,92081,92085,92092,92102,92115,92127,92137,92147,92163,92175,92179,92183,92191,92201,92213,92223,92233,92243,92247,92251,92261,92272,92276,92284,92292,92296,92304,92319,92334,92349,92370,92378,92386,92401,92423,92431,92446,92472,92498,92524,92532,92540,92559,92567,92572,92591,92596,92614,92619,92624,92632,92637,92651,92659,92664,92681,92685,92690,92712,92716,92724,92732,92736],{"__ignoreMap":39},[118,91825,91826,91828,91830,91832],{"class":120,"line":121},[118,91827,51290],{"class":128},[118,91829,51294],{"class":51293},[118,91831,51297],{"class":1967},[118,91833,51300],{"class":128},[118,91835,91836,91838,91840,91842,91844,91846],{"class":120,"line":40},[118,91837,1038],{"class":128},[118,91839,50628],{"class":51293},[118,91841,51309],{"class":1967},[118,91843,174],{"class":128},[118,91845,51314],{"class":233},[118,91847,51300],{"class":128},[118,91849,91850],{"class":120,"line":1183},[118,91851,2404],{"emptyLinePlaceholder":45},[118,91853,91854,91856,91858],{"class":120,"line":1198},[118,91855,1038],{"class":128},[118,91857,51327],{"class":51293},[118,91859,51300],{"class":128},[118,91861,91862,91864,91866,91868,91870,91872],{"class":120,"line":1204},[118,91863,52137],{"class":128},[118,91865,51337],{"class":51293},[118,91867,51340],{"class":1967},[118,91869,174],{"class":128},[118,91871,51345],{"class":233},[118,91873,59120],{"class":128},[118,91875,91876,91878,91880,91882,91884,91886,91888,91890,91892],{"class":120,"line":1218},[118,91877,52137],{"class":128},[118,91879,51337],{"class":51293},[118,91881,51356],{"class":1967},[118,91883,174],{"class":128},[118,91885,51361],{"class":233},[118,91887,51364],{"class":1967},[118,91889,174],{"class":128},[118,91891,51369],{"class":233},[118,91893,59120],{"class":128},[118,91895,91896,91898,91900,91902,91904,91906,91908,91910,91912],{"class":120,"line":1224},[118,91897,52137],{"class":128},[118,91899,51337],{"class":51293},[118,91901,14925],{"class":1967},[118,91903,174],{"class":128},[118,91905,51384],{"class":233},[118,91907,51364],{"class":1967},[118,91909,174],{"class":128},[118,91911,51391],{"class":233},[118,91913,59120],{"class":128},[118,91915,91916,91918,91920,91922,91924,91927,91929,91931,91934],{"class":120,"line":1315},[118,91917,52137],{"class":128},[118,91919,51337],{"class":51293},[118,91921,14925],{"class":1967},[118,91923,174],{"class":128},[118,91925,91926],{"class":233},"\"referrer\"",[118,91928,51364],{"class":1967},[118,91930,174],{"class":128},[118,91932,91933],{"class":233},"\"never\"",[118,91935,59120],{"class":128},[118,91937,91938,91940,91942,91945,91947],{"class":120,"line":1321},[118,91939,52137],{"class":128},[118,91941,51400],{"class":51293},[118,91943,91944],{"class":128},">综合案例\u003C\u002F",[118,91946,51400],{"class":51293},[118,91948,51300],{"class":128},[118,91950,91951,91953,91955],{"class":120,"line":1333},[118,91952,52137],{"class":128},[118,91954,5131],{"class":51293},[118,91956,51300],{"class":128},[118,91958,91959,91961],{"class":120,"line":1616},[118,91960,6408],{"class":51293},[118,91962,15577],{"class":128},[118,91964,91965,91967,91969,91971],{"class":120,"line":1621},[118,91966,54688],{"class":177},[118,91968,51430],{"class":128},[118,91970,320],{"class":177},[118,91972,1294],{"class":128},[118,91974,91975,91977,91979,91981],{"class":120,"line":1627},[118,91976,54699],{"class":177},[118,91978,51430],{"class":128},[118,91980,320],{"class":177},[118,91982,1294],{"class":128},[118,91984,91985,91987,91989,91991],{"class":120,"line":1632},[118,91986,72589],{"class":177},[118,91988,51430],{"class":128},[118,91990,60498],{"class":177},[118,91992,1294],{"class":128},[118,91994,91995],{"class":120,"line":1646},[118,91996,2191],{"class":128},[118,91998,91999],{"class":120,"line":1651},[118,92000,2404],{"emptyLinePlaceholder":45},[118,92002,92003,92006],{"class":120,"line":1657},[118,92004,92005],{"class":1967},"    .container",[118,92007,15577],{"class":128},[118,92009,92010,92012,92014,92017,92019],{"class":120,"line":1678},[118,92011,54764],{"class":177},[118,92013,51430],{"class":128},[118,92015,92016],{"class":177},"1200",[118,92018,51485],{"class":124},[118,92020,1294],{"class":128},[118,92022,92023,92025,92027,92029,92031],{"class":120,"line":1683},[118,92024,54699],{"class":177},[118,92026,51430],{"class":128},[118,92028,320],{"class":177},[118,92030,51549],{"class":177},[118,92032,1294],{"class":128},[118,92034,92035],{"class":120,"line":1697},[118,92036,2191],{"class":128},[118,92038,92039],{"class":120,"line":1702},[118,92040,2404],{"emptyLinePlaceholder":45},[118,92042,92043,92046,92049],{"class":120,"line":1731},[118,92044,92045],{"class":1967},"    .video",[118,92047,92048],{"class":51293}," video",[118,92050,15577],{"class":128},[118,92052,92053,92055,92057,92059,92061],{"class":120,"line":1736},[118,92054,54764],{"class":177},[118,92056,51430],{"class":128},[118,92058,439],{"class":177},[118,92060,456],{"class":124},[118,92062,1294],{"class":128},[118,92064,92065,92067,92069,92071,92073,92075],{"class":120,"line":1753},[118,92066,54688],{"class":177},[118,92068,51430],{"class":128},[118,92070,828],{"class":177},[118,92072,51485],{"class":124},[118,92074,4097],{"class":177},[118,92076,1294],{"class":128},[118,92078,92079],{"class":120,"line":1758},[118,92080,2191],{"class":128},[118,92082,92083],{"class":120,"line":1763},[118,92084,2404],{"emptyLinePlaceholder":45},[118,92086,92087,92090],{"class":120,"line":1768},[118,92088,92089],{"class":1967},"    .elevator",[118,92091,15577],{"class":128},[118,92093,92094,92096,92098,92100],{"class":120,"line":1782},[118,92095,54752],{"class":177},[118,92097,51430],{"class":128},[118,92099,86226],{"class":177},[118,92101,1294],{"class":128},[118,92103,92104,92106,92108,92111,92113],{"class":120,"line":1787},[118,92105,54940],{"class":177},[118,92107,51430],{"class":128},[118,92109,92110],{"class":177},"280",[118,92112,51485],{"class":124},[118,92114,1294],{"class":128},[118,92116,92117,92119,92121,92123,92125],{"class":120,"line":2581},[118,92118,86420],{"class":177},[118,92120,51430],{"class":128},[118,92122,828],{"class":177},[118,92124,51485],{"class":124},[118,92126,1294],{"class":128},[118,92128,92129,92131,92133,92135],{"class":120,"line":2595},[118,92130,86233],{"class":177},[118,92132,51430],{"class":128},[118,92134,86238],{"class":177},[118,92136,1294],{"class":128},[118,92138,92139,92141,92143,92145],{"class":120,"line":2603},[118,92140,61714],{"class":177},[118,92142,51430],{"class":128},[118,92144,60835],{"class":177},[118,92146,1294],{"class":128},[118,92148,92149,92151,92153,92155,92157,92159,92161],{"class":120,"line":2608},[118,92150,61970],{"class":177},[118,92152,51430],{"class":128},[118,92154,346],{"class":177},[118,92156,51485],{"class":124},[118,92158,51514],{"class":177},[118,92160,62237],{"class":177},[118,92162,1294],{"class":128},[118,92164,92165,92167,92169,92171,92173],{"class":120,"line":2614},[118,92166,54764],{"class":177},[118,92168,51430],{"class":128},[118,92170,1035],{"class":177},[118,92172,51485],{"class":124},[118,92174,1294],{"class":128},[118,92176,92177],{"class":120,"line":2620},[118,92178,2191],{"class":128},[118,92180,92181],{"class":120,"line":2625},[118,92182,2404],{"emptyLinePlaceholder":45},[118,92184,92185,92187,92189],{"class":120,"line":7953},[118,92186,92089],{"class":1967},[118,92188,1402],{"class":51293},[118,92190,15577],{"class":128},[118,92192,92193,92195,92197,92199],{"class":120,"line":7977},[118,92194,55002],{"class":177},[118,92196,51430],{"class":128},[118,92198,60862],{"class":177},[118,92200,1294],{"class":128},[118,92202,92203,92205,92207,92209,92211],{"class":120,"line":7982},[118,92204,54688],{"class":177},[118,92206,51430],{"class":128},[118,92208,574],{"class":177},[118,92210,51485],{"class":124},[118,92212,1294],{"class":128},[118,92214,92215,92217,92219,92221],{"class":120,"line":7988},[118,92216,63963],{"class":177},[118,92218,51430],{"class":128},[118,92220,54730],{"class":177},[118,92222,1294],{"class":128},[118,92224,92225,92227,92229,92231],{"class":120,"line":8015},[118,92226,57279],{"class":177},[118,92228,51430],{"class":128},[118,92230,51585],{"class":177},[118,92232,1294],{"class":128},[118,92234,92235,92237,92239,92241],{"class":120,"line":8020},[118,92236,57409],{"class":177},[118,92238,51430],{"class":128},[118,92240,62063],{"class":177},[118,92242,1294],{"class":128},[118,92244,92245],{"class":120,"line":8026},[118,92246,2191],{"class":128},[118,92248,92249],{"class":120,"line":8038},[118,92250,2404],{"emptyLinePlaceholder":45},[118,92252,92253,92255,92257,92259],{"class":120,"line":8050},[118,92254,92089],{"class":1967},[118,92256,1402],{"class":51293},[118,92258,64017],{"class":1967},[118,92260,15577],{"class":128},[118,92262,92263,92265,92267,92270],{"class":120,"line":8062},[118,92264,57409],{"class":177},[118,92266,51430],{"class":128},[118,92268,92269],{"class":177},"#1286ff",[118,92271,1294],{"class":128},[118,92273,92274],{"class":120,"line":9721},[118,92275,2191],{"class":128},[118,92277,92278,92280,92282],{"class":120,"line":9746},[118,92279,52410],{"class":128},[118,92281,5131],{"class":51293},[118,92283,51300],{"class":128},[118,92285,92286,92288,92290],{"class":120,"line":9769},[118,92287,51778],{"class":128},[118,92289,51327],{"class":51293},[118,92291,51300],{"class":128},[118,92293,92294],{"class":120,"line":9793},[118,92295,2404],{"emptyLinePlaceholder":45},[118,92297,92298,92300,92302],{"class":120,"line":9798},[118,92299,1038],{"class":128},[118,92301,51793],{"class":51293},[118,92303,51300],{"class":128},[118,92305,92306,92308,92310,92312,92314,92317],{"class":120,"line":9803},[118,92307,52137],{"class":128},[118,92309,51604],{"class":51293},[118,92311,53479],{"class":1967},[118,92313,174],{"class":128},[118,92315,92316],{"class":233},"\"container\"",[118,92318,51300],{"class":128},[118,92320,92321,92323,92325,92327,92329,92332],{"class":120,"line":9808},[118,92322,51334],{"class":128},[118,92324,51604],{"class":51293},[118,92326,53479],{"class":1967},[118,92328,174],{"class":128},[118,92330,92331],{"class":233},"\"header\"",[118,92333,51300],{"class":128},[118,92335,92336,92338,92340,92342,92344,92347],{"class":120,"line":9817},[118,92337,55227],{"class":128},[118,92339,21],{"class":51293},[118,92341,61050],{"class":1967},[118,92343,174],{"class":128},[118,92345,92346],{"class":233},"\"http:\u002F\u002Fpip.itcast.cn\"",[118,92348,51300],{"class":128},[118,92350,92351,92353,92355,92357,92359,92362,92364,92366,92368],{"class":120,"line":9822},[118,92352,55295],{"class":128},[118,92354,1466],{"class":51293},[118,92356,55232],{"class":1967},[118,92358,174],{"class":128},[118,92360,92361],{"class":233},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[118,92363,55240],{"class":1967},[118,92365,174],{"class":128},[118,92367,7657],{"class":233},[118,92369,59120],{"class":128},[118,92371,92372,92374,92376],{"class":120,"line":9828},[118,92373,55400],{"class":128},[118,92375,21],{"class":51293},[118,92377,51300],{"class":128},[118,92379,92380,92382,92384],{"class":120,"line":9849},[118,92381,51769],{"class":128},[118,92383,51604],{"class":51293},[118,92385,51300],{"class":128},[118,92387,92388,92390,92392,92394,92396,92399],{"class":120,"line":9855},[118,92389,51334],{"class":128},[118,92391,51604],{"class":51293},[118,92393,53479],{"class":1967},[118,92395,174],{"class":128},[118,92397,92398],{"class":233},"\"video\"",[118,92400,51300],{"class":128},[118,92402,92403,92405,92407,92409,92411,92414,92417,92419,92421],{"class":120,"line":9869},[118,92404,55227],{"class":128},[118,92406,28176],{"class":51293},[118,92408,55232],{"class":1967},[118,92410,174],{"class":128},[118,92412,92413],{"class":233},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[118,92415,92416],{"class":1967}," controls",[118,92418,55307],{"class":128},[118,92420,28176],{"class":51293},[118,92422,51300],{"class":128},[118,92424,92425,92427,92429],{"class":120,"line":9875},[118,92426,51769],{"class":128},[118,92428,51604],{"class":51293},[118,92430,51300],{"class":128},[118,92432,92433,92435,92437,92439,92441,92444],{"class":120,"line":9902},[118,92434,51334],{"class":128},[118,92436,51604],{"class":51293},[118,92438,53479],{"class":1967},[118,92440,174],{"class":128},[118,92442,92443],{"class":233},"\"elevator\"",[118,92445,51300],{"class":128},[118,92447,92448,92450,92452,92454,92456,92458,92461,92463,92465,92468,92470],{"class":120,"line":9911},[118,92449,55227],{"class":128},[118,92451,21],{"class":51293},[118,92453,61050],{"class":1967},[118,92455,174],{"class":128},[118,92457,64229],{"class":233},[118,92459,92460],{"class":1967}," data-ref",[118,92462,174],{"class":128},[118,92464,92398],{"class":233},[118,92466,92467],{"class":128},">视频介绍\u003C\u002F",[118,92469,21],{"class":51293},[118,92471,51300],{"class":128},[118,92473,92474,92476,92478,92480,92482,92484,92486,92488,92491,92494,92496],{"class":120,"line":9917},[118,92475,55227],{"class":128},[118,92477,21],{"class":51293},[118,92479,61050],{"class":1967},[118,92481,174],{"class":128},[118,92483,64229],{"class":233},[118,92485,92460],{"class":1967},[118,92487,174],{"class":128},[118,92489,92490],{"class":233},"\"intro\"",[118,92492,92493],{"class":128},">课程简介\u003C\u002F",[118,92495,21],{"class":51293},[118,92497,51300],{"class":128},[118,92499,92500,92502,92504,92506,92508,92510,92512,92514,92517,92520,92522],{"class":120,"line":9925},[118,92501,55227],{"class":128},[118,92503,21],{"class":51293},[118,92505,61050],{"class":1967},[118,92507,174],{"class":128},[118,92509,64229],{"class":233},[118,92511,92460],{"class":1967},[118,92513,174],{"class":128},[118,92515,92516],{"class":233},"\"outline\"",[118,92518,92519],{"class":128},">评论列表\u003C\u002F",[118,92521,21],{"class":51293},[118,92523,51300],{"class":128},[118,92525,92526,92528,92530],{"class":120,"line":9930},[118,92527,51769],{"class":128},[118,92529,51604],{"class":51293},[118,92531,51300],{"class":128},[118,92533,92534,92536,92538],{"class":120,"line":16609},[118,92535,52410],{"class":128},[118,92537,51604],{"class":51293},[118,92539,51300],{"class":128},[118,92541,92542,92544,92546,92548,92550,92553,92555,92557],{"class":120,"line":16615},[118,92543,52137],{"class":128},[118,92545,51806],{"class":51293},[118,92547,55232],{"class":1967},[118,92549,174],{"class":128},[118,92551,92552],{"class":233},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[118,92554,55307],{"class":128},[118,92556,51806],{"class":51293},[118,92558,51300],{"class":128},[118,92560,92561,92563,92565],{"class":120,"line":16638},[118,92562,52137],{"class":128},[118,92564,51806],{"class":51293},[118,92566,51300],{"class":128},[118,92568,92569],{"class":120,"line":16644},[118,92570,92571],{"class":187},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[118,92573,92574,92576,92578,92580,92582,92584,92586,92589],{"class":120,"line":16667},[118,92575,11226],{"class":124},[118,92577,92048],{"class":177},[118,92579,13569],{"class":124},[118,92581,54389],{"class":128},[118,92583,54392],{"class":1967},[118,92585,129],{"class":128},[118,92587,92588],{"class":233},"'video'",[118,92590,135],{"class":128},[118,92592,92593],{"class":120,"line":16681},[118,92594,92595],{"class":187},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[118,92597,92598,92601,92603,92605,92607,92610,92612],{"class":120,"line":16701},[118,92599,92600],{"class":128},"    video.ontimeupdate ",[118,92602,174],{"class":124},[118,92604,88348],{"class":128},[118,92606,91166],{"class":1967},[118,92608,92609],{"class":128},"(() ",[118,92611,84715],{"class":124},[118,92613,15577],{"class":128},[118,92615,92616],{"class":120,"line":16707},[118,92617,92618],{"class":187},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[118,92620,92621],{"class":120,"line":16718},[118,92622,92623],{"class":187},"      \u002F\u002F 控制台输出当前的时间\n",[118,92625,92626,92629],{"class":120,"line":16741},[118,92627,92628],{"class":187},"      \u002F\u002F console.log(video.currentTime)",[118,92630,92631],{"class":187},"  \u002F\u002F获得当前的视频时间\n",[118,92633,92634],{"class":120,"line":16763},[118,92635,92636],{"class":187},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[118,92638,92639,92641,92643,92645,92648],{"class":120,"line":16768},[118,92640,74676],{"class":128},[118,92642,71647],{"class":1967},[118,92644,129],{"class":128},[118,92646,92647],{"class":233},"'currentTime'",[118,92649,92650],{"class":128},", video.currentTime)\n",[118,92652,92653,92655,92657],{"class":120,"line":16774},[118,92654,54528],{"class":128},[118,92656,6415],{"class":177},[118,92658,135],{"class":128},[118,92660,92661],{"class":120,"line":16788},[118,92662,92663],{"class":187},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[118,92665,92666,92669,92672,92674,92677,92679],{"class":120,"line":16801},[118,92667,92668],{"class":128},"    video.",[118,92670,92671],{"class":1967},"onloadeddata",[118,92673,13569],{"class":124},[118,92675,92676],{"class":128}," () ",[118,92678,84715],{"class":124},[118,92680,15577],{"class":128},[118,92682,92683],{"class":120,"line":16806},[118,92684,60005],{"class":187},[118,92686,92687],{"class":120,"line":16820},[118,92688,92689],{"class":187},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[118,92691,92692,92695,92697,92700,92702,92704,92706,92708,92710],{"class":120,"line":16825},[118,92693,92694],{"class":128},"      video.currentTime ",[118,92696,174],{"class":124},[118,92698,92699],{"class":128}," localStorage.",[118,92701,71678],{"class":1967},[118,92703,129],{"class":128},[118,92705,92647],{"class":233},[118,92707,13719],{"class":128},[118,92709,71350],{"class":124},[118,92711,47326],{"class":177},[118,92713,92714],{"class":120,"line":16831},[118,92715,2191],{"class":128},[118,92717,92718,92720,92722],{"class":120,"line":16836},[118,92719,52410],{"class":128},[118,92721,51806],{"class":51293},[118,92723,51300],{"class":128},[118,92725,92726,92728,92730],{"class":120,"line":16850},[118,92727,51778],{"class":128},[118,92729,51793],{"class":51293},[118,92731,51300],{"class":128},[118,92733,92734],{"class":120,"line":16855},[118,92735,2404],{"emptyLinePlaceholder":45},[118,92737,92738,92740,92742],{"class":120,"line":16860},[118,92739,51778],{"class":128},[118,92741,50628],{"class":51293},[118,92743,51300],{"class":128},[5131,92745,92746],{},"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":39,"searchDepth":40,"depth":40,"links":92748},[92749,92754,92758,92759,92760,92765,92770,92771,92772,92773,92780,92785,92786,92796,92800,92801,92805],{"id":76684,"depth":40,"text":76685,"children":92750},[92751,92752,92753],{"id":76688,"depth":1183,"text":76689},{"id":76713,"depth":1183,"text":76714},{"id":76725,"depth":1183,"text":76726},{"id":76737,"depth":40,"text":76738,"children":92755},[92756,92757],{"id":76741,"depth":1183,"text":76742},{"id":76756,"depth":1183,"text":76757},{"id":76808,"depth":40,"text":76809},{"id":76852,"depth":40,"text":76853},{"id":76869,"depth":40,"text":76870,"children":92761},[92762,92763,92764],{"id":76873,"depth":1183,"text":76874},{"id":76886,"depth":1183,"text":76887},{"id":76991,"depth":1183,"text":76992},{"id":77280,"depth":40,"text":77281,"children":92766},[92767,92768,92769],{"id":77284,"depth":1183,"text":77285},{"id":77727,"depth":1183,"text":77728},{"id":78138,"depth":1183,"text":78139},{"id":78201,"depth":40,"text":78202},{"id":78280,"depth":40,"text":78281},{"id":78373,"depth":40,"text":78374},{"id":80218,"depth":40,"text":80219,"children":92774},[92775,92776,92777,92778,92779],{"id":80222,"depth":1183,"text":80223},{"id":80234,"depth":1183,"text":80235},{"id":80453,"depth":1183,"text":80454},{"id":80471,"depth":1183,"text":80472},{"id":80531,"depth":1183,"text":80532},{"id":84799,"depth":40,"text":84800,"children":92781},[92782,92783,92784],{"id":84803,"depth":1183,"text":84804},{"id":84821,"depth":1183,"text":84822},{"id":84847,"depth":1183,"text":84848},{"id":84856,"depth":40,"text":84857},{"id":84878,"depth":40,"text":84879,"children":92787},[92788,92789,92790,92791,92792,92793,92794,92795],{"id":84882,"depth":1183,"text":84883},{"id":85143,"depth":1183,"text":85144},{"id":85329,"depth":1183,"text":85330},{"id":85696,"depth":1183,"text":85697},{"id":85812,"depth":1183,"text":85813},{"id":85848,"depth":1183,"text":85849},{"id":85895,"depth":1183,"text":85896},{"id":85929,"depth":1183,"text":85930},{"id":87292,"depth":40,"text":87293,"children":92797},[92798,92799],{"id":87296,"depth":1183,"text":87297},{"id":87333,"depth":1183,"text":87334},{"id":88688,"depth":40,"text":88689},{"id":89059,"depth":40,"text":89060,"children":92802},[92803,92804],{"id":89063,"depth":1183,"text":89064},{"id":89097,"depth":1183,"text":89098},{"id":89826,"depth":40,"text":89827,"children":92806},[92807,92808,92809,92810],{"id":89830,"depth":1183,"text":89831},{"id":90788,"depth":1183,"text":90789},{"id":91730,"depth":1183,"text":91731},{"id":91804,"depth":1183,"text":91805},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76673,"description":42},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92817,"title":92818,"body":92819,"description":92830,"extension":43,"meta":92831,"navigation":45,"path":92833,"seo":92834,"stem":92835,"__hash__":92836},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92820,"toc":92828},[92821],[15,92822,92823,92824],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[21,92825,92826],{"href":92826,"rel":92827},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25],{"title":39,"searchDepth":40,"depth":40,"links":92829},[],"三件套第三套学习",{"category":92832},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92818,"description":92830},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92838,"title":92839,"body":92840,"description":42,"extension":43,"meta":92945,"navigation":45,"path":92946,"seo":92947,"stem":92948,"__hash__":92949},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92841,"toc":92940},[92842,92849,92852,92855,92858,92862,92871,92874,92877,92881,92890,92893,92897,92900,92920,92923,92937],[15,92843,92844],{},[21,92845,92848],{"href":92846,"rel":92847},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92850,92839],{"id":92851},"_1安装",[15,92853,92854],{},"numpy是科学计算基础库,底层是C语言",[15,92856,92857],{},"三种方式：",[60,92859,92861],{"id":92860},"_11-通过pip安装","1.1 通过pip安装",[109,92863,92865],{"className":30371,"code":92864,"language":30373,"meta":39,"style":39},"pip install numpy\n",[115,92866,92867],{"__ignoreMap":39},[118,92868,92869],{"class":120,"line":121},[118,92870,92864],{"class":128},[15,92872,92873],{},"首选方式，自动处理依赖项",[15,92875,92876],{},"在提示系统命令符中使用cmd",[60,92878,92880],{"id":92879},"_12-通过anaconda安装","1.2 通过Anaconda安装",[109,92882,92884],{"className":30371,"code":92883,"language":30373,"meta":39,"style":39},"conda install numpy\n",[115,92885,92886],{"__ignoreMap":39},[118,92887,92888],{"class":120,"line":121},[118,92889,92883],{"class":128},[15,92891,92892],{},"自动解决环境依赖",[60,92894,92896],{"id":92895},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[15,92898,92899],{},"对于Debian\u002FUbuntu",[109,92901,92903],{"className":30371,"code":92902,"language":30373,"meta":39,"style":39},"sudo apt-get install python3-numpy\n",[115,92904,92905],{"__ignoreMap":39},[118,92906,92907,92910,92912,92915,92917],{"class":120,"line":121},[118,92908,92909],{"class":128},"sudo apt",[118,92911,660],{"class":124},[118,92913,92914],{"class":128},"get install python3",[118,92916,660],{"class":124},[118,92918,92919],{"class":128},"numpy\n",[15,92921,92922],{},"对于Fedora:",[109,92924,92926],{"className":30371,"code":92925,"language":30373,"meta":39,"style":39},"sudo dnf install python3-numpy\n",[115,92927,92928],{"__ignoreMap":39},[118,92929,92930,92933,92935],{"class":120,"line":121},[118,92931,92932],{"class":128},"sudo dnf install python3",[118,92934,660],{"class":124},[118,92936,92919],{"class":128},[5131,92938,92939],{},"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":39,"searchDepth":40,"depth":40,"links":92941},[92942,92943,92944],{"id":92860,"depth":40,"text":92861},{"id":92879,"depth":40,"text":92880},{"id":92895,"depth":40,"text":92896},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92839,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92951,"title":92952,"body":92953,"description":42,"extension":43,"meta":93066,"navigation":45,"path":93067,"seo":93068,"stem":93069,"__hash__":93070},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92954,"toc":93064},[92955,92958,92961,92964,92967,92970,92973,92976,92979,92982,93058,93061],[10,92956,92952],{"id":92957},"_10算数函数",[15,92959,92960],{},"加减乘除运算跟python基础语法没区别",[15,92962,92963],{},"除了python那种方法外还可以使用函数",[15,92965,92966],{},"加：np.add(a,b)",[15,92968,92969],{},"减：np.subtract(a,b)",[15,92971,92972],{},"乘：np.multiply(a,b)",[15,92974,92975],{},"除：np.divide(a,b) == a\u002Fb",[15,92977,92978],{},"取余：np.mod(a,b) == a%b",[15,92980,92981],{},"必须会的用法：",[109,92983,92985],{"className":30371,"code":92984,"language":30373,"meta":39,"style":39},"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",[115,92986,92987,93009,93030,93040,93053],{"__ignoreMap":39},[118,92988,92989,92991,92993,92996,92998,93001,93003,93005,93007],{"class":120,"line":121},[118,92990,21],{"class":128},[118,92992,174],{"class":124},[118,92994,92995],{"class":128},"np.arange(",[118,92997,548],{"class":177},[118,92999,93000],{"class":128},").reshape(",[118,93002,200],{"class":177},[118,93004,506],{"class":128},[118,93006,200],{"class":177},[118,93008,135],{"class":128},[118,93010,93011,93013,93015,93018,93020,93022,93024,93026,93028],{"class":120,"line":40},[118,93012,391],{"class":128},[118,93014,174],{"class":124},[118,93016,93017],{"class":128},"np.array([",[118,93019,574],{"class":177},[118,93021,506],{"class":128},[118,93023,574],{"class":177},[118,93025,506],{"class":128},[118,93027,574],{"class":177},[118,93029,4661],{"class":128},[118,93031,93032,93035,93037],{"class":120,"line":1183},[118,93033,93034],{"class":128},"result",[118,93036,174],{"class":124},[118,93038,93039],{"class":128},"np.empty_like(a)\n",[118,93041,93042,93045,93048,93050],{"class":120,"line":1198},[118,93043,93044],{"class":128},"np.add(a,b,",[118,93046,93047],{"class":5221},"out",[118,93049,174],{"class":124},[118,93051,93052],{"class":128},"result)\n",[118,93054,93055],{"class":120,"line":1204},[118,93056,93057],{"class":128},"result\n",[15,93059,93060],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5131,93062,93063],{},"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":39,"searchDepth":40,"depth":40,"links":93065},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92952,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93072,"title":93073,"body":93074,"description":42,"extension":43,"meta":93836,"navigation":45,"path":93837,"seo":93838,"stem":93839,"__hash__":93840},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93075,"toc":93823},[93076,93079,93082,93085,93089,93128,93132,93176,93236,93240,93243,93282,93285,93330,93334,93370,93374,93443,93447,93511,93515,93518,93521,93524,93527,93563,93567,93607,93611,93683,93686,93690,93753,93757,93820],[10,93077,93073],{"id":93078},"_11统计函数",[15,93080,93081],{},"sum max min mean",[15,93083,93084],{},"这些有axis参数，可以指定方向",[60,93086,93088],{"id":93087},"_111-sum求和函数","11.1 sum()求和函数",[109,93090,93092],{"className":30371,"code":93091,"language":30373,"meta":39,"style":39},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[115,93093,93094,93099,93120],{"__ignoreMap":39},[118,93095,93096],{"class":120,"line":121},[118,93097,93098],{"class":187},"#创建一维数组\n",[118,93100,93101,93103,93105,93108,93110,93112,93114,93116,93118],{"class":120,"line":40},[118,93102,21],{"class":128},[118,93104,174],{"class":124},[118,93106,93107],{"class":128},"np.random.randint(",[118,93109,346],{"class":177},[118,93111,506],{"class":128},[118,93113,439],{"class":177},[118,93115,506],{"class":128},[118,93117,828],{"class":177},[118,93119,135],{"class":128},[118,93121,93122,93125],{"class":120,"line":1183},[118,93123,93124],{"class":128},"np.sum(a)",[118,93126,93127],{"class":187},"#求和\n",[60,93129,93131],{"id":93130},"_112-max求最大值函数","11.2 max()求最大值函数",[109,93133,93135],{"className":30371,"code":93134,"language":30373,"meta":39,"style":39},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[115,93136,93137,93141,93161,93166,93171],{"__ignoreMap":39},[118,93138,93139],{"class":120,"line":121},[118,93140,93098],{"class":187},[118,93142,93143,93145,93147,93149,93151,93153,93155,93157,93159],{"class":120,"line":40},[118,93144,21],{"class":128},[118,93146,174],{"class":124},[118,93148,93107],{"class":128},[118,93150,346],{"class":177},[118,93152,506],{"class":128},[118,93154,439],{"class":177},[118,93156,506],{"class":128},[118,93158,828],{"class":177},[118,93160,135],{"class":128},[118,93162,93163],{"class":120,"line":1183},[118,93164,93165],{"class":128},"np.max(a)\n",[118,93167,93168],{"class":120,"line":1198},[118,93169,93170],{"class":187},"#最大索引(求最大元素的索引)arg\n",[118,93172,93173],{"class":120,"line":1204},[118,93174,93175],{"class":128},"np.argmax(a)\n",[109,93177,93179],{"className":30371,"code":93178,"language":30373,"meta":39,"style":39},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[115,93180,93181,93202,93222,93226],{"__ignoreMap":39},[118,93182,93183,93185,93187,93190,93192,93194,93196,93198,93200],{"class":120,"line":121},[118,93184,10924],{"class":128},[118,93186,174],{"class":124},[118,93188,93189],{"class":128}," np.array([",[118,93191,346],{"class":177},[118,93193,12440],{"class":128},[118,93195,447],{"class":177},[118,93197,12440],{"class":128},[118,93199,200],{"class":177},[118,93201,4661],{"class":128},[118,93203,93204,93206,93208,93210,93212,93214,93216,93218,93220],{"class":120,"line":40},[118,93205,10950],{"class":128},[118,93207,174],{"class":124},[118,93209,93189],{"class":128},[118,93211,200],{"class":177},[118,93213,12440],{"class":128},[118,93215,206],{"class":177},[118,93217,12440],{"class":128},[118,93219,421],{"class":177},[118,93221,4661],{"class":128},[118,93223,93224],{"class":120,"line":1183},[118,93225,2404],{"emptyLinePlaceholder":45},[118,93227,93228,93230,93233],{"class":120,"line":1198},[118,93229,30408],{"class":177},[118,93231,93232],{"class":128},"(np.maximum(a, b))   ",[118,93234,93235],{"class":187},"# [3 5 4]，每个位置上取较大值\n",[60,93237,93239],{"id":93238},"_113-mean求平均值函数","11.3 mean()求平均值函数",[15,93241,93242],{},"①一维数组：",[109,93244,93246],{"className":30371,"code":93245,"language":30373,"meta":39,"style":39},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[115,93247,93248,93252,93272,93277],{"__ignoreMap":39},[118,93249,93250],{"class":120,"line":121},[118,93251,93098],{"class":187},[118,93253,93254,93256,93258,93260,93262,93264,93266,93268,93270],{"class":120,"line":40},[118,93255,21],{"class":128},[118,93257,174],{"class":124},[118,93259,93107],{"class":128},[118,93261,346],{"class":177},[118,93263,506],{"class":128},[118,93265,439],{"class":177},[118,93267,506],{"class":128},[118,93269,828],{"class":177},[118,93271,135],{"class":128},[118,93273,93274],{"class":120,"line":1183},[118,93275,93276],{"class":187},"#求平均值\n",[118,93278,93279],{"class":120,"line":1198},[118,93280,93281],{"class":128},"np.mean(a)\n",[15,93283,93284],{},"②二维数组",[109,93286,93288],{"className":30371,"code":93287,"language":30373,"meta":39,"style":39},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[115,93289,93290,93295,93320,93325],{"__ignoreMap":39},[118,93291,93292],{"class":120,"line":121},[118,93293,93294],{"class":187},"#二维数组\n",[118,93296,93297,93300,93302,93304,93306,93308,93310,93312,93314,93316,93318],{"class":120,"line":40},[118,93298,93299],{"class":128},"aa",[118,93301,174],{"class":124},[118,93303,92995],{"class":128},[118,93305,346],{"class":177},[118,93307,506],{"class":128},[118,93309,651],{"class":177},[118,93311,93000],{"class":128},[118,93313,200],{"class":177},[118,93315,506],{"class":128},[118,93317,421],{"class":177},[118,93319,135],{"class":128},[118,93321,93322],{"class":120,"line":1183},[118,93323,93324],{"class":187},"#对数组中的所有数求平均\n",[118,93326,93327],{"class":120,"line":1198},[118,93328,93329],{"class":128},"np.mean(aa)\n",[60,93331,93333],{"id":93332},"_114-median求中位数函数","11.4 median()求中位数函数",[109,93335,93337],{"className":30371,"code":93336,"language":30373,"meta":39,"style":39},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[115,93338,93339,93344,93360,93365],{"__ignoreMap":39},[118,93340,93341],{"class":120,"line":121},[118,93342,93343],{"class":187},"#求中位数\n",[118,93345,93346,93348,93350,93352,93354,93356,93358],{"class":120,"line":40},[118,93347,391],{"class":128},[118,93349,174],{"class":124},[118,93351,92995],{"class":128},[118,93353,346],{"class":177},[118,93355,506],{"class":128},[118,93357,574],{"class":177},[118,93359,135],{"class":128},[118,93361,93362],{"class":120,"line":1183},[118,93363,93364],{"class":128},"np.median(b)\n",[118,93366,93367],{"class":120,"line":1198},[118,93368,93369],{"class":187},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[60,93371,93373],{"id":93372},"_115-power求幂运算函数","11.5 power()求幂运算函数",[109,93375,93377],{"className":30371,"code":93376,"language":30373,"meta":39,"style":39},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[115,93378,93379,93395,93400,93405,93414,93419,93428],{"__ignoreMap":39},[118,93380,93381,93383,93385,93387,93389,93391,93393],{"class":120,"line":121},[118,93382,391],{"class":128},[118,93384,174],{"class":124},[118,93386,92995],{"class":128},[118,93388,346],{"class":177},[118,93390,506],{"class":128},[118,93392,574],{"class":177},[118,93394,135],{"class":128},[118,93396,93397],{"class":120,"line":40},[118,93398,93399],{"class":187},"#幂运算\n",[118,93401,93402],{"class":120,"line":1183},[118,93403,93404],{"class":187},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[118,93406,93407,93410,93412],{"class":120,"line":1198},[118,93408,93409],{"class":128},"np.power(b,",[118,93411,206],{"class":177},[118,93413,135],{"class":128},[118,93415,93416],{"class":120,"line":1204},[118,93417,93418],{"class":187},"#或者以下代码，将数据存储起来\n",[118,93420,93421,93423,93425],{"class":120,"line":1218},[118,93422,973],{"class":128},[118,93424,174],{"class":124},[118,93426,93427],{"class":128},"np.empty_like(b)\n",[118,93429,93430,93432,93434,93436,93438,93440],{"class":120,"line":1224},[118,93431,93409],{"class":128},[118,93433,206],{"class":177},[118,93435,506],{"class":128},[118,93437,93047],{"class":5221},[118,93439,174],{"class":124},[118,93441,93442],{"class":128},"y)\n",[60,93444,93446],{"id":93445},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[109,93448,93450],{"className":30371,"code":93449,"language":30373,"meta":39,"style":39},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[115,93451,93452,93468,93473,93478,93482,93500],{"__ignoreMap":39},[118,93453,93454,93456,93458,93460,93462,93464,93466],{"class":120,"line":121},[118,93455,391],{"class":128},[118,93457,174],{"class":124},[118,93459,92995],{"class":128},[118,93461,346],{"class":177},[118,93463,506],{"class":128},[118,93465,574],{"class":177},[118,93467,135],{"class":128},[118,93469,93470],{"class":120,"line":40},[118,93471,93472],{"class":187},"#开方\n",[118,93474,93475],{"class":120,"line":1183},[118,93476,93477],{"class":128},"np.sqrt(b)\n",[118,93479,93480],{"class":120,"line":1198},[118,93481,93418],{"class":187},[118,93483,93484,93486,93488,93491,93494,93496,93498],{"class":120,"line":1204},[118,93485,973],{"class":128},[118,93487,174],{"class":124},[118,93489,93490],{"class":128},"np.empty_like(b,",[118,93492,93493],{"class":5221},"dtype",[118,93495,174],{"class":124},[118,93497,168],{"class":177},[118,93499,135],{"class":128},[118,93501,93502,93505,93507,93509],{"class":120,"line":1218},[118,93503,93504],{"class":128},"np.sqrt(b,",[118,93506,93047],{"class":5221},[118,93508,174],{"class":124},[118,93510,93442],{"class":128},[60,93512,93514],{"id":93513},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[15,93516,93517],{},"对数组中的元素累计求和，可指定轴",[15,93519,93520],{},"#累计求和的意思是：",[15,93522,93523],{},"a = np.array([1, 2, 3, 4])",[15,93525,93526],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[109,93528,93530],{"className":30371,"code":93529,"language":30373,"meta":39,"style":39},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[115,93531,93532,93548,93553,93558],{"__ignoreMap":39},[118,93533,93534,93536,93538,93540,93542,93544,93546],{"class":120,"line":121},[118,93535,391],{"class":128},[118,93537,174],{"class":124},[118,93539,92995],{"class":128},[118,93541,346],{"class":177},[118,93543,506],{"class":128},[118,93545,574],{"class":177},[118,93547,135],{"class":128},[118,93549,93550],{"class":120,"line":40},[118,93551,93552],{"class":128},"np.cumsum(b)\n",[118,93554,93555],{"class":120,"line":1183},[118,93556,93557],{"class":187},"#结果：\n",[118,93559,93560],{"class":120,"line":1198},[118,93561,93562],{"class":187},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[60,93564,93566],{"id":93565},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[109,93568,93570],{"className":30371,"code":93569,"language":30373,"meta":39,"style":39},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[115,93571,93572,93588,93593,93598,93602],{"__ignoreMap":39},[118,93573,93574,93576,93578,93580,93582,93584,93586],{"class":120,"line":121},[118,93575,391],{"class":128},[118,93577,174],{"class":124},[118,93579,92995],{"class":128},[118,93581,346],{"class":177},[118,93583,506],{"class":128},[118,93585,574],{"class":177},[118,93587,135],{"class":128},[118,93589,93590],{"class":120,"line":40},[118,93591,93592],{"class":187},"#对数组中的元素累计求积，可指定轴\n",[118,93594,93595],{"class":120,"line":1183},[118,93596,93597],{"class":128},"np.cumprod(b)\n",[118,93599,93600],{"class":120,"line":1198},[118,93601,93557],{"class":187},[118,93603,93604],{"class":120,"line":1204},[118,93605,93606],{"class":187},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[60,93608,93610],{"id":93609},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[109,93612,93614],{"className":30371,"code":93613,"language":30373,"meta":39,"style":39},"#删除数组中的重复数据，并对数据进行排序\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",[115,93615,93616,93621,93669,93674,93678],{"__ignoreMap":39},[118,93617,93618],{"class":120,"line":121},[118,93619,93620],{"class":187},"#删除数组中的重复数据，并对数据进行排序\n",[118,93622,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651,93653,93655,93657,93659,93661,93663,93665,93667],{"class":120,"line":40},[118,93624,21],{"class":128},[118,93626,174],{"class":124},[118,93628,93017],{"class":128},[118,93630,346],{"class":177},[118,93632,506],{"class":128},[118,93634,206],{"class":177},[118,93636,506],{"class":128},[118,93638,200],{"class":177},[118,93640,506],{"class":128},[118,93642,626],{"class":177},[118,93644,506],{"class":128},[118,93646,200],{"class":177},[118,93648,506],{"class":128},[118,93650,574],{"class":177},[118,93652,506],{"class":128},[118,93654,326],{"class":177},[118,93656,506],{"class":128},[118,93658,320],{"class":177},[118,93660,506],{"class":128},[118,93662,903],{"class":177},[118,93664,506],{"class":128},[118,93666,421],{"class":177},[118,93668,4661],{"class":128},[118,93670,93671],{"class":120,"line":1183},[118,93672,93673],{"class":128},"np.unique(a)\n",[118,93675,93676],{"class":120,"line":1198},[118,93677,93557],{"class":187},[118,93679,93680],{"class":120,"line":1204},[118,93681,93682],{"class":187},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[15,93684,93685],{},"升序形式排序",[60,93687,93689],{"id":93688},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[109,93691,93693],{"className":30371,"code":93692,"language":30373,"meta":39,"style":39},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[115,93694,93695,93743,93748],{"__ignoreMap":39},[118,93696,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729,93731,93733,93735,93737,93739,93741],{"class":120,"line":121},[118,93698,21],{"class":128},[118,93700,174],{"class":124},[118,93702,93017],{"class":128},[118,93704,346],{"class":177},[118,93706,506],{"class":128},[118,93708,206],{"class":177},[118,93710,506],{"class":128},[118,93712,200],{"class":177},[118,93714,506],{"class":128},[118,93716,626],{"class":177},[118,93718,506],{"class":128},[118,93720,200],{"class":177},[118,93722,506],{"class":128},[118,93724,574],{"class":177},[118,93726,506],{"class":128},[118,93728,326],{"class":177},[118,93730,506],{"class":128},[118,93732,320],{"class":177},[118,93734,506],{"class":128},[118,93736,903],{"class":177},[118,93738,506],{"class":128},[118,93740,421],{"class":177},[118,93742,4661],{"class":128},[118,93744,93745],{"class":120,"line":40},[118,93746,93747],{"class":187},"#返回数组中非零元素的索引\n",[118,93749,93750],{"class":120,"line":1183},[118,93751,93752],{"class":128},"np.nonzero(a)\n",[60,93754,93756],{"id":93755},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[109,93758,93760],{"className":30371,"code":93759,"language":30373,"meta":39,"style":39},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[115,93761,93762,93810,93815],{"__ignoreMap":39},[118,93763,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808],{"class":120,"line":121},[118,93765,21],{"class":128},[118,93767,174],{"class":124},[118,93769,93017],{"class":128},[118,93771,346],{"class":177},[118,93773,506],{"class":128},[118,93775,206],{"class":177},[118,93777,506],{"class":128},[118,93779,200],{"class":177},[118,93781,506],{"class":128},[118,93783,626],{"class":177},[118,93785,506],{"class":128},[118,93787,200],{"class":177},[118,93789,506],{"class":128},[118,93791,574],{"class":177},[118,93793,506],{"class":128},[118,93795,326],{"class":177},[118,93797,506],{"class":128},[118,93799,320],{"class":177},[118,93801,506],{"class":128},[118,93803,903],{"class":177},[118,93805,506],{"class":128},[118,93807,421],{"class":177},[118,93809,4661],{"class":128},[118,93811,93812],{"class":120,"line":40},[118,93813,93814],{"class":187},"#计算一组数中最大值与最小值的差，可指定轴\n",[118,93816,93817],{"class":120,"line":1183},[118,93818,93819],{"class":128},"np.ptp(a)\n",[5131,93821,93822],{},"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":39,"searchDepth":40,"depth":40,"links":93824},[93825,93826,93827,93828,93829,93830,93831,93832,93833,93834,93835],{"id":93087,"depth":40,"text":93088},{"id":93130,"depth":40,"text":93131},{"id":93238,"depth":40,"text":93239},{"id":93332,"depth":40,"text":93333},{"id":93372,"depth":40,"text":93373},{"id":93445,"depth":40,"text":93446},{"id":93513,"depth":40,"text":93514},{"id":93565,"depth":40,"text":93566},{"id":93609,"depth":40,"text":93610},{"id":93688,"depth":40,"text":93689},{"id":93755,"depth":40,"text":93756},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93073,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93842,"title":93843,"body":93844,"description":42,"extension":43,"meta":94499,"navigation":45,"path":94500,"seo":94501,"stem":94502,"__hash__":94503},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93845,"toc":94487},[93846,93849,93853,93856,94072,94076,94079,94288,94292,94358,94363,94367,94370,94373,94411,94415,94418,94423,94427,94430,94433,94438,94442,94445,94449,94452,94455,94460,94464,94467,94470,94475,94479,94484],[10,93847,93843],{"id":93848},"_12其他常用函数",[60,93850,93852],{"id":93851},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[15,93854,93855],{},"将数组的数据按照行列复制扩展",[109,93857,93859],{"className":30371,"code":93858,"language":30373,"meta":39,"style":39},"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",[115,93860,93861,93877,93886,93890,93895,93900,93913,93917,93922,93927,93932,93936,93941,93965,93977,93981,93985,93990,93995,94000,94005,94009,94022,94026,94030,94035,94040,94045,94050,94055,94059,94063,94068],{"__ignoreMap":39},[118,93862,93863,93865,93867,93869,93871,93873,93875],{"class":120,"line":121},[118,93864,21],{"class":128},[118,93866,174],{"class":124},[118,93868,92995],{"class":128},[118,93870,346],{"class":177},[118,93872,506],{"class":128},[118,93874,447],{"class":177},[118,93876,135],{"class":128},[118,93878,93879,93882,93884],{"class":120,"line":40},[118,93880,93881],{"class":128},"np.tile(a,",[118,93883,206],{"class":177},[118,93885,135],{"class":128},[118,93887,93888],{"class":120,"line":1183},[118,93889,93557],{"class":187},[118,93891,93892],{"class":120,"line":1198},[118,93893,93894],{"class":187},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[118,93896,93897],{"class":120,"line":1204},[118,93898,93899],{"class":187},"#行复制两次，列复制三次\n",[118,93901,93902,93905,93907,93909,93911],{"class":120,"line":1218},[118,93903,93904],{"class":128},"np.tile(a,(",[118,93906,206],{"class":177},[118,93908,506],{"class":128},[118,93910,200],{"class":177},[118,93912,30490],{"class":128},[118,93914,93915],{"class":120,"line":1224},[118,93916,93557],{"class":187},[118,93918,93919],{"class":120,"line":1315},[118,93920,93921],{"class":233},"'''\n",[118,93923,93924],{"class":120,"line":1321},[118,93925,93926],{"class":233},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[118,93928,93929],{"class":120,"line":1333},[118,93930,93931],{"class":233},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[118,93933,93934],{"class":120,"line":1616},[118,93935,93921],{"class":233},[118,93937,93938],{"class":120,"line":1621},[118,93939,93940],{"class":187},"#创建二维数组\n",[118,93942,93943,93945,93947,93949,93951,93953,93955,93957,93959,93961,93963],{"class":120,"line":1627},[118,93944,93299],{"class":128},[118,93946,174],{"class":124},[118,93948,92995],{"class":128},[118,93950,346],{"class":177},[118,93952,506],{"class":128},[118,93954,651],{"class":177},[118,93956,93000],{"class":128},[118,93958,421],{"class":177},[118,93960,506],{"class":128},[118,93962,200],{"class":177},[118,93964,135],{"class":128},[118,93966,93967,93970,93972,93974],{"class":120,"line":1632},[118,93968,93969],{"class":128},"np.tile(aa,",[118,93971,206],{"class":177},[118,93973,557],{"class":128},[118,93975,93976],{"class":187},"#一个数的时候就是行\n",[118,93978,93979],{"class":120,"line":1646},[118,93980,93557],{"class":187},[118,93982,93983],{"class":120,"line":1651},[118,93984,93921],{"class":233},[118,93986,93987],{"class":120,"line":1657},[118,93988,93989],{"class":233},"array([[ 1,  2,  3,  1,  2,  3],\n",[118,93991,93992],{"class":120,"line":1678},[118,93993,93994],{"class":233},"       [ 4,  5,  6,  4,  5,  6],\n",[118,93996,93997],{"class":120,"line":1683},[118,93998,93999],{"class":233},"       [ 7,  8,  9,  7,  8,  9],\n",[118,94001,94002],{"class":120,"line":1697},[118,94003,94004],{"class":233},"       [10, 11, 12, 10, 11, 12]])\n",[118,94006,94007],{"class":120,"line":1702},[118,94008,93921],{"class":233},[118,94010,94011,94014,94016,94018,94020],{"class":120,"line":1731},[118,94012,94013],{"class":128},"np.tile(aa,(",[118,94015,206],{"class":177},[118,94017,506],{"class":128},[118,94019,200],{"class":177},[118,94021,30490],{"class":128},[118,94023,94024],{"class":120,"line":1736},[118,94025,93557],{"class":187},[118,94027,94028],{"class":120,"line":1753},[118,94029,93921],{"class":233},[118,94031,94032],{"class":120,"line":1758},[118,94033,94034],{"class":233},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[118,94036,94037],{"class":120,"line":1763},[118,94038,94039],{"class":233},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[118,94041,94042],{"class":120,"line":1768},[118,94043,94044],{"class":233},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[118,94046,94047],{"class":120,"line":1782},[118,94048,94049],{"class":233},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[118,94051,94052],{"class":120,"line":1787},[118,94053,94054],{"class":233},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[118,94056,94057],{"class":120,"line":2581},[118,94058,94039],{"class":233},[118,94060,94061],{"class":120,"line":2595},[118,94062,94044],{"class":233},[118,94064,94065],{"class":120,"line":2603},[118,94066,94067],{"class":233},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[118,94069,94070],{"class":120,"line":2608},[118,94071,93921],{"class":233},[60,94073,94075],{"id":94074},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[15,94077,94078],{},"repeat()将数组中的每个元素重复若干次",[109,94080,94082],{"className":30371,"code":94081,"language":30373,"meta":39,"style":39},"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",[115,94083,94084,94100,94109,94113,94118,94142,94147,94156,94160,94165,94169,94174,94190,94194,94198,94203,94208,94213,94217,94222,94226,94231,94236,94240,94256,94260,94264,94269,94274,94279,94284],{"__ignoreMap":39},[118,94085,94086,94088,94090,94092,94094,94096,94098],{"class":120,"line":121},[118,94087,21],{"class":128},[118,94089,174],{"class":124},[118,94091,92995],{"class":128},[118,94093,346],{"class":177},[118,94095,506],{"class":128},[118,94097,447],{"class":177},[118,94099,135],{"class":128},[118,94101,94102,94105,94107],{"class":120,"line":40},[118,94103,94104],{"class":128},"np.repeat(a,",[118,94106,200],{"class":177},[118,94108,135],{"class":128},[118,94110,94111],{"class":120,"line":1183},[118,94112,93557],{"class":187},[118,94114,94115],{"class":120,"line":1198},[118,94116,94117],{"class":187},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[118,94119,94120,94122,94124,94126,94128,94130,94132,94134,94136,94138,94140],{"class":120,"line":1204},[118,94121,93299],{"class":128},[118,94123,174],{"class":124},[118,94125,92995],{"class":128},[118,94127,346],{"class":177},[118,94129,506],{"class":128},[118,94131,651],{"class":177},[118,94133,93000],{"class":128},[118,94135,421],{"class":177},[118,94137,506],{"class":128},[118,94139,200],{"class":177},[118,94141,135],{"class":128},[118,94143,94144],{"class":120,"line":1218},[118,94145,94146],{"class":187},"#这个重复之后二维变成一维\n",[118,94148,94149,94152,94154],{"class":120,"line":1224},[118,94150,94151],{"class":128},"np.repeat(aa,",[118,94153,206],{"class":177},[118,94155,135],{"class":128},[118,94157,94158],{"class":120,"line":1315},[118,94159,93921],{"class":233},[118,94161,94162],{"class":120,"line":1321},[118,94163,94164],{"class":233},"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",[118,94166,94167],{"class":120,"line":1333},[118,94168,93921],{"class":233},[118,94170,94171],{"class":120,"line":1616},[118,94172,94173],{"class":187},"#指定axis\n",[118,94175,94176,94178,94180,94182,94184,94186,94188],{"class":120,"line":1621},[118,94177,94151],{"class":128},[118,94179,206],{"class":177},[118,94181,506],{"class":128},[118,94183,47507],{"class":5221},[118,94185,174],{"class":124},[118,94187,320],{"class":177},[118,94189,135],{"class":128},[118,94191,94192],{"class":120,"line":1627},[118,94193,93557],{"class":187},[118,94195,94196],{"class":120,"line":1632},[118,94197,93921],{"class":233},[118,94199,94200],{"class":120,"line":1646},[118,94201,94202],{"class":233},"array([[ 1,  2,  3],\n",[118,94204,94205],{"class":120,"line":1651},[118,94206,94207],{"class":233},"       [ 1,  2,  3],\n",[118,94209,94210],{"class":120,"line":1657},[118,94211,94212],{"class":233},"       [ 4,  5,  6],\n",[118,94214,94215],{"class":120,"line":1678},[118,94216,94212],{"class":233},[118,94218,94219],{"class":120,"line":1683},[118,94220,94221],{"class":233},"       [ 7,  8,  9],\n",[118,94223,94224],{"class":120,"line":1697},[118,94225,94221],{"class":233},[118,94227,94228],{"class":120,"line":1702},[118,94229,94230],{"class":233},"       [10, 11, 12],\n",[118,94232,94233],{"class":120,"line":1731},[118,94234,94235],{"class":233},"       [10, 11, 12]])\n",[118,94237,94238],{"class":120,"line":1736},[118,94239,93921],{"class":233},[118,94241,94242,94244,94246,94248,94250,94252,94254],{"class":120,"line":1753},[118,94243,94151],{"class":128},[118,94245,206],{"class":177},[118,94247,506],{"class":128},[118,94249,47507],{"class":5221},[118,94251,174],{"class":124},[118,94253,346],{"class":177},[118,94255,135],{"class":128},[118,94257,94258],{"class":120,"line":1758},[118,94259,93557],{"class":187},[118,94261,94262],{"class":120,"line":1763},[118,94263,93921],{"class":233},[118,94265,94266],{"class":120,"line":1768},[118,94267,94268],{"class":233},"array([[ 1,  1,  2,  2,  3,  3],\n",[118,94270,94271],{"class":120,"line":1782},[118,94272,94273],{"class":233},"       [ 4,  4,  5,  5,  6,  6],\n",[118,94275,94276],{"class":120,"line":1787},[118,94277,94278],{"class":233},"       [ 7,  7,  8,  8,  9,  9],\n",[118,94280,94281],{"class":120,"line":2581},[118,94282,94283],{"class":233},"       [10, 10, 11, 11, 12, 12]])\n",[118,94285,94286],{"class":120,"line":2595},[118,94287,93921],{"class":233},[60,94289,94291],{"id":94290},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[109,94293,94295],{"className":30371,"code":94294,"language":30373,"meta":39,"style":39},"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",[115,94296,94297,94313,94318,94330,94334,94339,94349,94353],{"__ignoreMap":39},[118,94298,94299,94301,94303,94305,94307,94309,94311],{"class":120,"line":121},[118,94300,21],{"class":128},[118,94302,174],{"class":124},[118,94304,92995],{"class":128},[118,94306,346],{"class":177},[118,94308,506],{"class":128},[118,94310,447],{"class":177},[118,94312,135],{"class":128},[118,94314,94315],{"class":120,"line":40},[118,94316,94317],{"class":187},"#array([，2，3，4])\n",[118,94319,94320,94323,94325,94327],{"class":120,"line":1183},[118,94321,94322],{"class":128},"np.roll(a,",[118,94324,206],{"class":177},[118,94326,557],{"class":128},[118,94328,94329],{"class":187},"#传正数向后调多少位，传负数向前调多少位\n",[118,94331,94332],{"class":120,"line":1198},[118,94333,93557],{"class":187},[118,94335,94336],{"class":120,"line":1204},[118,94337,94338],{"class":187},"#array([3, 4, 1, 2])\n",[118,94340,94341,94343,94345,94347],{"class":120,"line":1218},[118,94342,94322],{"class":128},[118,94344,660],{"class":124},[118,94346,346],{"class":177},[118,94348,135],{"class":128},[118,94350,94351],{"class":120,"line":1224},[118,94352,93557],{"class":187},[118,94354,94355],{"class":120,"line":1315},[118,94356,94357],{"class":187},"#array([2, 3, 4, 1])\n",[15,94359,94360],{},[1466,94361],{"alt":39,"src":94362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[60,94364,94366],{"id":94365},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[15,94368,94369],{},"resize()重新调整数组的大小",[15,94371,94372],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[109,94374,94376],{"className":30371,"code":94375,"language":30373,"meta":39,"style":39},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[115,94377,94378,94383,94396],{"__ignoreMap":39},[118,94379,94380],{"class":120,"line":121},[118,94381,94382],{"class":187},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[118,94384,94385,94388,94390,94392,94394],{"class":120,"line":40},[118,94386,94387],{"class":128},"np.resize(aa,(",[118,94389,206],{"class":177},[118,94391,506],{"class":128},[118,94393,472],{"class":177},[118,94395,30490],{"class":128},[118,94397,94398,94400,94402,94404,94406,94408],{"class":120,"line":1183},[118,94399,94387],{"class":128},[118,94401,206],{"class":177},[118,94403,506],{"class":128},[118,94405,548],{"class":177},[118,94407,82764],{"class":128},[118,94409,94410],{"class":187},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[60,94412,94414],{"id":94413},"_125-placeput函数","12.5 place()\u002Fput()函数",[15,94416,94417],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[15,94419,94420],{},[1466,94421],{"alt":39,"src":94422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[60,94424,94426],{"id":94425},"_126-保存加载文件","12.6 保存加载文件",[15,94428,94429],{},"savetxt():将数据保存到txt文件中",[15,94431,94432],{},"loadtxt():从文件加载数据",[15,94434,94435],{},[1466,94436],{"alt":39,"src":94437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[60,94439,94441],{"id":94440},"_127-genfromtxt函数","12.7 genfromtxt()函数",[15,94443,94444],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[60,94446,94448],{"id":94447},"_128-anyall函数","12.8 any()\u002Fall()函数",[15,94450,94451],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[15,94453,94454],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[15,94456,94457],{},[1466,94458],{"alt":39,"src":94459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[60,94461,94463],{"id":94462},"_129-where语句","12.9 where语句",[15,94465,94466],{},"np.where(条件,x,y)",[15,94468,94469],{},"如果条件为True,对应值为x,否则对应值为y",[15,94471,94472],{},[1466,94473],{"alt":39,"src":94474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[60,94476,94478],{"id":94477},"_1210-dot矩阵","12.10 dot()矩阵",[15,94480,94481],{},[1466,94482],{"alt":39,"src":94483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5131,94485,94486],{},"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":39,"searchDepth":40,"depth":40,"links":94488},[94489,94490,94491,94492,94493,94494,94495,94496,94497,94498],{"id":93851,"depth":40,"text":93852},{"id":94074,"depth":40,"text":94075},{"id":94290,"depth":40,"text":94291},{"id":94365,"depth":40,"text":94366},{"id":94413,"depth":40,"text":94414},{"id":94425,"depth":40,"text":94426},{"id":94440,"depth":40,"text":94441},{"id":94447,"depth":40,"text":94448},{"id":94462,"depth":40,"text":94463},{"id":94477,"depth":40,"text":94478},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93843,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94505,"title":94506,"body":94507,"description":42,"extension":43,"meta":94860,"navigation":45,"path":94861,"seo":94862,"stem":94863,"__hash__":94864},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94508,"toc":94858},[94509,94512,94515,94518,94521,94524,94589,94591,94855],[10,94510,94506],{"id":94511},"_13数组排序",[15,94513,94514],{},"排序主要用到的方法是np.sort和np.argsort",[15,94516,94517],{},"其中np.sort()对数组直接排序",[15,94519,94520],{},"而np.argsort()是返回排序后的原始索引",[15,94522,94523],{},"①一维数组",[109,94525,94527],{"className":30371,"code":94526,"language":30373,"meta":39,"style":39},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[115,94528,94529,94533,94573,94581],{"__ignoreMap":39},[118,94530,94531],{"class":120,"line":121},[118,94532,93098],{"class":187},[118,94534,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553,94555,94557,94559,94561,94563,94565,94567,94569,94571],{"class":120,"line":40},[118,94536,21],{"class":128},[118,94538,174],{"class":124},[118,94540,93017],{"class":128},[118,94542,200],{"class":177},[118,94544,506],{"class":128},[118,94546,626],{"class":177},[118,94548,506],{"class":128},[118,94550,523],{"class":177},[118,94552,506],{"class":128},[118,94554,903],{"class":177},[118,94556,506],{"class":128},[118,94558,407],{"class":177},[118,94560,506],{"class":128},[118,94562,1021],{"class":177},[118,94564,506],{"class":128},[118,94566,472],{"class":177},[118,94568,506],{"class":128},[118,94570,574],{"class":177},[118,94572,4661],{"class":128},[118,94574,94575,94578],{"class":120,"line":1183},[118,94576,94577],{"class":128},"np.sort(a)",[118,94579,94580],{"class":187},"#升序排序\n",[118,94582,94583,94586],{"class":120,"line":1198},[118,94584,94585],{"class":128},"np.argsort(a)",[118,94587,94588],{"class":187},"#按照元素大小来索引排序\n",[15,94590,93284],{},[109,94592,94594],{"className":30371,"code":94593,"language":30373,"meta":39,"style":39},"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",[115,94595,94596,94608,94634,94639,94643,94648,94653,94658,94663,94667,94675,94679,94684,94689,94694,94699,94703,94708,94721,94725,94730,94735,94740,94745,94749,94754,94766,94770,94774,94778,94782,94786,94790,94795,94810,94815,94824,94829,94833,94837,94842,94846,94851],{"__ignoreMap":39},[118,94597,94598,94601,94603,94605],{"class":120,"line":121},[118,94599,94600],{"class":128},"np.random.seed(",[118,94602,320],{"class":177},[118,94604,557],{"class":128},[118,94606,94607],{"class":187},"#保证每次值一样\n",[118,94609,94610,94612,94614,94616,94618,94620,94622,94624,94626,94628,94630,94632],{"class":120,"line":40},[118,94611,93299],{"class":128},[118,94613,174],{"class":124},[118,94615,93107],{"class":128},[118,94617,439],{"class":177},[118,94619,506],{"class":128},[118,94621,31489],{"class":5221},[118,94623,174],{"class":124},[118,94625,129],{"class":128},[118,94627,421],{"class":177},[118,94629,506],{"class":128},[118,94631,472],{"class":177},[118,94633,30490],{"class":128},[118,94635,94636],{"class":120,"line":1183},[118,94637,94638],{"class":187},"#原数组：\n",[118,94640,94641],{"class":120,"line":1198},[118,94642,93921],{"class":233},[118,94644,94645],{"class":120,"line":1204},[118,94646,94647],{"class":233},"array([[44, 47, 64, 67, 67,  9],\n",[118,94649,94650],{"class":120,"line":1218},[118,94651,94652],{"class":233},"       [83, 21, 36, 87, 70, 88],\n",[118,94654,94655],{"class":120,"line":1224},[118,94656,94657],{"class":233},"       [88, 12, 58, 65, 39, 87],\n",[118,94659,94660],{"class":120,"line":1315},[118,94661,94662],{"class":233},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[118,94664,94665],{"class":120,"line":1321},[118,94666,93921],{"class":233},[118,94668,94669,94672],{"class":120,"line":1333},[118,94670,94671],{"class":128},"np.sort(aa)",[118,94673,94674],{"class":187},"#每行进行了排序\n",[118,94676,94677],{"class":120,"line":1616},[118,94678,93921],{"class":233},[118,94680,94681],{"class":120,"line":1621},[118,94682,94683],{"class":233},"array([[ 9, 44, 47, 64, 67, 67],\n",[118,94685,94686],{"class":120,"line":1627},[118,94687,94688],{"class":233},"       [21, 36, 70, 83, 87, 88],\n",[118,94690,94691],{"class":120,"line":1632},[118,94692,94693],{"class":233},"       [12, 39, 58, 65, 87, 88],\n",[118,94695,94696],{"class":120,"line":1646},[118,94697,94698],{"class":233},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[118,94700,94701],{"class":120,"line":1651},[118,94702,93921],{"class":233},[118,94704,94705],{"class":120,"line":1657},[118,94706,94707],{"class":187},"#axis=0时\n",[118,94709,94710,94713,94715,94717,94719],{"class":120,"line":1678},[118,94711,94712],{"class":128},"np.sort(aa,",[118,94714,47507],{"class":5221},[118,94716,174],{"class":124},[118,94718,320],{"class":177},[118,94720,135],{"class":128},[118,94722,94723],{"class":120,"line":1683},[118,94724,93921],{"class":233},[118,94726,94727],{"class":120,"line":1697},[118,94728,94729],{"class":233},"array([[44, 12, 36, 37, 25,  9],\n",[118,94731,94732],{"class":120,"line":1702},[118,94733,94734],{"class":233},"       [46, 21, 58, 65, 39, 77],\n",[118,94736,94737],{"class":120,"line":1731},[118,94738,94739],{"class":233},"       [83, 47, 64, 67, 67, 87],\n",[118,94741,94742],{"class":120,"line":1736},[118,94743,94744],{"class":233},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[118,94746,94747],{"class":120,"line":1753},[118,94748,93921],{"class":233},[118,94750,94751],{"class":120,"line":1758},[118,94752,94753],{"class":187},"#axis=1时,为默认值\n",[118,94755,94756,94758,94760,94762,94764],{"class":120,"line":1763},[118,94757,94712],{"class":128},[118,94759,47507],{"class":5221},[118,94761,174],{"class":124},[118,94763,346],{"class":177},[118,94765,135],{"class":128},[118,94767,94768],{"class":120,"line":1768},[118,94769,93921],{"class":233},[118,94771,94772],{"class":120,"line":1782},[118,94773,94683],{"class":233},[118,94775,94776],{"class":120,"line":1787},[118,94777,94688],{"class":233},[118,94779,94780],{"class":120,"line":2581},[118,94781,94693],{"class":233},[118,94783,94784],{"class":120,"line":2595},[118,94785,94698],{"class":233},[118,94787,94788],{"class":120,"line":2603},[118,94789,93921],{"class":233},[118,94791,94792],{"class":120,"line":2608},[118,94793,94794],{"class":187},"#按最后一列排序\n",[118,94796,94797,94799,94801,94804,94806,94808],{"class":120,"line":2614},[118,94798,391],{"class":128},[118,94800,174],{"class":124},[118,94802,94803],{"class":128},"aa[:,",[118,94805,660],{"class":124},[118,94807,346],{"class":177},[118,94809,33239],{"class":128},[118,94811,94812],{"class":120,"line":2620},[118,94813,94814],{"class":187},"#获取最后一列排好序的索引\n",[118,94816,94817,94819,94821],{"class":120,"line":2625},[118,94818,74051],{"class":128},[118,94820,174],{"class":124},[118,94822,94823],{"class":128},"np.argsort(b)\n",[118,94825,94826],{"class":120,"line":7953},[118,94827,94828],{"class":128},"aa[index]\n",[118,94830,94831],{"class":120,"line":7977},[118,94832,93921],{"class":233},[118,94834,94835],{"class":120,"line":7982},[118,94836,94647],{"class":233},[118,94838,94839],{"class":120,"line":7988},[118,94840,94841],{"class":233},"       [46, 88, 81, 37, 25, 77],\n",[118,94843,94844],{"class":120,"line":8015},[118,94845,94657],{"class":233},[118,94847,94848],{"class":120,"line":8020},[118,94849,94850],{"class":233},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[118,94852,94853],{"class":120,"line":8026},[118,94854,93921],{"class":233},[5131,94856,94857],{},"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":39,"searchDepth":40,"depth":40,"links":94859},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94506,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94866,"title":94867,"body":94868,"description":42,"extension":43,"meta":94898,"navigation":45,"path":94899,"seo":94900,"stem":94901,"__hash__":94902},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94869,"toc":94896},[94870,94873,94876,94879,94882,94885,94888,94891],[10,94871,94867],{"id":94872},"_14广播机制",[15,94874,94875],{},"广播的规则：",[15,94877,94878],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[15,94880,94881],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[15,94883,94884],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[15,94886,94887],{},"3.如果没有维度形状为1，则会引发异常",[15,94889,94890],{},"也就是只有维度或者个数为1才可以进行广播操作",[15,94892,94893],{},[1466,94894],{"alt":39,"src":94895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":39,"searchDepth":40,"depth":40,"links":94897},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94867,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94904,"title":94905,"body":94906,"description":42,"extension":43,"meta":95004,"navigation":45,"path":95005,"seo":95006,"stem":95007,"__hash__":95008},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94907,"toc":95002},[94908,94911,94914,94999],[10,94909,94905],{"id":94910},"_15比较掩码",[15,94912,94913],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[109,94915,94917],{"className":30371,"code":94916,"language":30373,"meta":39,"style":39},"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",[115,94918,94919,94965,94976,94990,94994],{"__ignoreMap":39},[118,94920,94921,94923,94925,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946,94948,94950,94952,94954,94956,94958,94960,94962],{"class":120,"line":121},[118,94922,21],{"class":128},[118,94924,174],{"class":124},[118,94926,94927],{"class":128},"np.array([[",[118,94929,346],{"class":177},[118,94931,506],{"class":128},[118,94933,206],{"class":177},[118,94935,506],{"class":128},[118,94937,200],{"class":177},[118,94939,48023],{"class":128},[118,94941,600],{"class":177},[118,94943,506],{"class":128},[118,94945,626],{"class":177},[118,94947,506],{"class":128},[118,94949,651],{"class":177},[118,94951,48023],{"class":128},[118,94953,853],{"class":177},[118,94955,506],{"class":128},[118,94957,878],{"class":177},[118,94959,506],{"class":128},[118,94961,903],{"class":177},[118,94963,94964],{"class":128},"]])\n",[118,94966,94967,94969,94971,94973],{"class":120,"line":40},[118,94968,21],{"class":128},[118,94970,1038],{"class":124},[118,94972,828],{"class":177},[118,94974,94975],{"class":187},"#结果是一个由True,False组成的数组\n",[118,94977,94978,94981,94983,94985,94987],{"class":120,"line":1183},[118,94979,94980],{"class":128},"a[a",[118,94982,1038],{"class":124},[118,94984,828],{"class":177},[118,94986,1068],{"class":128},[118,94988,94989],{"class":187},"#小于20的元素会存到这个数组中\n",[118,94991,94992],{"class":120,"line":1198},[118,94993,93557],{"class":187},[118,94995,94996],{"class":120,"line":1204},[118,94997,94998],{"class":187},"#array([ 1,  2,  3, 11, 12, 13])\n",[5131,95000,95001],{},"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":39,"searchDepth":40,"depth":40,"links":95003},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94905,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95010,"title":95011,"body":95012,"description":42,"extension":43,"meta":95104,"navigation":45,"path":95105,"seo":95106,"stem":95107,"__hash__":95108},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95013,"toc":95102},[95014,95017,95020,95023,95026,95029,95094,95099],[10,95015,95011],{"id":95016},"_16魔法命令time",[15,95018,95019],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[15,95021,95022],{},"%:行模式",[15,95024,95025],{},"%%:单元格模式",[15,95027,95028],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[109,95030,95032],{"className":30371,"code":95031,"language":30373,"meta":39,"style":39},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[115,95033,95034,95039,95046,95051,95060,95073,95077,95085],{"__ignoreMap":39},[118,95035,95036],{"class":120,"line":121},[118,95037,95038],{"class":187},"#程序执行时间\n",[118,95040,95041,95043],{"class":120,"line":40},[118,95042,30385],{"class":124},[118,95044,95045],{"class":128}," time \n",[118,95047,95048],{"class":120,"line":1183},[118,95049,95050],{"class":187},"#获取时间\n",[118,95052,95053,95056,95058],{"class":120,"line":1198},[118,95054,95055],{"class":128},"start",[118,95057,174],{"class":124},[118,95059,32411],{"class":128},[118,95061,95062,95065,95068,95070],{"class":120,"line":1204},[118,95063,95064],{"class":128},"time.sleep(",[118,95066,95067],{"class":177},"0.4",[118,95069,557],{"class":128},[118,95071,95072],{"class":187},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[118,95074,95075],{"class":120,"line":1218},[118,95076,95050],{"class":187},[118,95078,95079,95081,95083],{"class":120,"line":1224},[118,95080,45794],{"class":128},[118,95082,174],{"class":124},[118,95084,32411],{"class":128},[118,95086,95087,95089,95091],{"class":120,"line":1315},[118,95088,45794],{"class":128},[118,95090,660],{"class":124},[118,95092,95093],{"class":128},"start\n",[15,95095,95096],{},[1466,95097],{"alt":39,"src":95098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5131,95100,95101],{},"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":39,"searchDepth":40,"depth":40,"links":95103},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95011,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95110,"title":95111,"body":95112,"description":42,"extension":43,"meta":95147,"navigation":45,"path":95148,"seo":95149,"stem":95150,"__hash__":95151},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95113,"toc":95145},[95114,95117,95120,95123,95126,95129,95132,95135,95140],[10,95115,95111],{"id":95116},"_17魔法命令timeit",[15,95118,95119],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[15,95121,95122],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[15,95124,95125],{},"单元格模式：",[15,95127,95128],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[15,95130,95131],{},"初始化语句执行次数由轮数来决定",[15,95133,95134],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[15,95136,95137],{},[1466,95138],{"alt":39,"src":95139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[15,95141,95142],{},[1466,95143],{"alt":39,"src":95144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":39,"searchDepth":40,"depth":40,"links":95146},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95111,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95153,"title":95154,"body":95155,"description":42,"extension":43,"meta":95173,"navigation":45,"path":95174,"seo":95175,"stem":95176,"__hash__":95177},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95156,"toc":95171},[95157,95160,95163,95166],[10,95158,95154],{"id":95159},"_18魔法命令writefile和run",[15,95161,95162],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[15,95164,95165],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[15,95167,95168],{},[1466,95169],{"alt":39,"src":95170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":39,"searchDepth":40,"depth":40,"links":95172},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95154,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95179,"title":95180,"body":95181,"description":42,"extension":43,"meta":95234,"navigation":45,"path":95235,"seo":95236,"stem":95237,"__hash__":95238},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95182,"toc":95232},[95183,95186,95189,95191,95194,95197,95202,95205,95208,95211,95214,95217,95220,95223,95226,95229],[10,95184,95180],{"id":95185},"_19魔法命令memit",[15,95187,95188],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[15,95190,24604],{},[15,95192,95193],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[15,95195,95196],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[15,95198,95199],{},[1466,95200],{"alt":39,"src":95201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[15,95203,95204],{},"补充：",[15,95206,95207],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[15,95209,95210],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[15,95212,95213],{},"解决方法：",[15,95215,95216],{},"1.cmd",[15,95218,95219],{},"2.依次输入以下代码：",[15,95221,95222],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[15,95224,95225],{},"pip install --upgrade ipython",[15,95227,95228],{},"#升级 memory_profiler 和 setuptools",[15,95230,95231],{},"pip install --upgrade memory_profiler setuptools",{"title":39,"searchDepth":40,"depth":40,"links":95233},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95180,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95240,"title":95241,"body":95242,"description":42,"extension":43,"meta":96888,"navigation":45,"path":96889,"seo":96890,"stem":96891,"__hash__":96892},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95243,"toc":96858},[95244,95247,95251,95255,95316,95319,95324,95328,95333,95338,95343,95348,95351,95356,95360,95364,95397,95400,95403,95406,95458,95461,95497,95500,95542,95546,95567,95569,95606,95608,95613,95615,95620,95624,95627,95655,95659,95663,95716,95720,95812,95816,95820,95823,95828,95832,95857,95862,95866,95869,95872,95875,95878,95881,95884,95887,95899,95903,95907,95910,95942,95945,95968,95971,95997,96000,96026,96029,96063,96066,96128,96132,96135,96139,96142,96168,96171,96174,96179,96182,96251,96253,96258,96319,96322,96333,96339,96344,96348,96351,96364,96368,96383,96385,96408,96410,96436,96439,96442,96445,96493,96495,96500,96504,96508,96535,96539,96566,96569,96574,96579,96669,96673,96731,96736,96739,96742,96784,96788,96844,96849,96852,96855],[10,95245,95241],{"id":95246},"_2创建数组",[60,95248,95250],{"id":95249},"_21-array函数创建数组","2.1 array()函数创建数组",[89,95252,95254],{"id":95253},"_221-函数语句","2.2.1 函数语句",[109,95256,95258],{"className":30371,"code":95257,"language":30373,"meta":39,"style":39},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[115,95259,95260],{"__ignoreMap":39},[118,95261,95262,95265,95268,95270,95272,95274,95276,95278,95281,95283,95286,95288,95291,95293,95295,95297,95300,95302,95305,95307,95310,95312,95314],{"class":120,"line":121},[118,95263,95264],{"class":128},"numpy.array(",[118,95266,95267],{"class":177},"object",[118,95269,12440],{"class":128},[118,95271,93493],{"class":5221},[118,95273,13569],{"class":124},[118,95275,38926],{"class":177},[118,95277,12440],{"class":128},[118,95279,95280],{"class":5221},"copy",[118,95282,13569],{"class":124},[118,95284,95285],{"class":177}," True",[118,95287,12440],{"class":128},[118,95289,95290],{"class":5221},"order",[118,95292,13569],{"class":124},[118,95294,38926],{"class":177},[118,95296,12440],{"class":128},[118,95298,95299],{"class":5221},"subok",[118,95301,13569],{"class":124},[118,95303,95304],{"class":177}," False",[118,95306,12440],{"class":128},[118,95308,95309],{"class":5221},"ndmin",[118,95311,13569],{"class":124},[118,95313,4097],{"class":177},[118,95315,135],{"class":128},[15,95317,95318],{},"参数：",[15,95320,95321],{},[1466,95322],{"alt":39,"src":95323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[89,95325,95327],{"id":95326},"_222-实例","2.2.2 实例",[15,95329,95330],{},[1466,95331],{"alt":39,"src":95332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[15,95334,95335],{},[1466,95336],{"alt":39,"src":95337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[15,95339,95340],{},[1466,95341],{"alt":39,"src":95342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[15,95344,95345],{},[1466,95346],{"alt":39,"src":95347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[15,95349,95350],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[15,95352,95353],{},[1466,95354],{"alt":39,"src":95355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[60,95357,95359],{"id":95358},"_22-随机数创建数组","2.2 随机数创建数组",[89,95361,95363],{"id":95362},"_221-random语句","2.2.1 random语句",[109,95365,95367],{"className":30371,"code":95366,"language":30373,"meta":39,"style":39},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[115,95368,95369,95374,95379,95387,95392],{"__ignoreMap":39},[118,95370,95371],{"class":120,"line":121},[118,95372,95373],{"class":187},"#random.random()\n",[118,95375,95376],{"class":120,"line":40},[118,95377,95378],{"class":187},"#确定随机种子,就是每次运行结果是相同的\n",[118,95380,95381,95383,95385],{"class":120,"line":1183},[118,95382,94600],{"class":128},[118,95384,320],{"class":177},[118,95386,135],{"class":128},[118,95388,95389],{"class":120,"line":1198},[118,95390,95391],{"class":128},"np.random.random()\n",[118,95393,95394],{"class":120,"line":1204},[118,95395,95396],{"class":187},"#生成一个随机的数目\n",[15,95398,95399],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[15,95401,95402],{},"可以指定数组形状 size",[15,95404,95405],{},"①生成一维数组",[109,95407,95409],{"className":30371,"code":95408,"language":30373,"meta":39,"style":39},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[115,95410,95411,95416,95429,95434,95450],{"__ignoreMap":39},[118,95412,95413],{"class":120,"line":121},[118,95414,95415],{"class":187},"#random.random(size())\n",[118,95417,95418,95421,95423,95425,95427],{"class":120,"line":40},[118,95419,95420],{"class":128},"np.random.random(",[118,95422,31489],{"class":5221},[118,95424,174],{"class":124},[118,95426,447],{"class":177},[118,95428,135],{"class":128},[118,95430,95431],{"class":120,"line":1183},[118,95432,95433],{"class":187},"#生成一位的五个元素\n",[118,95435,95436,95438,95440,95442,95444,95446,95448],{"class":120,"line":1198},[118,95437,21],{"class":128},[118,95439,174],{"class":124},[118,95441,95420],{"class":128},[118,95443,31489],{"class":5221},[118,95445,174],{"class":124},[118,95447,421],{"class":177},[118,95449,135],{"class":128},[118,95451,95452,95455],{"class":120,"line":1204},[118,95453,95454],{"class":128},"a.shape ",[118,95456,95457],{"class":187},"#输出数组形状\n",[15,95459,95460],{},"②生成二维数组",[109,95462,95464],{"className":30371,"code":95463,"language":30373,"meta":39,"style":39},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[115,95465,95466,95470,95492],{"__ignoreMap":39},[118,95467,95468],{"class":120,"line":121},[118,95469,93294],{"class":187},[118,95471,95472,95474,95476,95478,95480,95482,95484,95486,95488,95490],{"class":120,"line":40},[118,95473,93299],{"class":128},[118,95475,174],{"class":124},[118,95477,95420],{"class":128},[118,95479,31489],{"class":5221},[118,95481,174],{"class":124},[118,95483,129],{"class":128},[118,95485,421],{"class":177},[118,95487,506],{"class":128},[118,95489,447],{"class":177},[118,95491,30490],{"class":128},[118,95493,95494],{"class":120,"line":1183},[118,95495,95496],{"class":187},"#生成四行五列的数组\n",[15,95498,95499],{},"③生成三维数组",[109,95501,95503],{"className":30371,"code":95502,"language":30373,"meta":39,"style":39},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[115,95504,95505,95510,95537],{"__ignoreMap":39},[118,95506,95507],{"class":120,"line":121},[118,95508,95509],{"class":187},"#三维数组\n",[118,95511,95512,95515,95517,95519,95521,95523,95525,95527,95529,95531,95533,95535],{"class":120,"line":40},[118,95513,95514],{"class":128},"aaa",[118,95516,174],{"class":124},[118,95518,95420],{"class":128},[118,95520,31489],{"class":5221},[118,95522,174],{"class":124},[118,95524,129],{"class":128},[118,95526,206],{"class":177},[118,95528,506],{"class":128},[118,95530,200],{"class":177},[118,95532,506],{"class":128},[118,95534,421],{"class":177},[118,95536,30490],{"class":128},[118,95538,95539],{"class":120,"line":1183},[118,95540,95541],{"class":128},"aaa.shape\n",[89,95543,95545],{"id":95544},"_222-randint语句","2.2.2 randint语句",[109,95547,95549],{"className":30371,"code":95548,"language":30373,"meta":39,"style":39},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[115,95550,95551,95556],{"__ignoreMap":39},[118,95552,95553],{"class":120,"line":121},[118,95554,95555],{"class":187},"#生成随机的整数 random.randint(low,high,size)\n",[118,95557,95558,95560,95562,95564],{"class":120,"line":40},[118,95559,93107],{"class":128},[118,95561,447],{"class":177},[118,95563,13719],{"class":128},[118,95565,95566],{"class":187},"#0~5中的随机一个数\n",[15,95568,95405],{},[109,95570,95572],{"className":30371,"code":95571,"language":30373,"meta":39,"style":39},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[115,95573,95574,95579,95601],{"__ignoreMap":39},[118,95575,95576],{"class":120,"line":121},[118,95577,95578],{"class":187},"#一维\n",[118,95580,95581,95583,95585,95587,95589,95591,95593,95595,95597,95599],{"class":120,"line":40},[118,95582,93107],{"class":128},[118,95584,346],{"class":177},[118,95586,506],{"class":128},[118,95588,600],{"class":177},[118,95590,506],{"class":128},[118,95592,31489],{"class":5221},[118,95594,174],{"class":124},[118,95596,129],{"class":128},[118,95598,574],{"class":177},[118,95600,30490],{"class":128},[118,95602,95603],{"class":120,"line":1183},[118,95604,95605],{"class":187},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[15,95607,95460],{},[15,95609,95610],{},[1466,95611],{"alt":39,"src":95612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[15,95614,95499],{},[15,95616,95617],{},[1466,95618],{"alt":39,"src":95619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[89,95621,95623],{"id":95622},"_222-rand语句","2.2.2 rand语句",[15,95625,95626],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[109,95628,95630],{"className":30371,"code":95629,"language":30373,"meta":39,"style":39},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[115,95631,95632,95645,95650],{"__ignoreMap":39},[118,95633,95634,95637,95639,95641,95643],{"class":120,"line":121},[118,95635,95636],{"class":128},"np.random.rand(",[118,95638,439],{"class":177},[118,95640,506],{"class":128},[118,95642,574],{"class":177},[118,95644,135],{"class":128},[118,95646,95647],{"class":120,"line":40},[118,95648,95649],{"class":187},"#第一个参数100：行数，表示有100个样本\n",[118,95651,95652],{"class":120,"line":1183},[118,95653,95654],{"class":187},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[60,95656,95658],{"id":95657},"_23-arange创建数组","2.3 arange()创建数组",[89,95660,95662],{"id":95661},"_231-函数语句","2.3.1 函数语句",[109,95664,95666],{"className":30371,"code":95665,"language":30373,"meta":39,"style":39},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[115,95667,95668,95682,95687,95692,95697,95702,95707,95712],{"__ignoreMap":39},[118,95669,95670,95673,95675,95677,95680],{"class":120,"line":121},[118,95671,95672],{"class":128},"numpy.arange([start,] stop[, step], ",[118,95674,93493],{"class":5221},[118,95676,174],{"class":124},[118,95678,95679],{"class":177},"None",[118,95681,135],{"class":128},[118,95683,95684],{"class":120,"line":40},[118,95685,95686],{"class":187},"#参数\n",[118,95688,95689],{"class":120,"line":1183},[118,95690,95691],{"class":233},"\"\"\"\n",[118,95693,95694],{"class":120,"line":1198},[118,95695,95696],{"class":233},"start:起始值，可选，默认从 0 开始。\n",[118,95698,95699],{"class":120,"line":1204},[118,95700,95701],{"class":233},"stop:结束值（不包含该值）。\n",[118,95703,95704],{"class":120,"line":1218},[118,95705,95706],{"class":233},"step:步长，可选，默认是 1。可以为浮点数。\n",[118,95708,95709],{"class":120,"line":1224},[118,95710,95711],{"class":233},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[118,95713,95714],{"class":120,"line":1315},[118,95715,95691],{"class":233},[89,95717,95719],{"id":95718},"_232-实例","2.3.2 实例",[109,95721,95723],{"className":30371,"code":95722,"language":30373,"meta":39,"style":39},"#创建一维数组\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",[115,95724,95725,95729,95753,95758,95763,95767,95790,95794,95798,95803,95808],{"__ignoreMap":39},[118,95726,95727],{"class":120,"line":121},[118,95728,93098],{"class":187},[118,95730,95731,95733,95735,95737,95739,95741,95743,95745,95747,95749,95751],{"class":120,"line":40},[118,95732,92995],{"class":128},[118,95734,346],{"class":177},[118,95736,506],{"class":128},[118,95738,853],{"class":177},[118,95740,506],{"class":128},[118,95742,346],{"class":177},[118,95744,506],{"class":128},[118,95746,93493],{"class":5221},[118,95748,174],{"class":124},[118,95750,132],{"class":177},[118,95752,135],{"class":128},[118,95754,95755],{"class":120,"line":1183},[118,95756,95757],{"class":187},"#输出结果：\n",[118,95759,95760],{"class":120,"line":1198},[118,95761,95762],{"class":187},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[118,95764,95765],{"class":120,"line":1204},[118,95766,93940],{"class":187},[118,95768,95769,95772,95774,95776,95778,95781,95783,95785,95787],{"class":120,"line":1218},[118,95770,95771],{"class":128},"np.array([np.arange(",[118,95773,346],{"class":177},[118,95775,506],{"class":128},[118,95777,421],{"class":177},[118,95779,95780],{"class":128},"),np.arange(",[118,95782,421],{"class":177},[118,95784,506],{"class":128},[118,95786,497],{"class":177},[118,95788,95789],{"class":128},")])\n",[118,95791,95792],{"class":120,"line":1224},[118,95793,93557],{"class":187},[118,95795,95796],{"class":120,"line":1315},[118,95797,95691],{"class":233},[118,95799,95800],{"class":120,"line":1321},[118,95801,95802],{"class":233},"array([[1, 2, 3],\n",[118,95804,95805],{"class":120,"line":1333},[118,95806,95807],{"class":233},"       [4, 5, 6]])\n",[118,95809,95810],{"class":120,"line":1616},[118,95811,95691],{"class":233},[60,95813,95815],{"id":95814},"_24-生态分布","2.4 生态分布",[89,95817,95819],{"id":95818},"_241-标准正态分布","2.4.1 标准正态分布",[15,95821,95822],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[15,95824,95825],{},[1466,95826],{"alt":39,"src":95827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[89,95829,95831],{"id":95830},"_242-常规正态分布","2.4.2 常规正态分布",[109,95833,95835],{"className":30371,"code":95834,"language":30373,"meta":39,"style":39},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[115,95836,95837,95842,95847,95852],{"__ignoreMap":39},[118,95838,95839],{"class":120,"line":121},[118,95840,95841],{"class":128},"random.normal(loc,scale,size)也可以生成正态分布\n",[118,95843,95844],{"class":120,"line":40},[118,95845,95846],{"class":187},"#loc:期望\n",[118,95848,95849],{"class":120,"line":1183},[118,95850,95851],{"class":187},"#scale:方差\n",[118,95853,95854],{"class":120,"line":1198},[118,95855,95856],{"class":187},"#size:用于确定是几维的数列\n",[15,95858,95859],{},[1466,95860],{"alt":39,"src":95861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[60,95863,95865],{"id":95864},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[15,95867,95868],{},"ndim:秩，维度个数",[15,95870,95871],{},"size:数组元素的个数",[15,95873,95874],{},"shape:数组的形状",[15,95876,95877],{},"dtype:数组元素的类型",[15,95879,95880],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[15,95882,95883],{},"他们都是属性，通过数组.属性的形式来确定",[15,95885,95886],{},"如果需要输出多个可以通过以下方式：",[109,95888,95890],{"className":30371,"code":95889,"language":30373,"meta":39,"style":39},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[115,95891,95892],{"__ignoreMap":39},[118,95893,95894,95896],{"class":120,"line":121},[118,95895,30408],{"class":177},[118,95897,95898],{"class":128},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[60,95900,95902],{"id":95901},"_26-其他方式创建数组","2.6 其他方式创建数组",[89,95904,95906],{"id":95905},"_261-zeros创建数组","2.6.1 zeros()创建数组",[15,95908,95909],{},"①创建一维数组",[109,95911,95913],{"className":30371,"code":95912,"language":30373,"meta":39,"style":39},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[115,95914,95915,95924,95928,95933,95938],{"__ignoreMap":39},[118,95916,95917,95920,95922],{"class":120,"line":121},[118,95918,95919],{"class":128},"np.zeros(",[118,95921,574],{"class":177},[118,95923,135],{"class":128},[118,95925,95926],{"class":120,"line":40},[118,95927,95691],{"class":233},[118,95929,95930],{"class":120,"line":1183},[118,95931,95932],{"class":233},"输出结果：\n",[118,95934,95935],{"class":120,"line":1198},[118,95936,95937],{"class":233},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[118,95939,95940],{"class":120,"line":1204},[118,95941,95691],{"class":233},[15,95943,95944],{},"上方代码等价于：",[109,95946,95948],{"className":30371,"code":95947,"language":30373,"meta":39,"style":39},"np.zeros(shape=(10))#创建10个元素的0数组\n",[115,95949,95950],{"__ignoreMap":39},[118,95951,95952,95954,95957,95959,95961,95963,95965],{"class":120,"line":121},[118,95953,95919],{"class":128},[118,95955,95956],{"class":5221},"shape",[118,95958,174],{"class":124},[118,95960,129],{"class":128},[118,95962,574],{"class":177},[118,95964,82764],{"class":128},[118,95966,95967],{"class":187},"#创建10个元素的0数组\n",[15,95969,95970],{},"也可以指定类型",[109,95972,95974],{"className":30371,"code":95973,"language":30373,"meta":39,"style":39},"#指定类型\nnp.zeros(5,dtype=int)\n",[115,95975,95976,95981],{"__ignoreMap":39},[118,95977,95978],{"class":120,"line":121},[118,95979,95980],{"class":187},"#指定类型\n",[118,95982,95983,95985,95987,95989,95991,95993,95995],{"class":120,"line":40},[118,95984,95919],{"class":128},[118,95986,447],{"class":177},[118,95988,506],{"class":128},[118,95990,93493],{"class":5221},[118,95992,174],{"class":124},[118,95994,132],{"class":177},[118,95996,135],{"class":128},[15,95998,95999],{},"②创建二维数组",[109,96001,96003],{"className":30371,"code":96002,"language":30373,"meta":39,"style":39},"np.zeros((3,4),dtype=int)\n",[115,96004,96005],{"__ignoreMap":39},[118,96006,96007,96010,96012,96014,96016,96018,96020,96022,96024],{"class":120,"line":121},[118,96008,96009],{"class":128},"np.zeros((",[118,96011,200],{"class":177},[118,96013,506],{"class":128},[118,96015,421],{"class":177},[118,96017,42249],{"class":128},[118,96019,93493],{"class":5221},[118,96021,174],{"class":124},[118,96023,132],{"class":177},[118,96025,135],{"class":128},[15,96027,96028],{},"③创建三维数组",[109,96030,96032],{"className":30371,"code":96031,"language":30373,"meta":39,"style":39},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[115,96033,96034,96039],{"__ignoreMap":39},[118,96035,96036],{"class":120,"line":121},[118,96037,96038],{"class":187},"#创建三维数组\n",[118,96040,96041,96043,96045,96047,96049,96051,96053,96055,96057,96059,96061],{"class":120,"line":40},[118,96042,96009],{"class":128},[118,96044,200],{"class":177},[118,96046,506],{"class":128},[118,96048,421],{"class":177},[118,96050,506],{"class":128},[118,96052,447],{"class":177},[118,96054,42249],{"class":128},[118,96056,93493],{"class":5221},[118,96058,174],{"class":124},[118,96060,132],{"class":177},[118,96062,135],{"class":128},[15,96064,96065],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[109,96067,96069],{"className":30371,"code":96068,"language":30373,"meta":39,"style":39},"#使用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",[115,96070,96071,96076,96091,96096,96101,96123],{"__ignoreMap":39},[118,96072,96073],{"class":120,"line":121},[118,96074,96075],{"class":187},"#使用zeros_like将创建的一维数组变成全0的数组\n",[118,96077,96078,96080,96082,96084,96086,96088],{"class":120,"line":40},[118,96079,21],{"class":128},[118,96081,174],{"class":124},[118,96083,92995],{"class":128},[118,96085,421],{"class":177},[118,96087,557],{"class":128},[118,96089,96090],{"class":187},"#这个得到的结果：一维数组0，1，2，3\n",[118,96092,96093],{"class":120,"line":1183},[118,96094,96095],{"class":128},"np.zeros_like(a)\n",[118,96097,96098],{"class":120,"line":1198},[118,96099,96100],{"class":187},"#使用zeros_like将创建的二维数组变成全0的数组\n",[118,96102,96103,96105,96107,96109,96111,96113,96115,96117,96119,96121],{"class":120,"line":1204},[118,96104,93299],{"class":128},[118,96106,174],{"class":124},[118,96108,95420],{"class":128},[118,96110,31489],{"class":5221},[118,96112,174],{"class":124},[118,96114,129],{"class":128},[118,96116,421],{"class":177},[118,96118,506],{"class":128},[118,96120,447],{"class":177},[118,96122,30490],{"class":128},[118,96124,96125],{"class":120,"line":1218},[118,96126,96127],{"class":128},"np.zeros_like(aa)\n",[89,96129,96131],{"id":96130},"_262-ones创建数组","2.6.2 ones()创建数组",[15,96133,96134],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[89,96136,96138],{"id":96137},"_263-empty创建数组","2.6.3 empty()创建数组",[15,96140,96141],{},"①empty()用法",[109,96143,96145],{"className":30371,"code":96144,"language":30373,"meta":39,"style":39},"numpy.empty(shape,dtype=float,order='c')\n",[115,96146,96147],{"__ignoreMap":39},[118,96148,96149,96152,96154,96156,96158,96160,96162,96164,96166],{"class":120,"line":121},[118,96150,96151],{"class":128},"numpy.empty(shape,",[118,96153,93493],{"class":5221},[118,96155,174],{"class":124},[118,96157,168],{"class":177},[118,96159,506],{"class":128},[118,96161,95290],{"class":5221},[118,96163,174],{"class":124},[118,96165,76021],{"class":233},[118,96167,135],{"class":128},[15,96169,96170],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[15,96172,96173],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[15,96175,96176],{},[1466,96177],{"alt":39,"src":96178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[15,96180,96181],{},"②empty()用法",[109,96183,96185],{"className":30371,"code":96184,"language":30373,"meta":39,"style":39},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[115,96186,96187,96208,96220,96241,96246],{"__ignoreMap":39},[118,96188,96189,96191,96193,96196,96198,96200,96202,96204,96206],{"class":120,"line":121},[118,96190,973],{"class":128},[118,96192,174],{"class":124},[118,96194,96195],{"class":128},"np.empty(",[118,96197,574],{"class":177},[118,96199,506],{"class":128},[118,96201,93493],{"class":5221},[118,96203,174],{"class":124},[118,96205,132],{"class":177},[118,96207,135],{"class":128},[118,96209,96210,96212,96214,96216,96218],{"class":120,"line":40},[118,96211,948],{"class":128},[118,96213,174],{"class":124},[118,96215,92995],{"class":128},[118,96217,447],{"class":177},[118,96219,135],{"class":128},[118,96221,96222,96225,96227,96230,96232,96234,96237,96239],{"class":120,"line":1183},[118,96223,96224],{"class":128},"np.add(",[118,96226,206],{"class":177},[118,96228,96229],{"class":128},",x,",[118,96231,93047],{"class":5221},[118,96233,174],{"class":124},[118,96235,96236],{"class":128},"y[:",[118,96238,447],{"class":177},[118,96240,4661],{"class":128},[118,96242,96243],{"class":120,"line":1198},[118,96244,96245],{"class":187},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[118,96247,96248],{"class":120,"line":1204},[118,96249,96250],{"class":128},"y\n",[15,96252,11519],{},[15,96254,96255],{},[1466,96256],{"alt":39,"src":96257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[109,96259,96261],{"className":30371,"code":96260,"language":30373,"meta":39,"style":39},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[115,96262,96263,96279,96299,96314],{"__ignoreMap":39},[118,96264,96265,96267,96269,96271,96273,96275,96277],{"class":120,"line":121},[118,96266,948],{"class":128},[118,96268,174],{"class":124},[118,96270,92995],{"class":128},[118,96272,346],{"class":177},[118,96274,506],{"class":128},[118,96276,472],{"class":177},[118,96278,135],{"class":128},[118,96280,96281,96283,96285,96287,96289,96291,96293,96295,96297],{"class":120,"line":40},[118,96282,973],{"class":128},[118,96284,174],{"class":124},[118,96286,96195],{"class":128},[118,96288,447],{"class":177},[118,96290,506],{"class":128},[118,96292,93493],{"class":5221},[118,96294,174],{"class":124},[118,96296,132],{"class":177},[118,96298,135],{"class":128},[118,96300,96301,96304,96306,96308,96310,96312],{"class":120,"line":1183},[118,96302,96303],{"class":128},"np.add(x,",[118,96305,206],{"class":177},[118,96307,506],{"class":128},[118,96309,93047],{"class":5221},[118,96311,174],{"class":124},[118,96313,93442],{"class":128},[118,96315,96316],{"class":120,"line":1198},[118,96317,96318],{"class":187},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[15,96320,96321],{},"③empty_like()",[15,96323,96324],{},[278,96325,96326,96327,96332],{},"创建一个",[278,96328,96329],{},[278,96330,96331],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[15,96334,96335,96338],{},[115,96336,96337],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[15,96340,96341],{},[1466,96342],{"alt":39,"src":96343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[89,96345,96347],{"id":96346},"_264-用法","2.6.4 ？？用法",[15,96349,96350],{},"当想查看一个函数的参数时，可以通过？？来实现",[109,96352,96354],{"className":30371,"code":96353,"language":30373,"meta":39,"style":39},"np.full??\n",[115,96355,96356],{"__ignoreMap":39},[118,96357,96358,96361],{"class":120,"line":121},[118,96359,96360],{"class":128},"np.full",[118,96362,96363],{"class":77396},"??\n",[89,96365,96367],{"id":96366},"_265-full创建数组","2.6.5 full()创建数组",[109,96369,96371],{"className":30371,"code":96370,"language":30373,"meta":39,"style":39},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[115,96372,96373,96378],{"__ignoreMap":39},[118,96374,96375],{"class":120,"line":121},[118,96376,96377],{"class":128},"full(shape,fill_value)\n",[118,96379,96380],{"class":120,"line":40},[118,96381,96382],{"class":128},"创建全为某个指定值的数组\n",[15,96384,94523],{},[109,96386,96388],{"className":30371,"code":96387,"language":30373,"meta":39,"style":39},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[115,96389,96390,96395],{"__ignoreMap":39},[118,96391,96392],{"class":120,"line":121},[118,96393,96394],{"class":187},"#创建一个一维数组,以20进行填充\n",[118,96396,96397,96400,96402,96404,96406],{"class":120,"line":40},[118,96398,96399],{"class":128},"np.full(",[118,96401,574],{"class":177},[118,96403,506],{"class":128},[118,96405,828],{"class":177},[118,96407,135],{"class":128},[15,96409,93284],{},[109,96411,96413],{"className":30371,"code":96412,"language":30373,"meta":39,"style":39},"#创建二维数组\nnp.full((3,5),11)\n",[115,96414,96415,96419],{"__ignoreMap":39},[118,96416,96417],{"class":120,"line":121},[118,96418,93940],{"class":187},[118,96420,96421,96424,96426,96428,96430,96432,96434],{"class":120,"line":40},[118,96422,96423],{"class":128},"np.full((",[118,96425,200],{"class":177},[118,96427,506],{"class":128},[118,96429,447],{"class":177},[118,96431,42249],{"class":128},[118,96433,600],{"class":177},[118,96435,135],{"class":128},[15,96437,96438],{},"③full_like用法",[15,96440,96441],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[15,96443,96444],{},"这里是指定填充而已",[109,96446,96448],{"className":30371,"code":96447,"language":30373,"meta":39,"style":39},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[115,96449,96450,96455,96479,96484],{"__ignoreMap":39},[118,96451,96452],{"class":120,"line":121},[118,96453,96454],{"class":187},"#创建一个指定形状数组\n",[118,96456,96457,96459,96461,96463,96465,96467,96469,96471,96473,96475,96477],{"class":120,"line":40},[118,96458,21],{"class":128},[118,96460,174],{"class":124},[118,96462,92995],{"class":128},[118,96464,346],{"class":177},[118,96466,506],{"class":128},[118,96468,453],{"class":177},[118,96470,93000],{"class":128},[118,96472,421],{"class":177},[118,96474,506],{"class":128},[118,96476,548],{"class":177},[118,96478,135],{"class":128},[118,96480,96481],{"class":120,"line":1183},[118,96482,96483],{"class":187},"#进行指定填充\n",[118,96485,96486,96489,96491],{"class":120,"line":1198},[118,96487,96488],{"class":128},"np.full_like(a,",[118,96490,574],{"class":177},[118,96492,135],{"class":128},[15,96494,11519],{},[15,96496,96497],{},[1466,96498],{"alt":39,"src":96499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[89,96501,96503],{"id":96502},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22003,96505,96507],{"id":96506},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[109,96509,96511],{"className":30371,"code":96510,"language":30373,"meta":39,"style":39},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[115,96512,96513,96530],{"__ignoreMap":39},[118,96514,96515,96518,96520,96522,96524,96526,96528],{"class":120,"line":121},[118,96516,96517],{"class":128},"np.eye(",[118,96519,421],{"class":177},[118,96521,506],{"class":128},[118,96523,93493],{"class":5221},[118,96525,174],{"class":124},[118,96527,132],{"class":177},[118,96529,135],{"class":128},[118,96531,96532],{"class":120,"line":40},[118,96533,96534],{"class":187},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22003,96536,96538],{"id":96537},"_2662-法2identity","2.6.6.2 法2：identity()",[109,96540,96542],{"className":30371,"code":96541,"language":30373,"meta":39,"style":39},"#identity()\nnp.identity(5,dtype=int)\n",[115,96543,96544,96549],{"__ignoreMap":39},[118,96545,96546],{"class":120,"line":121},[118,96547,96548],{"class":187},"#identity()\n",[118,96550,96551,96554,96556,96558,96560,96562,96564],{"class":120,"line":40},[118,96552,96553],{"class":128},"np.identity(",[118,96555,447],{"class":177},[118,96557,506],{"class":128},[118,96559,93493],{"class":5221},[118,96561,174],{"class":124},[118,96563,132],{"class":177},[118,96565,135],{"class":128},[15,96567,96568],{},"两个函数是有区别的",[15,96570,96571],{},[1466,96572],{"alt":39,"src":96573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[15,96575,96576],{},[1466,96577],{"alt":39,"src":96578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[109,96580,96582],{"className":30371,"code":96581,"language":30373,"meta":39,"style":39},"# 创建一个 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",[115,96583,96584,96589,96601,96606,96611,96616,96621,96625,96630,96650,96654,96659,96664],{"__ignoreMap":39},[118,96585,96586],{"class":120,"line":121},[118,96587,96588],{"class":187},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[118,96590,96591,96593,96595,96597,96599],{"class":120,"line":40},[118,96592,96517],{"class":128},[118,96594,200],{"class":177},[118,96596,12440],{"class":128},[118,96598,421],{"class":177},[118,96600,135],{"class":128},[118,96602,96603],{"class":120,"line":1183},[118,96604,96605],{"class":187},"# 输出:\n",[118,96607,96608],{"class":120,"line":1198},[118,96609,96610],{"class":187},"# [[1. 0. 0. 0.]\n",[118,96612,96613],{"class":120,"line":1204},[118,96614,96615],{"class":187},"#  [0. 1. 0. 0.]\n",[118,96617,96618],{"class":120,"line":1218},[118,96619,96620],{"class":187},"#  [0. 0. 1. 0.]]\n",[118,96622,96623],{"class":120,"line":1224},[118,96624,2404],{"emptyLinePlaceholder":45},[118,96626,96627],{"class":120,"line":1315},[118,96628,96629],{"class":187},"# 对角线向上偏移1\n",[118,96631,96632,96634,96636,96638,96640,96642,96644,96646,96648],{"class":120,"line":1321},[118,96633,96517],{"class":128},[118,96635,200],{"class":177},[118,96637,12440],{"class":128},[118,96639,421],{"class":177},[118,96641,12440],{"class":128},[118,96643,621],{"class":5221},[118,96645,174],{"class":124},[118,96647,346],{"class":177},[118,96649,135],{"class":128},[118,96651,96652],{"class":120,"line":1333},[118,96653,96605],{"class":187},[118,96655,96656],{"class":120,"line":1616},[118,96657,96658],{"class":187},"# [[0. 1. 0. 0.]\n",[118,96660,96661],{"class":120,"line":1621},[118,96662,96663],{"class":187},"#  [0. 0. 1. 0.]\n",[118,96665,96666],{"class":120,"line":1627},[118,96667,96668],{"class":187},"#  [0. 0. 0. 1.]]\n",[89,96670,96672],{"id":96671},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[109,96674,96676],{"className":30371,"code":96675,"language":30373,"meta":39,"style":39},"#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",[115,96677,96678,96683,96687,96692,96697,96702,96707,96712,96717,96722,96727],{"__ignoreMap":39},[118,96679,96680],{"class":120,"line":121},[118,96681,96682],{"class":187},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[118,96684,96685],{"class":120,"line":40},[118,96686,95691],{"class":233},[118,96688,96689],{"class":120,"line":1183},[118,96690,96691],{"class":233},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[118,96693,96694],{"class":120,"line":1198},[118,96695,96696],{"class":233},"参数介绍：\n",[118,96698,96699],{"class":120,"line":1204},[118,96700,96701],{"class":233},"start：序列的起始值\n",[118,96703,96704],{"class":120,"line":1218},[118,96705,96706],{"class":233},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[118,96708,96709],{"class":120,"line":1224},[118,96710,96711],{"class":233},"num：要生长的等步长的样本数量，默认为50\n",[118,96713,96714],{"class":120,"line":1315},[118,96715,96716],{"class":233},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[118,96718,96719],{"class":120,"line":1321},[118,96720,96721],{"class":233},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[118,96723,96724],{"class":120,"line":1333},[118,96725,96726],{"class":233},"dtype：ndarry的数据类型\n",[118,96728,96729],{"class":120,"line":1616},[118,96730,95691],{"class":233},[15,96732,96733],{},[1466,96734],{"alt":39,"src":96735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[15,96737,96738],{},"这里num=是可以省略的",[15,96740,96741],{},"也就是下方两行代码结果是一模一样的",[109,96743,96745],{"className":30371,"code":96744,"language":30373,"meta":39,"style":39},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[115,96746,96747,96764],{"__ignoreMap":39},[118,96748,96749,96752,96754,96756,96758,96760,96762],{"class":120,"line":121},[118,96750,96751],{"class":128},"np.linspace(",[118,96753,346],{"class":177},[118,96755,506],{"class":128},[118,96757,447],{"class":177},[118,96759,506],{"class":128},[118,96761,447],{"class":177},[118,96763,135],{"class":128},[118,96765,96766,96768,96770,96772,96774,96776,96778,96780,96782],{"class":120,"line":40},[118,96767,96751],{"class":128},[118,96769,346],{"class":177},[118,96771,506],{"class":128},[118,96773,447],{"class":177},[118,96775,506],{"class":128},[118,96777,1669],{"class":5221},[118,96779,174],{"class":124},[118,96781,447],{"class":177},[118,96783,135],{"class":128},[89,96785,96787],{"id":96786},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[109,96789,96791],{"className":30371,"code":96790,"language":30373,"meta":39,"style":39},"#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",[115,96792,96793,96798,96802,96807,96812,96817,96822,96826,96831,96836,96840],{"__ignoreMap":39},[118,96794,96795],{"class":120,"line":121},[118,96796,96797],{"class":187},"#logspace函数用于创建一个等比数列，格式如下：\n",[118,96799,96800],{"class":120,"line":40},[118,96801,95691],{"class":233},[118,96803,96804],{"class":120,"line":1183},[118,96805,96806],{"class":233},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[118,96808,96809],{"class":120,"line":1198},[118,96810,96811],{"class":233},"参数为：\n",[118,96813,96814],{"class":120,"line":1204},[118,96815,96816],{"class":233},"start:序列的起始位置为：base**start\n",[118,96818,96819],{"class":120,"line":1218},[118,96820,96821],{"class":233},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[118,96823,96824],{"class":120,"line":1224},[118,96825,96711],{"class":233},[118,96827,96828],{"class":120,"line":1315},[118,96829,96830],{"class":233},"endpoint：是否包含 stop 这个值，默认是 True\n",[118,96832,96833],{"class":120,"line":1321},[118,96834,96835],{"class":233},"base：对数的底数，默认是 10（常见对数）\n",[118,96837,96838],{"class":120,"line":1333},[118,96839,96726],{"class":233},[118,96841,96842],{"class":120,"line":1616},[118,96843,95691],{"class":233},[15,96845,96846],{},[1466,96847],{"alt":39,"src":96848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[15,96850,96851],{},"logspace()函数中的num参数也是可以不写num=的",[15,96853,96854],{},"endpoint是不可以省略的",[5131,96856,96857],{},"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":39,"searchDepth":40,"depth":40,"links":96859},[96860,96864,96869,96873,96877,96878],{"id":95249,"depth":40,"text":95250,"children":96861},[96862,96863],{"id":95253,"depth":1183,"text":95254},{"id":95326,"depth":1183,"text":95327},{"id":95358,"depth":40,"text":95359,"children":96865},[96866,96867,96868],{"id":95362,"depth":1183,"text":95363},{"id":95544,"depth":1183,"text":95545},{"id":95622,"depth":1183,"text":95623},{"id":95657,"depth":40,"text":95658,"children":96870},[96871,96872],{"id":95661,"depth":1183,"text":95662},{"id":95718,"depth":1183,"text":95719},{"id":95814,"depth":40,"text":95815,"children":96874},[96875,96876],{"id":95818,"depth":1183,"text":95819},{"id":95830,"depth":1183,"text":95831},{"id":95864,"depth":40,"text":95865},{"id":95901,"depth":40,"text":95902,"children":96879},[96880,96881,96882,96883,96884,96885,96886,96887],{"id":95905,"depth":1183,"text":95906},{"id":96130,"depth":1183,"text":96131},{"id":96137,"depth":1183,"text":96138},{"id":96346,"depth":1183,"text":96347},{"id":96366,"depth":1183,"text":96367},{"id":96502,"depth":1183,"text":96503},{"id":96671,"depth":1183,"text":96672},{"id":96786,"depth":1183,"text":96787},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95241,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96894,"title":96895,"body":96896,"description":42,"extension":43,"meta":96989,"navigation":45,"path":96990,"seo":96991,"stem":96992,"__hash__":96993},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96897,"toc":96987},[96898,96901,96904,96907,96910,96913,96916,96919,96922,96925,96928,96931,96933,96936,96939,96944,96947,96950,96984],[10,96899,96895],{"id":96900},"_20魔法命令mprun",[15,96902,96903],{},"逐行分析数据内存的使用情况",[15,96905,96906],{},"语法格式：",[15,96908,96909],{},"%mprun -f 模块名.函数名 模块名.函数名()",[15,96911,96912],{},"分析结果列如下：",[15,96914,96915],{},"Line行号",[15,96917,96918],{},"Mem usage内存使用大小",[15,96920,96921],{},"increment内存增量",[15,96923,96924],{},"Line content代码内容",[15,96926,96927],{},"补充说明：",[15,96929,96930],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[15,96932,95196],{},[15,96934,96935],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[15,96937,96938],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[15,96940,96941],{},[1466,96942],{"alt":39,"src":96943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[15,96945,96946],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[15,96948,96949],{},"这时候需要重新加载模块",[109,96951,96953],{"className":30371,"code":96952,"language":30373,"meta":39,"style":39},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[115,96954,96955,96960,96967,96972],{"__ignoreMap":39},[118,96956,96957],{"class":120,"line":121},[118,96958,96959],{"class":187},"#重新加载模块\n",[118,96961,96962,96964],{"class":120,"line":40},[118,96963,30385],{"class":124},[118,96965,96966],{"class":128}," importlib\n",[118,96968,96969],{"class":120,"line":1183},[118,96970,96971],{"class":128},"importlib.reload(mprun_test)\n",[118,96973,96974,96976,96979,96981],{"class":120,"line":1198},[118,96975,456],{"class":124},[118,96977,96978],{"class":128},"mprun ",[118,96980,660],{"class":124},[118,96982,96983],{"class":128},"f mprun_test.fun_test mprun_test.fun_test()\n",[5131,96985,96986],{},"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":39,"searchDepth":40,"depth":40,"links":96988},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96895,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96995,"title":96996,"body":96997,"description":42,"extension":43,"meta":97014,"navigation":45,"path":97015,"seo":97016,"stem":97017,"__hash__":97018},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96998,"toc":97012},[96999,97002,97007],[10,97000,96996],{"id":97001},"_3一维数组的索引和切片",[15,97003,97004],{},[1466,97005],{"alt":39,"src":97006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[15,97008,97009],{},[1466,97010],{"alt":39,"src":97011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":39,"searchDepth":40,"depth":40,"links":97013},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96996,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97020,"title":97021,"body":97022,"description":42,"extension":43,"meta":97505,"navigation":45,"path":97506,"seo":97507,"stem":97508,"__hash__":97509},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97023,"toc":97503},[97024,97027,97030,97035,97068,97071,97109,97112,97146,97149,97254,97257,97294,97297,97398,97401,97452,97455,97497,97500],[10,97025,97021],{"id":97026},"_4二维数组的索引与切片",[15,97028,97029],{},"①获取指定单个元素",[15,97031,97032],{},[1466,97033],{"alt":39,"src":97034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[109,97036,97038],{"className":30371,"code":97037,"language":30373,"meta":39,"style":39},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[115,97039,97040,97045,97050,97055],{"__ignoreMap":39},[118,97041,97042],{"class":120,"line":121},[118,97043,97044],{"class":187},"#获取元素9\n",[118,97046,97047],{"class":120,"line":40},[118,97048,97049],{"class":187},"#先获取所在行，再获取所在列\n",[118,97051,97052],{"class":120,"line":1183},[118,97053,97054],{"class":187},"#数组[行索引号，列索引号]\n",[118,97056,97057,97060,97062,97064,97066],{"class":120,"line":1198},[118,97058,97059],{"class":128},"a[",[118,97061,346],{"class":177},[118,97063,506],{"class":128},[118,97065,206],{"class":177},[118,97067,33239],{"class":128},[15,97069,97070],{},"②获取整行元素",[109,97072,97074],{"className":30371,"code":97073,"language":30373,"meta":39,"style":39},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[115,97075,97076,97081,97086,97094,97099],{"__ignoreMap":39},[118,97077,97078],{"class":120,"line":121},[118,97079,97080],{"class":187},"#获取整行 数组[行索引号]\n",[118,97082,97083],{"class":120,"line":40},[118,97084,97085],{"class":187},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[118,97087,97088,97090,97092],{"class":120,"line":1183},[118,97089,97059],{"class":128},[118,97091,206],{"class":177},[118,97093,33239],{"class":128},[118,97095,97096],{"class":120,"line":1198},[118,97097,97098],{"class":187},"#也可以负索引获取一行\n",[118,97100,97101,97103,97105,97107],{"class":120,"line":1204},[118,97102,97059],{"class":128},[118,97104,660],{"class":124},[118,97106,346],{"class":177},[118,97108,33239],{"class":128},[15,97110,97111],{},"③获取整列元素",[109,97113,97115],{"className":30371,"code":97114,"language":30373,"meta":39,"style":39},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[115,97116,97117,97122,97131,97136],{"__ignoreMap":39},[118,97118,97119],{"class":120,"line":121},[118,97120,97121],{"class":187},"#获取整列 数组名[:,列索引]\n",[118,97123,97124,97127,97129],{"class":120,"line":40},[118,97125,97126],{"class":128},"a[:,",[118,97128,206],{"class":177},[118,97130,33239],{"class":128},[118,97132,97133],{"class":120,"line":1183},[118,97134,97135],{"class":187},"#也可以负索引获取一列\n",[118,97137,97138,97140,97142,97144],{"class":120,"line":1198},[118,97139,97126],{"class":128},[118,97141,660],{"class":124},[118,97143,346],{"class":177},[118,97145,33239],{"class":128},[15,97147,97148],{},"④部分行部分列的元素",[109,97150,97152],{"className":30371,"code":97151,"language":30373,"meta":39,"style":39},"#部分行部分列 数组名[行切片，列切片]\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",[115,97153,97154,97159,97169,97173,97177,97182,97187,97191,97203,97207,97211,97216,97221,97226,97231,97235,97240],{"__ignoreMap":39},[118,97155,97156],{"class":120,"line":121},[118,97157,97158],{"class":187},"#部分行部分列 数组名[行切片，列切片]\n",[118,97160,97161,97164,97166],{"class":120,"line":40},[118,97162,97163],{"class":128},"a[:",[118,97165,206],{"class":177},[118,97167,97168],{"class":128},",:]\n",[118,97170,97171],{"class":120,"line":1183},[118,97172,93557],{"class":187},[118,97174,97175],{"class":120,"line":1198},[118,97176,93921],{"class":233},[118,97178,97179],{"class":120,"line":1204},[118,97180,97181],{"class":233},"array([[ 1,  2,  3,  4,  5,  6],\n",[118,97183,97184],{"class":120,"line":1218},[118,97185,97186],{"class":233},"       [ 7,  8,  9, 10, 11, 12]])\n",[118,97188,97189],{"class":120,"line":1224},[118,97190,93921],{"class":233},[118,97192,97193,97195,97197,97199,97201],{"class":120,"line":1315},[118,97194,97126],{"class":128},[118,97196,346],{"class":177},[118,97198,987],{"class":128},[118,97200,421],{"class":177},[118,97202,33239],{"class":128},[118,97204,97205],{"class":120,"line":1321},[118,97206,93557],{"class":187},[118,97208,97209],{"class":120,"line":1333},[118,97210,93921],{"class":233},[118,97212,97213],{"class":120,"line":1616},[118,97214,97215],{"class":233},"array([[ 2,  3,  4],\n",[118,97217,97218],{"class":120,"line":1621},[118,97219,97220],{"class":233},"       [ 8,  9, 10],\n",[118,97222,97223],{"class":120,"line":1627},[118,97224,97225],{"class":233},"       [14, 15, 16],\n",[118,97227,97228],{"class":120,"line":1632},[118,97229,97230],{"class":233},"       [20, 21, 22]])\n",[118,97232,97233],{"class":120,"line":1646},[118,97234,93921],{"class":233},[118,97236,97237],{"class":120,"line":1651},[118,97238,97239],{"class":187},"#对列行同时进行切片，使用了step参数\n",[118,97241,97242,97245,97247,97250,97252],{"class":120,"line":1657},[118,97243,97244],{"class":128},"a[::",[118,97246,206],{"class":177},[118,97248,97249],{"class":128},",::",[118,97251,206],{"class":177},[118,97253,33239],{"class":128},[15,97255,97256],{},"⑤同时获取两个元素",[109,97258,97260],{"className":30371,"code":97259,"language":30373,"meta":39,"style":39},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[115,97261,97262,97267,97272],{"__ignoreMap":39},[118,97263,97264],{"class":120,"line":121},[118,97265,97266],{"class":187},"#同时获取第三行第二列，第四行第一列\n",[118,97268,97269],{"class":120,"line":40},[118,97270,97271],{"class":187},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[118,97273,97274,97277,97279,97281,97283,97285,97287,97289,97291],{"class":120,"line":1183},[118,97275,97276],{"class":128},"a[(",[118,97278,206],{"class":177},[118,97280,506],{"class":128},[118,97282,200],{"class":177},[118,97284,42240],{"class":128},[118,97286,346],{"class":177},[118,97288,506],{"class":128},[118,97290,320],{"class":177},[118,97292,97293],{"class":128},")]\n",[15,97295,97296],{},"⑥切片，对行进行反向获取",[109,97298,97300],{"className":30371,"code":97299,"language":30373,"meta":39,"style":39},"#切片 对所有行进行反向获取\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",[115,97301,97302,97307,97317,97321,97325,97330,97335,97340,97345,97349,97354,97370,97374,97379,97384,97389,97394],{"__ignoreMap":39},[118,97303,97304],{"class":120,"line":121},[118,97305,97306],{"class":187},"#切片 对所有行进行反向获取\n",[118,97308,97309,97311,97313,97315],{"class":120,"line":40},[118,97310,97244],{"class":128},[118,97312,660],{"class":124},[118,97314,346],{"class":177},[118,97316,33239],{"class":128},[118,97318,97319],{"class":120,"line":1183},[118,97320,93557],{"class":187},[118,97322,97323],{"class":120,"line":1198},[118,97324,93921],{"class":233},[118,97326,97327],{"class":120,"line":1204},[118,97328,97329],{"class":233},"array([[19, 20, 21, 22, 23, 24],\n",[118,97331,97332],{"class":120,"line":1218},[118,97333,97334],{"class":233},"       [13, 14, 15, 16, 17, 18],\n",[118,97336,97337],{"class":120,"line":1224},[118,97338,97339],{"class":233},"       [ 7,  8,  9, 10, 11, 12],\n",[118,97341,97342],{"class":120,"line":1315},[118,97343,97344],{"class":233},"       [ 1,  2,  3,  4,  5,  6]])\n",[118,97346,97347],{"class":120,"line":1321},[118,97348,93921],{"class":233},[118,97350,97351],{"class":120,"line":1333},[118,97352,97353],{"class":187},"#对行列都进行反向切片获取\n",[118,97355,97356,97358,97360,97362,97364,97366,97368],{"class":120,"line":1616},[118,97357,97244],{"class":128},[118,97359,660],{"class":124},[118,97361,346],{"class":177},[118,97363,97249],{"class":128},[118,97365,660],{"class":124},[118,97367,346],{"class":177},[118,97369,33239],{"class":128},[118,97371,97372],{"class":120,"line":1621},[118,97373,93921],{"class":233},[118,97375,97376],{"class":120,"line":1627},[118,97377,97378],{"class":233},"array([[24, 23, 22, 21, 20, 19],\n",[118,97380,97381],{"class":120,"line":1632},[118,97382,97383],{"class":233},"       [18, 17, 16, 15, 14, 13],\n",[118,97385,97386],{"class":120,"line":1646},[118,97387,97388],{"class":233},"       [12, 11, 10,  9,  8,  7],\n",[118,97390,97391],{"class":120,"line":1651},[118,97392,97393],{"class":233},"       [ 6,  5,  4,  3,  2,  1]])\n",[118,97395,97396],{"class":120,"line":1657},[118,97397,93921],{"class":233},[15,97399,97400],{},"⑦修改元素",[109,97402,97404],{"className":30371,"code":97403,"language":30373,"meta":39,"style":39},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[115,97405,97406,97411,97429,97434],{"__ignoreMap":39},[118,97407,97408],{"class":120,"line":121},[118,97409,97410],{"class":187},"#获取前两行和前两列\n",[118,97412,97413,97416,97418,97420,97422,97425,97427],{"class":120,"line":40},[118,97414,97415],{"class":128},"sub_a",[118,97417,174],{"class":124},[118,97419,97163],{"class":128},[118,97421,206],{"class":177},[118,97423,97424],{"class":128},",:",[118,97426,206],{"class":177},[118,97428,33239],{"class":128},[118,97430,97431],{"class":120,"line":1183},[118,97432,97433],{"class":187},"#修改sub_a第一个元素的值\n",[118,97435,97436,97439,97441,97443,97445,97447,97449],{"class":120,"line":1198},[118,97437,97438],{"class":128},"sub_a[",[118,97440,320],{"class":177},[118,97442,506],{"class":128},[118,97444,320],{"class":177},[118,97446,1068],{"class":128},[118,97448,174],{"class":124},[118,97450,97451],{"class":177},"100\n",[15,97453,97454],{},"⑧数组复制copy()",[109,97456,97458],{"className":30371,"code":97457,"language":30373,"meta":39,"style":39},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[115,97459,97460,97465,97475,97480],{"__ignoreMap":39},[118,97461,97462],{"class":120,"line":121},[118,97463,97464],{"class":187},"#数组复制\n",[118,97466,97467,97470,97472],{"class":120,"line":40},[118,97468,97469],{"class":128},"copy_a",[118,97471,174],{"class":124},[118,97473,97474],{"class":128},"np.copy(sub_a)\n",[118,97476,97477],{"class":120,"line":1183},[118,97478,97479],{"class":187},"#修改copy_a后不影响原数组\n",[118,97481,97482,97485,97487,97489,97491,97493,97495],{"class":120,"line":1198},[118,97483,97484],{"class":128},"copy_a[",[118,97486,320],{"class":177},[118,97488,506],{"class":128},[118,97490,320],{"class":177},[118,97492,1068],{"class":128},[118,97494,174],{"class":124},[118,97496,97451],{"class":177},[15,97498,97499],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5131,97501,97502],{},"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":39,"searchDepth":40,"depth":40,"links":97504},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97021,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97511,"title":97512,"body":97513,"description":42,"extension":43,"meta":98005,"navigation":45,"path":98006,"seo":98007,"stem":98008,"__hash__":98009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97514,"toc":97997},[97515,97518,97522,97525,97528,97581,97584,97609,97612,97631,97651,97654,97670,97674,97720,97724,97766,97770,97773,97776,97779,97782,97785,97847,97907,97911,97914,97971,97975,97980,97989,97994],[10,97516,97512],{"id":97517},"_5改变数组的维度",[60,97519,97521],{"id":97520},"_51-使用reshape","5.1 使用reshape()",[15,97523,97524],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[15,97526,97527],{},"①一维数组转换为二维数组",[109,97529,97531],{"className":30371,"code":97530,"language":30373,"meta":39,"style":39},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[115,97532,97533,97549,97554,97559,97564],{"__ignoreMap":39},[118,97534,97535,97537,97539,97541,97543,97545,97547],{"class":120,"line":121},[118,97536,21],{"class":128},[118,97538,174],{"class":124},[118,97540,92995],{"class":128},[118,97542,346],{"class":177},[118,97544,506],{"class":128},[118,97546,651],{"class":177},[118,97548,135],{"class":128},[118,97550,97551],{"class":120,"line":40},[118,97552,97553],{"class":187},"#将一维数组进行转换\n",[118,97555,97556],{"class":120,"line":1183},[118,97557,97558],{"class":187},"#注意点：元素个数不可以变\n",[118,97560,97561],{"class":120,"line":1198},[118,97562,97563],{"class":187},"#转换维度要保持一致，不一致就异常！！！\n",[118,97565,97566,97568,97570,97573,97575,97577,97579],{"class":120,"line":1204},[118,97567,93299],{"class":128},[118,97569,174],{"class":124},[118,97571,97572],{"class":128},"a.reshape(",[118,97574,206],{"class":177},[118,97576,506],{"class":128},[118,97578,472],{"class":177},[118,97580,135],{"class":128},[15,97582,97583],{},"②一维数组转换为三维数组",[109,97585,97587],{"className":30371,"code":97586,"language":30373,"meta":39,"style":39},"aaa=a.reshape(2,3,2)\n",[115,97588,97589],{"__ignoreMap":39},[118,97590,97591,97593,97595,97597,97599,97601,97603,97605,97607],{"class":120,"line":121},[118,97592,95514],{"class":128},[118,97594,174],{"class":124},[118,97596,97572],{"class":128},[118,97598,206],{"class":177},[118,97600,506],{"class":128},[118,97602,200],{"class":177},[118,97604,506],{"class":128},[118,97606,206],{"class":177},[118,97608,135],{"class":128},[15,97610,97611],{},"③二维数组转化为一维数组",[109,97613,97615],{"className":30371,"code":97614,"language":30373,"meta":39,"style":39},"#知道元素个数：\naa.reshape(12)\n",[115,97616,97617,97622],{"__ignoreMap":39},[118,97618,97619],{"class":120,"line":121},[118,97620,97621],{"class":187},"#知道元素个数：\n",[118,97623,97624,97627,97629],{"class":120,"line":40},[118,97625,97626],{"class":128},"aa.reshape(",[118,97628,626],{"class":177},[118,97630,135],{"class":128},[109,97632,97634],{"className":30371,"code":97633,"language":30373,"meta":39,"style":39},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[115,97635,97636,97641],{"__ignoreMap":39},[118,97637,97638],{"class":120,"line":121},[118,97639,97640],{"class":187},"#不知道元素个数，参数传递-1\n",[118,97642,97643,97645,97647,97649],{"class":120,"line":40},[118,97644,97626],{"class":128},[118,97646,660],{"class":124},[118,97648,346],{"class":177},[118,97650,135],{"class":128},[15,97652,97653],{},"④三维数组转换为一维数组",[109,97655,97657],{"className":30371,"code":97656,"language":30373,"meta":39,"style":39},"aaa.reshape(-1)\n",[115,97658,97659],{"__ignoreMap":39},[118,97660,97661,97664,97666,97668],{"class":120,"line":121},[118,97662,97663],{"class":128},"aaa.reshape(",[118,97665,660],{"class":124},[118,97667,346],{"class":177},[118,97669,135],{"class":128},[60,97671,97673],{"id":97672},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[109,97675,97677],{"className":30371,"code":97676,"language":30373,"meta":39,"style":39},"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",[115,97678,97679,97706,97711,97715],{"__ignoreMap":39},[118,97680,97681,97683,97685,97687,97689,97691,97693,97695,97697,97699,97701,97703],{"class":120,"line":121},[118,97682,93299],{"class":128},[118,97684,174],{"class":124},[118,97686,92995],{"class":128},[118,97688,346],{"class":177},[118,97690,506],{"class":128},[118,97692,651],{"class":177},[118,97694,93000],{"class":128},[118,97696,206],{"class":177},[118,97698,506],{"class":128},[118,97700,472],{"class":177},[118,97702,557],{"class":128},[118,97704,97705],{"class":187},"#转换为2行6列的数组\n",[118,97707,97708],{"class":120,"line":40},[118,97709,97710],{"class":128},"aa.revel()\n",[118,97712,97713],{"class":120,"line":1183},[118,97714,93557],{"class":187},[118,97716,97717],{"class":120,"line":1198},[118,97718,97719],{"class":187},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[60,97721,97723],{"id":97722},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[109,97725,97727],{"className":30371,"code":97726,"language":30373,"meta":39,"style":39},"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",[115,97728,97729,97753,97758,97762],{"__ignoreMap":39},[118,97730,97731,97733,97735,97737,97739,97741,97743,97745,97747,97749,97751],{"class":120,"line":121},[118,97732,93299],{"class":128},[118,97734,174],{"class":124},[118,97736,92995],{"class":128},[118,97738,346],{"class":177},[118,97740,506],{"class":128},[118,97742,651],{"class":177},[118,97744,93000],{"class":128},[118,97746,206],{"class":177},[118,97748,506],{"class":128},[118,97750,472],{"class":177},[118,97752,135],{"class":128},[118,97754,97755],{"class":120,"line":40},[118,97756,97757],{"class":128},"aa.flatten()\n",[118,97759,97760],{"class":120,"line":1183},[118,97761,93557],{"class":187},[118,97763,97764],{"class":120,"line":1198},[118,97765,97719],{"class":187},[60,97767,97769],{"id":97768},"_54-使用resize","5.4 使用resize()",[15,97771,97772],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[15,97774,97775],{},"通过resize方法可以改变数组的维度",[15,97777,97778],{},"#resize修改数组维度",[15,97780,97781],{},"#以元组的形式指定形状",[15,97783,97784],{},"#改变的是原数组",[109,97786,97788],{"className":30371,"code":97787,"language":30373,"meta":39,"style":39},"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",[115,97789,97790,97806,97826,97839,97843],{"__ignoreMap":39},[118,97791,97792,97794,97796,97798,97800,97802,97804],{"class":120,"line":121},[118,97793,21],{"class":128},[118,97795,174],{"class":124},[118,97797,92995],{"class":128},[118,97799,346],{"class":177},[118,97801,506],{"class":128},[118,97803,651],{"class":177},[118,97805,135],{"class":128},[118,97807,97808,97811,97813,97815,97817,97819,97821,97823],{"class":120,"line":40},[118,97809,97810],{"class":128},"a.shape",[118,97812,174],{"class":124},[118,97814,129],{"class":128},[118,97816,206],{"class":177},[118,97818,506],{"class":128},[118,97820,472],{"class":177},[118,97822,557],{"class":128},[118,97824,97825],{"class":187},"#改变了原数组\n",[118,97827,97828,97830,97832,97835,97837],{"class":120,"line":1183},[118,97829,21],{"class":128},[118,97831,174],{"class":124},[118,97833,97834],{"class":128},"resize((",[118,97836,626],{"class":177},[118,97838,30490],{"class":128},[118,97840,97841],{"class":120,"line":1198},[118,97842,93557],{"class":187},[118,97844,97845],{"class":120,"line":1204},[118,97846,97719],{"class":187},[109,97848,97850],{"className":30371,"code":97849,"language":30373,"meta":39,"style":39},"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",[115,97851,97852,97865,97869,97873,97878,97883,97888,97893,97898,97903],{"__ignoreMap":39},[118,97853,97854,97857,97859,97861,97863],{"class":120,"line":121},[118,97855,97856],{"class":128},"a.resize((",[118,97858,472],{"class":177},[118,97860,506],{"class":128},[118,97862,206],{"class":177},[118,97864,30490],{"class":128},[118,97866,97867],{"class":120,"line":40},[118,97868,93557],{"class":187},[118,97870,97871],{"class":120,"line":1183},[118,97872,93921],{"class":233},[118,97874,97875],{"class":120,"line":1198},[118,97876,97877],{"class":233},"array([[ 1,  2],\n",[118,97879,97880],{"class":120,"line":1204},[118,97881,97882],{"class":233},"       [ 3,  4],\n",[118,97884,97885],{"class":120,"line":1218},[118,97886,97887],{"class":233},"       [ 5,  6],\n",[118,97889,97890],{"class":120,"line":1224},[118,97891,97892],{"class":233},"       [ 7,  8],\n",[118,97894,97895],{"class":120,"line":1315},[118,97896,97897],{"class":233},"       [ 9, 10],\n",[118,97899,97900],{"class":120,"line":1321},[118,97901,97902],{"class":233},"       [11, 12]])\n",[118,97904,97905],{"class":120,"line":1333},[118,97906,93921],{"class":233},[60,97908,97910],{"id":97909},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[15,97912,97913],{},"改变了原数组",[109,97915,97917],{"className":30371,"code":97916,"language":30373,"meta":39,"style":39},"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",[115,97918,97919,97935,97951,97955,97959,97963,97967],{"__ignoreMap":39},[118,97920,97921,97923,97925,97927,97929,97931,97933],{"class":120,"line":121},[118,97922,21],{"class":128},[118,97924,174],{"class":124},[118,97926,92995],{"class":128},[118,97928,346],{"class":177},[118,97930,506],{"class":128},[118,97932,651],{"class":177},[118,97934,135],{"class":128},[118,97936,97937,97939,97941,97943,97945,97947,97949],{"class":120,"line":40},[118,97938,97810],{"class":128},[118,97940,174],{"class":124},[118,97942,129],{"class":128},[118,97944,206],{"class":177},[118,97946,506],{"class":128},[118,97948,472],{"class":177},[118,97950,135],{"class":128},[118,97952,97953],{"class":120,"line":1183},[118,97954,93557],{"class":187},[118,97956,97957],{"class":120,"line":1198},[118,97958,93921],{"class":233},[118,97960,97961],{"class":120,"line":1204},[118,97962,97181],{"class":233},[118,97964,97965],{"class":120,"line":1218},[118,97966,97186],{"class":233},[118,97968,97969],{"class":120,"line":1224},[118,97970,93921],{"class":233},[60,97972,97974],{"id":97973},"_56-重要比较","5.6 重要比较：",[15,97976,97977],{},[1466,97978],{"alt":39,"src":97979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[15,97981,97982,97983,97985,97986,97988],{},"口诀：NumPy 函数要么用 ",[115,97984,95956],{},"，要么用 ",[115,97987,31489],{},"，创建结构用 shape，造数据用 size",[15,97990,97991],{},[1466,97992],{"alt":39,"src":97993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5131,97995,97996],{},"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":39,"searchDepth":40,"depth":40,"links":97998},[97999,98000,98001,98002,98003,98004],{"id":97520,"depth":40,"text":97521},{"id":97672,"depth":40,"text":97673},{"id":97722,"depth":40,"text":97723},{"id":97768,"depth":40,"text":97769},{"id":97909,"depth":40,"text":97910},{"id":97973,"depth":40,"text":97974},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97512,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98011,"title":98012,"body":98013,"description":42,"extension":43,"meta":99085,"navigation":45,"path":99086,"seo":99087,"stem":99088,"__hash__":99089},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98014,"toc":99079},[98015,98018,98022,98025,98028,98031,98096,98099,98139,98142,98224,98227,98232,98254,98256,98261,98266,98269,98272,98427,98430,98632,98636,98639,98642,98710,98712,98717,98720,98723,98803,98807,98810,98812,98885,98887,98892,98894,98974,98978,98981,98984,98987,98990,98993,98996,99076],[10,98016,98012],{"id":98017},"_6数组的拼接",[60,98019,98021],{"id":98020},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[15,98023,98024],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[15,98026,98027],{},"函数内部传两个数列构成的数列或者元组",[15,98029,98030],{},"①一维数组的拼接",[109,98032,98034],{"className":30371,"code":98033,"language":30373,"meta":39,"style":39},"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",[115,98035,98036,98056,98076,98081,98086,98091],{"__ignoreMap":39},[118,98037,98038,98040,98042,98044,98046,98048,98050,98052,98054],{"class":120,"line":121},[118,98039,21],{"class":128},[118,98041,174],{"class":124},[118,98043,93017],{"class":128},[118,98045,346],{"class":177},[118,98047,506],{"class":128},[118,98049,206],{"class":177},[118,98051,506],{"class":128},[118,98053,200],{"class":177},[118,98055,4661],{"class":128},[118,98057,98058,98060,98062,98064,98066,98068,98070,98072,98074],{"class":120,"line":40},[118,98059,391],{"class":128},[118,98061,174],{"class":124},[118,98063,93017],{"class":128},[118,98065,421],{"class":177},[118,98067,506],{"class":128},[118,98069,447],{"class":177},[118,98071,506],{"class":128},[118,98073,472],{"class":177},[118,98075,4661],{"class":128},[118,98077,98078],{"class":120,"line":1183},[118,98079,98080],{"class":187},"#调用concatenate进行数组拼接\n",[118,98082,98083],{"class":120,"line":1198},[118,98084,98085],{"class":128},"np.concatenate((a,b))\n",[118,98087,98088],{"class":120,"line":1204},[118,98089,98090],{"class":187},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[118,98092,98093],{"class":120,"line":1218},[118,98094,98095],{"class":187},"#np.concatenate([a,b])\n",[15,98097,98098],{},"②一维多个数组拼接",[109,98100,98102],{"className":30371,"code":98101,"language":30373,"meta":39,"style":39},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[115,98103,98104,98109,98129,98134],{"__ignoreMap":39},[118,98105,98106],{"class":120,"line":121},[118,98107,98108],{"class":187},"#也可以多个数组进行拼接\n",[118,98110,98111,98113,98115,98117,98119,98121,98123,98125,98127],{"class":120,"line":40},[118,98112,416],{"class":128},[118,98114,174],{"class":124},[118,98116,93017],{"class":128},[118,98118,574],{"class":177},[118,98120,506],{"class":128},[118,98122,600],{"class":177},[118,98124,506],{"class":128},[118,98126,651],{"class":177},[118,98128,4661],{"class":128},[118,98130,98131],{"class":120,"line":1183},[118,98132,98133],{"class":128},"c\n",[118,98135,98136],{"class":120,"line":1198},[118,98137,98138],{"class":128},"np.concatenate((a,b,c))\n",[15,98140,98141],{},"③二维数组拼接",[109,98143,98145],{"className":30371,"code":98144,"language":30373,"meta":39,"style":39},"#二维数组使用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",[115,98146,98147,98152,98176,98201,98206,98211],{"__ignoreMap":39},[118,98148,98149],{"class":120,"line":121},[118,98150,98151],{"class":187},"#二维数组使用concatenate进行拼接\n",[118,98153,98154,98156,98158,98160,98162,98164,98166,98168,98170,98172,98174],{"class":120,"line":40},[118,98155,93299],{"class":128},[118,98157,174],{"class":124},[118,98159,92995],{"class":128},[118,98161,346],{"class":177},[118,98163,506],{"class":128},[118,98165,651],{"class":177},[118,98167,93000],{"class":128},[118,98169,200],{"class":177},[118,98171,506],{"class":128},[118,98173,421],{"class":177},[118,98175,135],{"class":128},[118,98177,98178,98181,98183,98185,98187,98189,98191,98193,98195,98197,98199],{"class":120,"line":1183},[118,98179,98180],{"class":128},"bb",[118,98182,174],{"class":124},[118,98184,92995],{"class":128},[118,98186,465],{"class":177},[118,98188,506],{"class":128},[118,98190,770],{"class":177},[118,98192,93000],{"class":128},[118,98194,200],{"class":177},[118,98196,506],{"class":128},[118,98198,421],{"class":177},[118,98200,135],{"class":128},[118,98202,98203],{"class":120,"line":1198},[118,98204,98205],{"class":187},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[118,98207,98208],{"class":120,"line":1204},[118,98209,98210],{"class":187},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[118,98212,98213,98216,98218,98220,98222],{"class":120,"line":1218},[118,98214,98215],{"class":128},"np.concatenate((aa,bb),",[118,98217,47507],{"class":5221},[118,98219,174],{"class":124},[118,98221,320],{"class":177},[118,98223,135],{"class":128},[15,98225,98226],{},"结果：",[15,98228,98229],{},[1466,98230],{"alt":39,"src":98231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[109,98233,98235],{"className":30371,"code":98234,"language":30373,"meta":39,"style":39},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[115,98236,98237,98242],{"__ignoreMap":39},[118,98238,98239],{"class":120,"line":121},[118,98240,98241],{"class":187},"#指定axis为1进行拼接\n",[118,98243,98244,98246,98248,98250,98252],{"class":120,"line":40},[118,98245,98215],{"class":128},[118,98247,47507],{"class":5221},[118,98249,174],{"class":124},[118,98251,346],{"class":177},[118,98253,135],{"class":128},[15,98255,98226],{},[15,98257,98258],{},[1466,98259],{"alt":39,"src":98260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[15,98262,98263],{},[278,98264,98265],{},"二维数组总结：0竖着方向，1横着方向",[15,98267,98268],{},"④三维数组拼接",[15,98270,98271],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[109,98273,98275],{"className":30371,"code":98274,"language":30373,"meta":39,"style":39},"#两个三行六列\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",[115,98276,98277,98282,98310,98340,98345,98362,98367,98372,98377,98394,98399,98404,98409,98422],{"__ignoreMap":39},[118,98278,98279],{"class":120,"line":121},[118,98280,98281],{"class":187},"#两个三行六列\n",[118,98283,98284,98286,98288,98290,98292,98294,98296,98298,98300,98302,98304,98306,98308],{"class":120,"line":40},[118,98285,95514],{"class":128},[118,98287,174],{"class":124},[118,98289,92995],{"class":128},[118,98291,346],{"class":177},[118,98293,506],{"class":128},[118,98295,453],{"class":177},[118,98297,93000],{"class":128},[118,98299,206],{"class":177},[118,98301,506],{"class":128},[118,98303,200],{"class":177},[118,98305,506],{"class":128},[118,98307,472],{"class":177},[118,98309,135],{"class":128},[118,98311,98312,98315,98317,98319,98321,98323,98326,98328,98330,98332,98334,98336,98338],{"class":120,"line":1183},[118,98313,98314],{"class":128},"bbb",[118,98316,174],{"class":124},[118,98318,92995],{"class":128},[118,98320,465],{"class":177},[118,98322,506],{"class":128},[118,98324,98325],{"class":177},"137",[118,98327,93000],{"class":128},[118,98329,206],{"class":177},[118,98331,506],{"class":128},[118,98333,200],{"class":177},[118,98335,506],{"class":128},[118,98337,472],{"class":177},[118,98339,135],{"class":128},[118,98341,98342],{"class":120,"line":1198},[118,98343,98344],{"class":187},"#axis=0\n",[118,98346,98347,98349,98351,98354,98356,98358,98360],{"class":120,"line":1204},[118,98348,823],{"class":128},[118,98350,174],{"class":124},[118,98352,98353],{"class":128},"np.concatenate((aaa,bbb),",[118,98355,47507],{"class":5221},[118,98357,174],{"class":124},[118,98359,320],{"class":177},[118,98361,135],{"class":128},[118,98363,98364],{"class":120,"line":1218},[118,98365,98366],{"class":128},"s.shape\n",[118,98368,98369],{"class":120,"line":1224},[118,98370,98371],{"class":187},"#输出：(4,3,6)\n",[118,98373,98374],{"class":120,"line":1315},[118,98375,98376],{"class":187},"#axis=1\n",[118,98378,98379,98382,98384,98386,98388,98390,98392],{"class":120,"line":1321},[118,98380,98381],{"class":128},"ss",[118,98383,174],{"class":124},[118,98385,98353],{"class":128},[118,98387,47507],{"class":5221},[118,98389,174],{"class":124},[118,98391,346],{"class":177},[118,98393,135],{"class":128},[118,98395,98396],{"class":120,"line":1333},[118,98397,98398],{"class":128},"ss.shape\n",[118,98400,98401],{"class":120,"line":1616},[118,98402,98403],{"class":187},"#输出：(2,6,6)\n",[118,98405,98406],{"class":120,"line":1621},[118,98407,98408],{"class":187},"#axis=2\n",[118,98410,98411,98413,98415,98417,98419],{"class":120,"line":1627},[118,98412,98353],{"class":128},[118,98414,47507],{"class":5221},[118,98416,174],{"class":124},[118,98418,206],{"class":177},[118,98420,98421],{"class":128},").shape\n",[118,98423,98424],{"class":120,"line":1632},[118,98425,98426],{"class":187},"#输出：（2，3，12）\n",[15,98428,98429],{},"⑤四维数组拼接",[109,98431,98433],{"className":30371,"code":98432,"language":30373,"meta":39,"style":39},"#两个三行六列\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",[115,98434,98435,98439,98467,98495,98520,98546,98550,98563,98568,98572,98584,98589,98593,98605,98610,98615,98627],{"__ignoreMap":39},[118,98436,98437],{"class":120,"line":121},[118,98438,98281],{"class":187},[118,98440,98441,98443,98445,98447,98449,98451,98453,98455,98457,98459,98461,98463,98465],{"class":120,"line":40},[118,98442,95514],{"class":128},[118,98444,174],{"class":124},[118,98446,92995],{"class":128},[118,98448,346],{"class":177},[118,98450,506],{"class":128},[118,98452,453],{"class":177},[118,98454,93000],{"class":128},[118,98456,206],{"class":177},[118,98458,506],{"class":128},[118,98460,200],{"class":177},[118,98462,506],{"class":128},[118,98464,472],{"class":177},[118,98466,135],{"class":128},[118,98468,98469,98471,98473,98475,98477,98479,98481,98483,98485,98487,98489,98491,98493],{"class":120,"line":1183},[118,98470,98314],{"class":128},[118,98472,174],{"class":124},[118,98474,92995],{"class":128},[118,98476,465],{"class":177},[118,98478,506],{"class":128},[118,98480,98325],{"class":177},[118,98482,93000],{"class":128},[118,98484,206],{"class":177},[118,98486,506],{"class":128},[118,98488,200],{"class":177},[118,98490,506],{"class":128},[118,98492,472],{"class":177},[118,98494,135],{"class":128},[118,98496,98497,98500,98502,98504,98506,98508,98510,98512,98514,98516,98518],{"class":120,"line":1198},[118,98498,98499],{"class":128},"aaaa",[118,98501,174],{"class":124},[118,98503,97663],{"class":128},[118,98505,206],{"class":177},[118,98507,506],{"class":128},[118,98509,200],{"class":177},[118,98511,506],{"class":128},[118,98513,200],{"class":177},[118,98515,506],{"class":128},[118,98517,206],{"class":177},[118,98519,135],{"class":128},[118,98521,98522,98525,98527,98530,98532,98534,98536,98538,98540,98542,98544],{"class":120,"line":1204},[118,98523,98524],{"class":128},"bbbb",[118,98526,174],{"class":124},[118,98528,98529],{"class":128},"bbb.reshape(",[118,98531,206],{"class":177},[118,98533,506],{"class":128},[118,98535,200],{"class":177},[118,98537,506],{"class":128},[118,98539,200],{"class":177},[118,98541,506],{"class":128},[118,98543,206],{"class":177},[118,98545,135],{"class":128},[118,98547,98548],{"class":120,"line":1218},[118,98549,98344],{"class":187},[118,98551,98552,98555,98557,98559,98561],{"class":120,"line":1224},[118,98553,98554],{"class":128},"np.concatenate((aaaa,bbbb),",[118,98556,47507],{"class":5221},[118,98558,174],{"class":124},[118,98560,320],{"class":177},[118,98562,98421],{"class":128},[118,98564,98565],{"class":120,"line":1315},[118,98566,98567],{"class":187},"#结果：（4，3，3，2）\n",[118,98569,98570],{"class":120,"line":1321},[118,98571,98376],{"class":187},[118,98573,98574,98576,98578,98580,98582],{"class":120,"line":1333},[118,98575,98554],{"class":128},[118,98577,47507],{"class":5221},[118,98579,174],{"class":124},[118,98581,346],{"class":177},[118,98583,98421],{"class":128},[118,98585,98586],{"class":120,"line":1616},[118,98587,98588],{"class":187},"#结果：（2，6，3，2）\n",[118,98590,98591],{"class":120,"line":1621},[118,98592,98408],{"class":187},[118,98594,98595,98597,98599,98601,98603],{"class":120,"line":1627},[118,98596,98554],{"class":128},[118,98598,47507],{"class":5221},[118,98600,174],{"class":124},[118,98602,206],{"class":177},[118,98604,98421],{"class":128},[118,98606,98607],{"class":120,"line":1632},[118,98608,98609],{"class":187},"#结果：（2，3，6，2）\n",[118,98611,98612],{"class":120,"line":1646},[118,98613,98614],{"class":187},"#axis=3\n",[118,98616,98617,98619,98621,98623,98625],{"class":120,"line":1651},[118,98618,98554],{"class":128},[118,98620,47507],{"class":5221},[118,98622,174],{"class":124},[118,98624,200],{"class":177},[118,98626,98421],{"class":128},[118,98628,98629],{"class":120,"line":1657},[118,98630,98631],{"class":187},"#结果：（2，3，3，4）\n",[60,98633,98635],{"id":98634},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[15,98637,98638],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[15,98640,98641],{},"①二维数组",[109,98643,98645],{"className":30371,"code":98644,"language":30373,"meta":39,"style":39},"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",[115,98646,98647,98671,98695,98700,98705],{"__ignoreMap":39},[118,98648,98649,98651,98653,98655,98657,98659,98661,98663,98665,98667,98669],{"class":120,"line":121},[118,98650,93299],{"class":128},[118,98652,174],{"class":124},[118,98654,92995],{"class":128},[118,98656,346],{"class":177},[118,98658,506],{"class":128},[118,98660,651],{"class":177},[118,98662,93000],{"class":128},[118,98664,200],{"class":177},[118,98666,506],{"class":128},[118,98668,421],{"class":177},[118,98670,135],{"class":128},[118,98672,98673,98675,98677,98679,98681,98683,98685,98687,98689,98691,98693],{"class":120,"line":40},[118,98674,98180],{"class":128},[118,98676,174],{"class":124},[118,98678,92995],{"class":128},[118,98680,465],{"class":177},[118,98682,506],{"class":128},[118,98684,770],{"class":177},[118,98686,93000],{"class":128},[118,98688,200],{"class":177},[118,98690,506],{"class":128},[118,98692,421],{"class":177},[118,98694,135],{"class":128},[118,98696,98697],{"class":120,"line":1183},[118,98698,98699],{"class":128},"np.hstack((aa,bb))\n",[118,98701,98702],{"class":120,"line":1198},[118,98703,98704],{"class":187},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[118,98706,98707],{"class":120,"line":1204},[118,98708,98709],{"class":187},"#np.hstack([aa,bb])\n",[15,98711,98226],{},[15,98713,98714],{},[1466,98715],{"alt":39,"src":98716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[15,98718,98719],{},"等效于concatenate()函数中axis=1时的情况",[15,98721,98722],{},"②三维数组",[109,98724,98726],{"className":30371,"code":98725,"language":30373,"meta":39,"style":39},"#两个三行六列\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",[115,98727,98728,98732,98760,98788,98793,98798],{"__ignoreMap":39},[118,98729,98730],{"class":120,"line":121},[118,98731,98281],{"class":187},[118,98733,98734,98736,98738,98740,98742,98744,98746,98748,98750,98752,98754,98756,98758],{"class":120,"line":40},[118,98735,95514],{"class":128},[118,98737,174],{"class":124},[118,98739,92995],{"class":128},[118,98741,346],{"class":177},[118,98743,506],{"class":128},[118,98745,453],{"class":177},[118,98747,93000],{"class":128},[118,98749,206],{"class":177},[118,98751,506],{"class":128},[118,98753,200],{"class":177},[118,98755,506],{"class":128},[118,98757,472],{"class":177},[118,98759,135],{"class":128},[118,98761,98762,98764,98766,98768,98770,98772,98774,98776,98778,98780,98782,98784,98786],{"class":120,"line":1183},[118,98763,98314],{"class":128},[118,98765,174],{"class":124},[118,98767,92995],{"class":128},[118,98769,465],{"class":177},[118,98771,506],{"class":128},[118,98773,98325],{"class":177},[118,98775,93000],{"class":128},[118,98777,206],{"class":177},[118,98779,506],{"class":128},[118,98781,200],{"class":177},[118,98783,506],{"class":128},[118,98785,472],{"class":177},[118,98787,135],{"class":128},[118,98789,98790],{"class":120,"line":1198},[118,98791,98792],{"class":187},"#使用hstack\n",[118,98794,98795],{"class":120,"line":1204},[118,98796,98797],{"class":128},"np.hstack((aaa,bbb)).shape\n",[118,98799,98800],{"class":120,"line":1218},[118,98801,98802],{"class":187},"#输出：（2，6，6）\n",[60,98804,98806],{"id":98805},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[15,98808,98809],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[15,98811,98641],{},[109,98813,98815],{"className":30371,"code":98814,"language":30373,"meta":39,"style":39},"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",[115,98816,98817,98841,98865,98870,98875,98880],{"__ignoreMap":39},[118,98818,98819,98821,98823,98825,98827,98829,98831,98833,98835,98837,98839],{"class":120,"line":121},[118,98820,93299],{"class":128},[118,98822,174],{"class":124},[118,98824,92995],{"class":128},[118,98826,346],{"class":177},[118,98828,506],{"class":128},[118,98830,651],{"class":177},[118,98832,93000],{"class":128},[118,98834,200],{"class":177},[118,98836,506],{"class":128},[118,98838,421],{"class":177},[118,98840,135],{"class":128},[118,98842,98843,98845,98847,98849,98851,98853,98855,98857,98859,98861,98863],{"class":120,"line":40},[118,98844,98180],{"class":128},[118,98846,174],{"class":124},[118,98848,92995],{"class":128},[118,98850,465],{"class":177},[118,98852,506],{"class":128},[118,98854,770],{"class":177},[118,98856,93000],{"class":128},[118,98858,200],{"class":177},[118,98860,506],{"class":128},[118,98862,421],{"class":177},[118,98864,135],{"class":128},[118,98866,98867],{"class":120,"line":1183},[118,98868,98869],{"class":187},"#vstack 垂直方向进行堆叠\n",[118,98871,98872],{"class":120,"line":1198},[118,98873,98874],{"class":128},"np.vstack((aa,bb))\n",[118,98876,98877],{"class":120,"line":1204},[118,98878,98879],{"class":187},"#与hstack传的参数类似，等价于：\n",[118,98881,98882],{"class":120,"line":1218},[118,98883,98884],{"class":128},"np.vstack([aa,bb])\n",[15,98886,98226],{},[15,98888,98889],{},[1466,98890],{"alt":39,"src":98891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[15,98893,98722],{},[109,98895,98897],{"className":30371,"code":98896,"language":30373,"meta":39,"style":39},"#两个三行六列\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",[115,98898,98899,98903,98931,98959,98964,98969],{"__ignoreMap":39},[118,98900,98901],{"class":120,"line":121},[118,98902,98281],{"class":187},[118,98904,98905,98907,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927,98929],{"class":120,"line":40},[118,98906,95514],{"class":128},[118,98908,174],{"class":124},[118,98910,92995],{"class":128},[118,98912,346],{"class":177},[118,98914,506],{"class":128},[118,98916,453],{"class":177},[118,98918,93000],{"class":128},[118,98920,206],{"class":177},[118,98922,506],{"class":128},[118,98924,200],{"class":177},[118,98926,506],{"class":128},[118,98928,472],{"class":177},[118,98930,135],{"class":128},[118,98932,98933,98935,98937,98939,98941,98943,98945,98947,98949,98951,98953,98955,98957],{"class":120,"line":1183},[118,98934,98314],{"class":128},[118,98936,174],{"class":124},[118,98938,92995],{"class":128},[118,98940,465],{"class":177},[118,98942,506],{"class":128},[118,98944,98325],{"class":177},[118,98946,93000],{"class":128},[118,98948,206],{"class":177},[118,98950,506],{"class":128},[118,98952,200],{"class":177},[118,98954,506],{"class":128},[118,98956,472],{"class":177},[118,98958,135],{"class":128},[118,98960,98961],{"class":120,"line":1198},[118,98962,98963],{"class":187},"#使用vstack\n",[118,98965,98966],{"class":120,"line":1204},[118,98967,98968],{"class":128},"np.vstack((aaa,bbb)).shape\n",[118,98970,98971],{"class":120,"line":1218},[118,98972,98973],{"class":187},"#输出：（4，3，6）\n",[60,98975,98977],{"id":98976},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[15,98979,98980],{},"该方法是三维数组特有的方法",[15,98982,98983],{},"也就是说",[15,98985,98986],{},"一维数组拼接方法用：concatenate()",[15,98988,98989],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[15,98991,98992],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[15,98994,98995],{},"四维数组及多维数组只能用concatenate进行拼接",[109,98997,98999],{"className":30371,"code":98998,"language":30373,"meta":39,"style":39},"#两个三行六列\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",[115,99000,99001,99005,99033,99061,99066,99071],{"__ignoreMap":39},[118,99002,99003],{"class":120,"line":121},[118,99004,98281],{"class":187},[118,99006,99007,99009,99011,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031],{"class":120,"line":40},[118,99008,95514],{"class":128},[118,99010,174],{"class":124},[118,99012,92995],{"class":128},[118,99014,346],{"class":177},[118,99016,506],{"class":128},[118,99018,453],{"class":177},[118,99020,93000],{"class":128},[118,99022,206],{"class":177},[118,99024,506],{"class":128},[118,99026,200],{"class":177},[118,99028,506],{"class":128},[118,99030,472],{"class":177},[118,99032,135],{"class":128},[118,99034,99035,99037,99039,99041,99043,99045,99047,99049,99051,99053,99055,99057,99059],{"class":120,"line":1183},[118,99036,98314],{"class":128},[118,99038,174],{"class":124},[118,99040,92995],{"class":128},[118,99042,465],{"class":177},[118,99044,506],{"class":128},[118,99046,98325],{"class":177},[118,99048,93000],{"class":128},[118,99050,206],{"class":177},[118,99052,506],{"class":128},[118,99054,200],{"class":177},[118,99056,506],{"class":128},[118,99058,472],{"class":177},[118,99060,135],{"class":128},[118,99062,99063],{"class":120,"line":1198},[118,99064,99065],{"class":187},"#使用dstack\n",[118,99067,99068],{"class":120,"line":1204},[118,99069,99070],{"class":128},"np.dstack((aaa,bbb)).shape\n",[118,99072,99073],{"class":120,"line":1218},[118,99074,99075],{"class":187},"#结果：（2，3，12）\n",[5131,99077,99078],{},"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":39,"searchDepth":40,"depth":40,"links":99080},[99081,99082,99083,99084],{"id":98020,"depth":40,"text":98021},{"id":98634,"depth":40,"text":98635},{"id":98805,"depth":40,"text":98806},{"id":98976,"depth":40,"text":98977},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98012,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99091,"title":99092,"body":99093,"description":42,"extension":43,"meta":99368,"navigation":45,"path":99369,"seo":99370,"stem":99371,"__hash__":99372},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99094,"toc":99366},[99095,99098,99101,99195,99198,99201,99204,99207,99210,99213,99216,99219,99363],[10,99096,99092],{"id":99097},"_7数组转置",[15,99099,99100],{},"使用transpose()函数",[109,99102,99104],{"className":30371,"code":99103,"language":30373,"meta":39,"style":39},"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",[115,99105,99106,99116,99140,99145,99150,99155,99160,99168,99172,99176,99181,99186,99191],{"__ignoreMap":39},[118,99107,99108,99110,99112,99114],{"class":120,"line":121},[118,99109,30385],{"class":124},[118,99111,31373],{"class":128},[118,99113,31376],{"class":124},[118,99115,31379],{"class":128},[118,99117,99118,99120,99122,99124,99126,99128,99130,99132,99134,99136,99138],{"class":120,"line":40},[118,99119,21],{"class":128},[118,99121,174],{"class":124},[118,99123,31710],{"class":128},[118,99125,346],{"class":177},[118,99127,506],{"class":128},[118,99129,651],{"class":177},[118,99131,93000],{"class":128},[118,99133,421],{"class":177},[118,99135,506],{"class":128},[118,99137,200],{"class":177},[118,99139,135],{"class":128},[118,99141,99142],{"class":120,"line":1183},[118,99143,99144],{"class":187},"#二维数组转置\n",[118,99146,99147],{"class":120,"line":1198},[118,99148,99149],{"class":187},"#调用transpose()函数\n",[118,99151,99152],{"class":120,"line":1204},[118,99153,99154],{"class":128},"a.transpose()\n",[118,99156,99157],{"class":120,"line":1218},[118,99158,99159],{"class":187},"#对于二维数组也可以采用.T来实现\n",[118,99161,99162,99165],{"class":120,"line":1224},[118,99163,99164],{"class":128},"a.T",[118,99166,99167],{"class":187},"#与上述代码一样\n",[118,99169,99170],{"class":120,"line":1315},[118,99171,93557],{"class":187},[118,99173,99174],{"class":120,"line":1321},[118,99175,93921],{"class":233},[118,99177,99178],{"class":120,"line":1333},[118,99179,99180],{"class":233},"array([[ 1,  4,  7, 10],\n",[118,99182,99183],{"class":120,"line":1616},[118,99184,99185],{"class":233},"       [ 2,  5,  8, 11],\n",[118,99187,99188],{"class":120,"line":1621},[118,99189,99190],{"class":233},"       [ 3,  6,  9, 12]])\n",[118,99192,99193],{"class":120,"line":1627},[118,99194,93921],{"class":233},[15,99196,99197],{},"也可以使用np.transpose()的形式",[15,99199,99200],{},"#多维数组进行转置 np.transpose()",[15,99202,99203],{},"#对二维数组也可以使用np.transpose()进行转置",[15,99205,99206],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[15,99208,99209],{},"第二个参数，维度可以理解为用axis中的数来理解",[15,99211,99212],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[15,99214,99215],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[15,99217,99218],{},"四维及以上的数组也是一样的道理",[109,99220,99222],{"className":30371,"code":99221,"language":30373,"meta":39,"style":39},"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",[115,99223,99224,99252,99257,99262,99267,99285,99290,99322,99327,99332,99337,99358],{"__ignoreMap":39},[118,99225,99226,99228,99230,99232,99234,99236,99238,99240,99242,99244,99246,99248,99250],{"class":120,"line":121},[118,99227,948],{"class":128},[118,99229,174],{"class":124},[118,99231,92995],{"class":128},[118,99233,346],{"class":177},[118,99235,506],{"class":128},[118,99237,453],{"class":177},[118,99239,93000],{"class":128},[118,99241,200],{"class":177},[118,99243,506],{"class":128},[118,99245,472],{"class":177},[118,99247,506],{"class":128},[118,99249,206],{"class":177},[118,99251,135],{"class":128},[118,99253,99254],{"class":120,"line":40},[118,99255,99256],{"class":128},"x.shape\n",[118,99258,99259],{"class":120,"line":1183},[118,99260,99261],{"class":187},"#结果：（3,6,2）\n",[118,99263,99264],{"class":120,"line":1198},[118,99265,99266],{"class":187},"#使用np.transpose()进行转置 变为(2,6,3)\n",[118,99268,99269,99272,99274,99276,99278,99280,99282],{"class":120,"line":1204},[118,99270,99271],{"class":128},"np.transpose(x,(",[118,99273,206],{"class":177},[118,99275,506],{"class":128},[118,99277,346],{"class":177},[118,99279,506],{"class":128},[118,99281,320],{"class":177},[118,99283,99284],{"class":128},")).shape\n",[118,99286,99287],{"class":120,"line":1218},[118,99288,99289],{"class":187},"#结果：(2,6,3)\n",[118,99291,99292,99294,99296,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318,99320],{"class":120,"line":1224},[118,99293,98499],{"class":128},[118,99295,174],{"class":124},[118,99297,92995],{"class":128},[118,99299,346],{"class":177},[118,99301,506],{"class":128},[118,99303,453],{"class":177},[118,99305,93000],{"class":128},[118,99307,200],{"class":177},[118,99309,506],{"class":128},[118,99311,206],{"class":177},[118,99313,506],{"class":128},[118,99315,346],{"class":177},[118,99317,506],{"class":128},[118,99319,472],{"class":177},[118,99321,135],{"class":128},[118,99323,99324],{"class":120,"line":1315},[118,99325,99326],{"class":128},"aaaa.shape\n",[118,99328,99329],{"class":120,"line":1321},[118,99330,99331],{"class":187},"#结果：（3，2，1，6）\n",[118,99333,99334],{"class":120,"line":1333},[118,99335,99336],{"class":187},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[118,99338,99339,99342,99344,99346,99348,99350,99352,99354,99356],{"class":120,"line":1616},[118,99340,99341],{"class":128},"np.transpose(aaaa,(",[118,99343,346],{"class":177},[118,99345,506],{"class":128},[118,99347,206],{"class":177},[118,99349,506],{"class":128},[118,99351,320],{"class":177},[118,99353,506],{"class":128},[118,99355,200],{"class":177},[118,99357,99284],{"class":128},[118,99359,99360],{"class":120,"line":1621},[118,99361,99362],{"class":187},"#结果：(2,1,3,6)\n",[5131,99364,99365],{},"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":39,"searchDepth":40,"depth":40,"links":99367},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99092,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99374,"title":99375,"body":99376,"description":42,"extension":43,"meta":100110,"navigation":45,"path":100111,"seo":100112,"stem":100113,"__hash__":100114},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99377,"toc":100108},[99378,99381,99384,99387,99390,99393,99396,99399,99402,99511,99514,99517,100105],[10,99379,99375],{"id":99380},"_8数组分割",[15,99382,99383],{},"split分割",[15,99385,99386],{},"numpy.split(ary,indics_or_sections,axis)",[15,99388,99389],{},"解释：",[15,99391,99392],{},"ary:被分割的数组",[15,99394,99395],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[15,99397,99398],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[15,99400,99401],{},"①一维数组的分割",[109,99403,99405],{"className":30371,"code":99404,"language":30373,"meta":39,"style":39},"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",[115,99406,99407,99423,99428,99437,99441,99446,99454,99458,99463,99468,99481,99485,99490,99502,99506],{"__ignoreMap":39},[118,99408,99409,99411,99413,99415,99417,99419,99421],{"class":120,"line":121},[118,99410,21],{"class":128},[118,99412,174],{"class":124},[118,99414,92995],{"class":128},[118,99416,346],{"class":177},[118,99418,506],{"class":128},[118,99420,548],{"class":177},[118,99422,135],{"class":128},[118,99424,99425],{"class":120,"line":40},[118,99426,99427],{"class":187},"#如果传入整数，必须能够平分，否则会报错\n",[118,99429,99430,99433,99435],{"class":120,"line":1183},[118,99431,99432],{"class":128},"np.split(a,",[118,99434,206],{"class":177},[118,99436,135],{"class":128},[118,99438,99439],{"class":120,"line":1198},[118,99440,93557],{"class":187},[118,99442,99443],{"class":120,"line":1204},[118,99444,99445],{"class":187},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[118,99447,99448,99450,99452],{"class":120,"line":1218},[118,99449,99432],{"class":128},[118,99451,421],{"class":177},[118,99453,135],{"class":128},[118,99455,99456],{"class":120,"line":1224},[118,99457,93557],{"class":187},[118,99459,99460],{"class":120,"line":1315},[118,99461,99462],{"class":187},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[118,99464,99465],{"class":120,"line":1321},[118,99466,99467],{"class":187},"#传入数组\n",[118,99469,99470,99473,99475,99477,99479],{"class":120,"line":1333},[118,99471,99472],{"class":128},"np.split(a,[",[118,99474,200],{"class":177},[118,99476,506],{"class":128},[118,99478,447],{"class":177},[118,99480,4661],{"class":128},[118,99482,99483],{"class":120,"line":1616},[118,99484,93557],{"class":187},[118,99486,99487],{"class":120,"line":1621},[118,99488,99489],{"class":187},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[118,99491,99492,99494,99496,99498,99500],{"class":120,"line":1627},[118,99493,99472],{"class":128},[118,99495,447],{"class":177},[118,99497,506],{"class":128},[118,99499,497],{"class":177},[118,99501,4661],{"class":128},[118,99503,99504],{"class":120,"line":1632},[118,99505,93557],{"class":187},[118,99507,99508],{"class":120,"line":1646},[118,99509,99510],{"class":187},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[15,99512,99513],{},"②二维数组的分割",[15,99515,99516],{},"使用split()",[109,99518,99520],{"className":30371,"code":99519,"language":30373,"meta":39,"style":39},"#二维数组分割\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",[115,99521,99522,99527,99551,99556,99565,99569,99573,99578,99583,99588,99593,99598,99603,99608,99612,99625,99629,99633,99637,99641,99645,99650,99655,99660,99664,99669,99685,99689,99693,99698,99703,99708,99713,99718,99723,99728,99733,99738,99743,99748,99753,99758,99763,99768,99773,99778,99783,99787,99791,99811,99815,99819,99824,99829,99834,99839,99844,99849,99854,99859,99864,99869,99874,99879,99884,99889,99894,99899,99904,99909,99913,99918,99927,99931,99935,99939,99943,99947,99951,99955,99959,99963,99972,99976,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100048,100052,100056,100069,100073,100077,100081,100085,100089,100093,100097,100101],{"__ignoreMap":39},[118,99523,99524],{"class":120,"line":121},[118,99525,99526],{"class":187},"#二维数组分割\n",[118,99528,99529,99531,99533,99535,99537,99539,99541,99543,99545,99547,99549],{"class":120,"line":40},[118,99530,93299],{"class":128},[118,99532,174],{"class":124},[118,99534,92995],{"class":128},[118,99536,346],{"class":177},[118,99538,506],{"class":128},[118,99540,453],{"class":177},[118,99542,93000],{"class":128},[118,99544,472],{"class":177},[118,99546,506],{"class":128},[118,99548,472],{"class":177},[118,99550,135],{"class":128},[118,99552,99553],{"class":120,"line":1183},[118,99554,99555],{"class":187},"#默认axis=0  传入整数平均分,按行来的\n",[118,99557,99558,99561,99563],{"class":120,"line":1198},[118,99559,99560],{"class":128},"np.split(aa,",[118,99562,200],{"class":177},[118,99564,135],{"class":128},[118,99566,99567],{"class":120,"line":1204},[118,99568,95757],{"class":187},[118,99570,99571],{"class":120,"line":1218},[118,99572,93921],{"class":233},[118,99574,99575],{"class":120,"line":1224},[118,99576,99577],{"class":233},"[array([[ 1,  2,  3,  4,  5,  6],\n",[118,99579,99580],{"class":120,"line":1315},[118,99581,99582],{"class":233},"        [ 7,  8,  9, 10, 11, 12]]),\n",[118,99584,99585],{"class":120,"line":1321},[118,99586,99587],{"class":233}," array([[13, 14, 15, 16, 17, 18],\n",[118,99589,99590],{"class":120,"line":1333},[118,99591,99592],{"class":233},"        [19, 20, 21, 22, 23, 24]]),\n",[118,99594,99595],{"class":120,"line":1616},[118,99596,99597],{"class":233}," array([[25, 26, 27, 28, 29, 30],\n",[118,99599,99600],{"class":120,"line":1621},[118,99601,99602],{"class":233},"        [31, 32, 33, 34, 35, 36]])]\n",[118,99604,99605],{"class":120,"line":1627},[118,99606,99607],{"class":233}," '''\n",[118,99609,99610],{"class":120,"line":1632},[118,99611,99467],{"class":187},[118,99613,99614,99617,99619,99621,99623],{"class":120,"line":1646},[118,99615,99616],{"class":128},"np.split(aa,[",[118,99618,206],{"class":177},[118,99620,506],{"class":128},[118,99622,447],{"class":177},[118,99624,4661],{"class":128},[118,99626,99627],{"class":120,"line":1651},[118,99628,95757],{"class":187},[118,99630,99631],{"class":120,"line":1657},[118,99632,93921],{"class":233},[118,99634,99635],{"class":120,"line":1678},[118,99636,99577],{"class":233},[118,99638,99639],{"class":120,"line":1683},[118,99640,99582],{"class":233},[118,99642,99643],{"class":120,"line":1697},[118,99644,99587],{"class":233},[118,99646,99647],{"class":120,"line":1702},[118,99648,99649],{"class":233},"        [19, 20, 21, 22, 23, 24],\n",[118,99651,99652],{"class":120,"line":1731},[118,99653,99654],{"class":233},"        [25, 26, 27, 28, 29, 30]]),\n",[118,99656,99657],{"class":120,"line":1736},[118,99658,99659],{"class":233}," array([[31, 32, 33, 34, 35, 36]])]\n",[118,99661,99662],{"class":120,"line":1753},[118,99663,93921],{"class":233},[118,99665,99666],{"class":120,"line":1758},[118,99667,99668],{"class":187},"#axis=1 按照列来分\n",[118,99670,99671,99673,99675,99677,99679,99681,99683],{"class":120,"line":1763},[118,99672,99560],{"class":128},[118,99674,200],{"class":177},[118,99676,506],{"class":128},[118,99678,47507],{"class":5221},[118,99680,174],{"class":124},[118,99682,346],{"class":177},[118,99684,135],{"class":128},[118,99686,99687],{"class":120,"line":1768},[118,99688,95757],{"class":187},[118,99690,99691],{"class":120,"line":1782},[118,99692,93921],{"class":233},[118,99694,99695],{"class":120,"line":1787},[118,99696,99697],{"class":233},"[array([[ 1,  2],\n",[118,99699,99700],{"class":120,"line":2581},[118,99701,99702],{"class":233},"        [ 7,  8],\n",[118,99704,99705],{"class":120,"line":2595},[118,99706,99707],{"class":233},"        [13, 14],\n",[118,99709,99710],{"class":120,"line":2603},[118,99711,99712],{"class":233},"        [19, 20],\n",[118,99714,99715],{"class":120,"line":2608},[118,99716,99717],{"class":233},"        [25, 26],\n",[118,99719,99720],{"class":120,"line":2614},[118,99721,99722],{"class":233},"        [31, 32]]),\n",[118,99724,99725],{"class":120,"line":2620},[118,99726,99727],{"class":233}," array([[ 3,  4],\n",[118,99729,99730],{"class":120,"line":2625},[118,99731,99732],{"class":233},"        [ 9, 10],\n",[118,99734,99735],{"class":120,"line":7953},[118,99736,99737],{"class":233},"        [15, 16],\n",[118,99739,99740],{"class":120,"line":7977},[118,99741,99742],{"class":233},"        [21, 22],\n",[118,99744,99745],{"class":120,"line":7982},[118,99746,99747],{"class":233},"        [27, 28],\n",[118,99749,99750],{"class":120,"line":7988},[118,99751,99752],{"class":233},"        [33, 34]]),\n",[118,99754,99755],{"class":120,"line":8015},[118,99756,99757],{"class":233}," array([[ 5,  6],\n",[118,99759,99760],{"class":120,"line":8020},[118,99761,99762],{"class":233},"        [11, 12],\n",[118,99764,99765],{"class":120,"line":8026},[118,99766,99767],{"class":233},"        [17, 18],\n",[118,99769,99770],{"class":120,"line":8038},[118,99771,99772],{"class":233},"        [23, 24],\n",[118,99774,99775],{"class":120,"line":8050},[118,99776,99777],{"class":233},"        [29, 30],\n",[118,99779,99780],{"class":120,"line":8062},[118,99781,99782],{"class":233},"        [35, 36]])]\n",[118,99784,99785],{"class":120,"line":9721},[118,99786,99607],{"class":233},[118,99788,99789],{"class":120,"line":9746},[118,99790,99467],{"class":187},[118,99792,99793,99795,99797,99799,99801,99803,99805,99807,99809],{"class":120,"line":9769},[118,99794,99616],{"class":128},[118,99796,346],{"class":177},[118,99798,506],{"class":128},[118,99800,206],{"class":177},[118,99802,41602],{"class":128},[118,99804,47507],{"class":5221},[118,99806,174],{"class":124},[118,99808,346],{"class":177},[118,99810,135],{"class":128},[118,99812,99813],{"class":120,"line":9793},[118,99814,93557],{"class":187},[118,99816,99817],{"class":120,"line":9798},[118,99818,93921],{"class":233},[118,99820,99821],{"class":120,"line":9803},[118,99822,99823],{"class":233},"[array([[ 1],\n",[118,99825,99826],{"class":120,"line":9808},[118,99827,99828],{"class":233},"        [ 7],\n",[118,99830,99831],{"class":120,"line":9817},[118,99832,99833],{"class":233},"        [13],\n",[118,99835,99836],{"class":120,"line":9822},[118,99837,99838],{"class":233},"        [19],\n",[118,99840,99841],{"class":120,"line":9828},[118,99842,99843],{"class":233},"        [25],\n",[118,99845,99846],{"class":120,"line":9849},[118,99847,99848],{"class":233},"        [31]]),\n",[118,99850,99851],{"class":120,"line":9855},[118,99852,99853],{"class":233}," array([[ 2],\n",[118,99855,99856],{"class":120,"line":9869},[118,99857,99858],{"class":233},"        [ 8],\n",[118,99860,99861],{"class":120,"line":9875},[118,99862,99863],{"class":233},"        [14],\n",[118,99865,99866],{"class":120,"line":9902},[118,99867,99868],{"class":233},"        [20],\n",[118,99870,99871],{"class":120,"line":9911},[118,99872,99873],{"class":233},"        [26],\n",[118,99875,99876],{"class":120,"line":9917},[118,99877,99878],{"class":233},"        [32]]),\n",[118,99880,99881],{"class":120,"line":9925},[118,99882,99883],{"class":233}," array([[ 3,  4,  5,  6],\n",[118,99885,99886],{"class":120,"line":9930},[118,99887,99888],{"class":233},"        [ 9, 10, 11, 12],\n",[118,99890,99891],{"class":120,"line":16609},[118,99892,99893],{"class":233},"        [15, 16, 17, 18],\n",[118,99895,99896],{"class":120,"line":16615},[118,99897,99898],{"class":233},"        [21, 22, 23, 24],\n",[118,99900,99901],{"class":120,"line":16638},[118,99902,99903],{"class":233},"        [27, 28, 29, 30],\n",[118,99905,99906],{"class":120,"line":16644},[118,99907,99908],{"class":233},"        [33, 34, 35, 36]])]\n",[118,99910,99911],{"class":120,"line":16667},[118,99912,93921],{"class":233},[118,99914,99915],{"class":120,"line":16681},[118,99916,99917],{"class":187},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[118,99919,99920,99923,99925],{"class":120,"line":16701},[118,99921,99922],{"class":128},"np.vsplit(aa,",[118,99924,200],{"class":177},[118,99926,135],{"class":128},[118,99928,99929],{"class":120,"line":16707},[118,99930,93557],{"class":187},[118,99932,99933],{"class":120,"line":16718},[118,99934,93921],{"class":233},[118,99936,99937],{"class":120,"line":16741},[118,99938,99577],{"class":233},[118,99940,99941],{"class":120,"line":16763},[118,99942,99582],{"class":233},[118,99944,99945],{"class":120,"line":16768},[118,99946,99587],{"class":233},[118,99948,99949],{"class":120,"line":16774},[118,99950,99592],{"class":233},[118,99952,99953],{"class":120,"line":16788},[118,99954,99597],{"class":233},[118,99956,99957],{"class":120,"line":16801},[118,99958,99602],{"class":233},[118,99960,99961],{"class":120,"line":16806},[118,99962,93921],{"class":233},[118,99964,99965,99968,99970],{"class":120,"line":16820},[118,99966,99967],{"class":128},"np.hsplit(aa,",[118,99969,200],{"class":177},[118,99971,135],{"class":128},[118,99973,99974],{"class":120,"line":16825},[118,99975,93557],{"class":187},[118,99977,99978],{"class":120,"line":16831},[118,99979,93921],{"class":233},[118,99981,99982],{"class":120,"line":16836},[118,99983,99697],{"class":233},[118,99985,99986],{"class":120,"line":16850},[118,99987,99702],{"class":233},[118,99989,99990],{"class":120,"line":16855},[118,99991,99707],{"class":233},[118,99993,99994],{"class":120,"line":16860},[118,99995,99712],{"class":233},[118,99997,99998],{"class":120,"line":16874},[118,99999,99717],{"class":233},[118,100001,100002],{"class":120,"line":16886},[118,100003,99722],{"class":233},[118,100005,100006],{"class":120,"line":16891},[118,100007,99727],{"class":233},[118,100009,100010],{"class":120,"line":16904},[118,100011,99732],{"class":233},[118,100013,100014],{"class":120,"line":16909},[118,100015,99737],{"class":233},[118,100017,100018],{"class":120,"line":16914},[118,100019,99742],{"class":233},[118,100021,100022],{"class":120,"line":16919},[118,100023,99747],{"class":233},[118,100025,100026],{"class":120,"line":16932},[118,100027,99752],{"class":233},[118,100029,100030],{"class":120,"line":16937},[118,100031,99757],{"class":233},[118,100033,100034],{"class":120,"line":32626},[118,100035,99762],{"class":233},[118,100037,100038],{"class":120,"line":32632},[118,100039,99767],{"class":233},[118,100041,100042],{"class":120,"line":32638},[118,100043,99772],{"class":233},[118,100045,100046],{"class":120,"line":32644},[118,100047,99777],{"class":233},[118,100049,100050],{"class":120,"line":32650},[118,100051,99782],{"class":233},[118,100053,100054],{"class":120,"line":32661},[118,100055,93921],{"class":233},[118,100057,100058,100061,100063,100065,100067],{"class":120,"line":32667},[118,100059,100060],{"class":128},"np.vsplit(aa,[",[118,100062,206],{"class":177},[118,100064,506],{"class":128},[118,100066,447],{"class":177},[118,100068,4661],{"class":128},[118,100070,100071],{"class":120,"line":32687},[118,100072,93557],{"class":187},[118,100074,100075],{"class":120,"line":32693},[118,100076,93921],{"class":233},[118,100078,100079],{"class":120,"line":32704},[118,100080,99577],{"class":233},[118,100082,100083],{"class":120,"line":32710},[118,100084,99582],{"class":233},[118,100086,100087],{"class":120,"line":32716},[118,100088,99587],{"class":233},[118,100090,100091],{"class":120,"line":32722},[118,100092,99649],{"class":233},[118,100094,100095],{"class":120,"line":32728},[118,100096,99654],{"class":233},[118,100098,100099],{"class":120,"line":32734},[118,100100,99659],{"class":233},[118,100102,100103],{"class":120,"line":32740},[118,100104,99607],{"class":233},[5131,100106,100107],{},"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":39,"searchDepth":40,"depth":40,"links":100109},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99375,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100116,"title":100117,"body":100118,"description":42,"extension":43,"meta":100612,"navigation":45,"path":100613,"seo":100614,"stem":100615,"__hash__":100616},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100119,"toc":100603},[100120,100123,100126,100151,100155,100214,100266,100270,100272,100308,100362,100364,100402,100473,100477,100482,100486,100489,100522,100525,100529,100532,100535,100538,100541,100546,100550,100553,100556,100559,100562,100567,100571,100576,100579,100600],[10,100121,100117],{"id":100122},"_9数学函数",[15,100124,100125],{},"补充回顾：python的列表推导式",[109,100127,100129],{"className":30371,"code":100128,"language":30373,"meta":39,"style":39},"[1\u002Fi for i in a]\n",[115,100130,100131],{"__ignoreMap":39},[118,100132,100133,100135,100137,100139,100142,100144,100146,100148],{"class":120,"line":121},[118,100134,1018],{"class":128},[118,100136,346],{"class":177},[118,100138,712],{"class":124},[118,100140,100141],{"class":128},"i ",[118,100143,3029],{"class":124},[118,100145,9443],{"class":128},[118,100147,26036],{"class":124},[118,100149,100150],{"class":128}," a]\n",[60,100152,100154],{"id":100153},"_91-求倒数","9.1 求倒数",[109,100156,100158],{"className":30371,"code":100157,"language":30373,"meta":39,"style":39},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[115,100159,100160,100165,100193,100205],{"__ignoreMap":39},[118,100161,100162],{"class":120,"line":121},[118,100163,100164],{"class":187},"#数组求倒数\n",[118,100166,100167,100169,100171,100173,100175,100177,100179,100181,100183,100185,100187,100189,100191],{"class":120,"line":40},[118,100168,21],{"class":128},[118,100170,174],{"class":124},[118,100172,1018],{"class":128},[118,100174,346],{"class":177},[118,100176,506],{"class":128},[118,100178,206],{"class":177},[118,100180,506],{"class":128},[118,100182,200],{"class":177},[118,100184,506],{"class":128},[118,100186,421],{"class":177},[118,100188,506],{"class":128},[118,100190,447],{"class":177},[118,100192,33239],{"class":128},[118,100194,100195,100197,100199,100202],{"class":120,"line":1183},[118,100196,391],{"class":128},[118,100198,174],{"class":124},[118,100200,100201],{"class":128},"np.array(a)",[118,100203,100204],{"class":187},"#将列表转换为数组\n",[118,100206,100207,100209,100211],{"class":120,"line":1198},[118,100208,346],{"class":177},[118,100210,712],{"class":124},[118,100212,100213],{"class":128},"b\n",[109,100215,100217],{"className":30371,"code":100216,"language":30373,"meta":39,"style":39},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[115,100218,100219,100247,100256,100261],{"__ignoreMap":39},[118,100220,100221,100223,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243,100245],{"class":120,"line":121},[118,100222,21],{"class":128},[118,100224,174],{"class":124},[118,100226,1018],{"class":128},[118,100228,346],{"class":177},[118,100230,506],{"class":128},[118,100232,206],{"class":177},[118,100234,506],{"class":128},[118,100236,200],{"class":177},[118,100238,506],{"class":128},[118,100240,421],{"class":177},[118,100242,506],{"class":128},[118,100244,447],{"class":177},[118,100246,33239],{"class":128},[118,100248,100249,100251,100253],{"class":120,"line":40},[118,100250,391],{"class":128},[118,100252,174],{"class":124},[118,100254,100255],{"class":128},"np.array(a)\n",[118,100257,100258],{"class":120,"line":1183},[118,100259,100260],{"class":187},"#调用numpy中的函数reciprocal()\n",[118,100262,100263],{"class":120,"line":1198},[118,100264,100265],{"class":128},"np.reciprocal(b)\n",[60,100267,100269],{"id":100268},"_92-求平方","9.2 求平方",[15,100271,94523],{},[109,100273,100275],{"className":30371,"code":100274,"language":30373,"meta":39,"style":39},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[115,100276,100277,100282,100287,100303],{"__ignoreMap":39},[118,100278,100279],{"class":120,"line":121},[118,100280,100281],{"class":187},"#square()，求平方\n",[118,100283,100284],{"class":120,"line":40},[118,100285,100286],{"class":187},"#一维数组\n",[118,100288,100289,100291,100293,100295,100297,100299,100301],{"class":120,"line":1183},[118,100290,21],{"class":128},[118,100292,174],{"class":124},[118,100294,92995],{"class":128},[118,100296,346],{"class":177},[118,100298,506],{"class":128},[118,100300,574],{"class":177},[118,100302,135],{"class":128},[118,100304,100305],{"class":120,"line":1198},[118,100306,100307],{"class":128},"np.square(a)\n",[109,100309,100311],{"className":30371,"code":100310,"language":30373,"meta":39,"style":39},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[115,100312,100313,100318,100323,100344],{"__ignoreMap":39},[118,100314,100315],{"class":120,"line":121},[118,100316,100317],{"class":187},"#或者通过循环遍历的形式来计算\n",[118,100319,100320],{"class":120,"line":40},[118,100321,100322],{"class":187},"#这是一个列表\n",[118,100324,100325,100328,100330,100332,100334,100336,100338,100341],{"class":120,"line":1183},[118,100326,100327],{"class":128},"[i",[118,100329,583],{"class":124},[118,100331,100141],{"class":128},[118,100333,3029],{"class":124},[118,100335,9443],{"class":128},[118,100337,26036],{"class":124},[118,100339,100340],{"class":128}," a]",[118,100342,100343],{"class":187},"#这个求完之后在数列当中\n",[118,100345,100346,100349,100351,100353,100355,100357,100359],{"class":120,"line":1198},[118,100347,100348],{"class":128},"np.array([i",[118,100350,583],{"class":124},[118,100352,100141],{"class":128},[118,100354,3029],{"class":124},[118,100356,9443],{"class":128},[118,100358,26036],{"class":124},[118,100360,100361],{"class":128}," a])\n",[15,100363,93284],{},[109,100365,100367],{"className":30371,"code":100366,"language":30373,"meta":39,"style":39},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[115,100368,100369,100373,100397],{"__ignoreMap":39},[118,100370,100371],{"class":120,"line":121},[118,100372,93294],{"class":187},[118,100374,100375,100377,100379,100381,100383,100385,100387,100389,100391,100393,100395],{"class":120,"line":40},[118,100376,93299],{"class":128},[118,100378,174],{"class":124},[118,100380,92995],{"class":128},[118,100382,346],{"class":177},[118,100384,506],{"class":128},[118,100386,651],{"class":177},[118,100388,93000],{"class":128},[118,100390,421],{"class":177},[118,100392,506],{"class":128},[118,100394,200],{"class":177},[118,100396,135],{"class":128},[118,100398,100399],{"class":120,"line":1183},[118,100400,100401],{"class":128},"np.square(aa)\n",[109,100403,100405],{"className":30371,"code":100404,"language":30373,"meta":39,"style":39},"#传统的方式\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",[115,100406,100407,100412,100421,100437,100453,100468],{"__ignoreMap":39},[118,100408,100409],{"class":120,"line":121},[118,100410,100411],{"class":187},"#传统的方式\n",[118,100413,100414,100416,100418],{"class":120,"line":40},[118,100415,98180],{"class":128},[118,100417,174],{"class":124},[118,100419,100420],{"class":128},"np.empty_like(aa)\n",[118,100422,100423,100425,100427,100429,100431,100433,100435],{"class":120,"line":1183},[118,100424,3029],{"class":124},[118,100426,9443],{"class":128},[118,100428,26036],{"class":124},[118,100430,32436],{"class":177},[118,100432,129],{"class":128},[118,100434,421],{"class":177},[118,100436,30779],{"class":128},[118,100438,100439,100441,100443,100445,100447,100449,100451],{"class":120,"line":1198},[118,100440,3205],{"class":124},[118,100442,9505],{"class":128},[118,100444,26036],{"class":124},[118,100446,32436],{"class":177},[118,100448,129],{"class":128},[118,100450,200],{"class":177},[118,100452,30779],{"class":128},[118,100454,100455,100458,100460,100463,100465],{"class":120,"line":1204},[118,100456,100457],{"class":128},"        bb[i,j]",[118,100459,174],{"class":124},[118,100461,100462],{"class":128},"aa[i,j]",[118,100464,583],{"class":124},[118,100466,100467],{"class":128},"aa[i,j]\n",[118,100469,100470],{"class":120,"line":1218},[118,100471,100472],{"class":128},"bb\n",[60,100474,100476],{"id":100475},"_93-求各元素的符号","9.3 求各元素的符号",[15,100478,100479],{},[1466,100480],{"alt":39,"src":100481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[60,100483,100485],{"id":100484},"_94-modf函数","9.4 modf函数",[15,100487,100488],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[109,100490,100492],{"className":30371,"code":100491,"language":30373,"meta":39,"style":39},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[115,100493,100494,100517],{"__ignoreMap":39},[118,100495,100496,100498,100500,100502,100504,100506,100508,100510,100512,100515],{"class":120,"line":121},[118,100497,21],{"class":128},[118,100499,174],{"class":124},[118,100501,92995],{"class":128},[118,100503,660],{"class":124},[118,100505,574],{"class":177},[118,100507,506],{"class":128},[118,100509,574],{"class":177},[118,100511,506],{"class":128},[118,100513,100514],{"class":177},"0.3",[118,100516,135],{"class":128},[118,100518,100519],{"class":120,"line":40},[118,100520,100521],{"class":128},"np.modf(a)\n",[15,100523,100524],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[60,100526,100528],{"id":100527},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[15,100530,100531],{},"np.cell()",[15,100533,100534],{},"np.floor()",[15,100536,100537],{},"np.rint()",[15,100539,100540],{},"对各元素分别向上取整、向下取整、四舍五入",[15,100542,100543],{},[1466,100544],{"alt":39,"src":100545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[60,100547,100549],{"id":100548},"_96-around函数","9.6 around()函数",[15,100551,100552],{},"around()函数也可以实现对数的小数位数进行操作",[15,100554,100555],{},"其中的参数：",[15,100557,100558],{},"1.要传的数组",[15,100560,100561],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[15,100563,100564],{},[1466,100565],{"alt":39,"src":100566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[60,100568,100570],{"id":100569},"_97-三角函数","9.7 三角函数",[15,100572,100573],{},[1466,100574],{"alt":39,"src":100575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[15,100577,100578],{},"引入图像模块非常重要",[109,100580,100582],{"className":30371,"code":100581,"language":30373,"meta":39,"style":39},"from matplotlib import pyplot as plt\n",[115,100583,100584],{"__ignoreMap":39},[118,100585,100586,100588,100591,100593,100596,100598],{"class":120,"line":121},[118,100587,30730],{"class":124},[118,100589,100590],{"class":128}," matplotlib ",[118,100592,30385],{"class":124},[118,100594,100595],{"class":128}," pyplot ",[118,100597,31376],{"class":124},[118,100599,31430],{"class":128},[5131,100601,100602],{},"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":39,"searchDepth":40,"depth":40,"links":100604},[100605,100606,100607,100608,100609,100610,100611],{"id":100153,"depth":40,"text":100154},{"id":100268,"depth":40,"text":100269},{"id":100475,"depth":40,"text":100476},{"id":100484,"depth":40,"text":100485},{"id":100527,"depth":40,"text":100528},{"id":100548,"depth":40,"text":100549},{"id":100569,"depth":40,"text":100570},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100117,"description":42},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100618,"title":100619,"body":100620,"description":42,"extension":43,"meta":100624,"navigation":45,"path":100625,"seo":100626,"stem":100627,"__hash__":100628},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100621,"toc":100622},[],{"title":39,"searchDepth":40,"depth":40,"links":100623},[],{"category":50413},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100619,"description":42},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100630,"title":100631,"body":100632,"description":39,"extension":43,"meta":102640,"navigation":45,"path":102641,"seo":102642,"stem":102643,"__hash__":102644},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100633,"toc":102616},[100634,100637,100641,100644,100647,100653,100656,100679,100682,100716,100719,100760,100764,100767,100860,100863,100907,100910,100927,100930,100944,100947,100950,100995,100998,101035,101039,101042,101048,101053,101073,101077,101080,101146,101149,101167,101171,101174,101203,101213,101219,101223,101226,101232,101243,101247,101250,101280,101283,101563,101566,101569,101580,101583,101586,101608,101615,101618,101636,101639,101642,101656,101664,101667,101693,101699,101702,101705,101715,101727,101747,101756,101776,101786,101810,101823,101837,101842,101883,101900,101925,101937,101957,101963,102008,102027,102044,102057,102073,102080,102092,102101,102136,102157,102182,102195,102219,102234,102259,102262,102283,102292,102295,102306,102310,102313,102319,102331,102338,102342,102345,102357,102360,102374,102377,102387,102397,102400,102440,102443,102447,102453,102456,102470,102474,102477,102510,102514,102517,102540,102548,102551,102557,102563,102566,102569,102597,102601,102604,102610,102613],[10,100635,100631],{"id":100636},"_1环境安装与第一个-mujoco-程序",[60,100638,100640],{"id":100639},"_1目标说明","1.目标说明",[15,100642,100643],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[15,100645,100646],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[109,100648,100651],{"className":100649,"code":100650,"language":5192,"meta":39},[5190],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[115,100652,100650],{"__ignoreMap":39},[15,100654,100655],{},"需要掌握:",[72,100657,100658,100661,100664,100669,100674],{},[75,100659,100660],{},"Fedora 44 下 MuJoCo 的系统依赖",[75,100662,100663],{},"Python 虚拟环境创建",[75,100665,100666],{},[115,100667,100668],{},"mujoco.MjModel",[75,100670,100671],{},[115,100672,100673],{},"mujoco.MjData",[75,100675,100676],{},[115,100677,100678],{},"mujoco.mj_step(model, data)",[15,100680,100681],{},"MuJoCo 中最重要的两个对象:",[266,100683,100684,100694],{},[269,100685,100686],{},[272,100687,100688,100691],{},[275,100689,100690],{"align":23741},"对象",[275,100692,100693],{"align":23741},"含义",[313,100695,100696,100706],{},[272,100697,100698,100703],{},[318,100699,100700],{"align":23741},[115,100701,100702],{},"MjModel",[318,100704,100705],{"align":23741},"模型结构，来自 XML，基本不随时间变化",[272,100707,100708,100713],{},[318,100709,100710],{"align":23741},[115,100711,100712],{},"MjData",[318,100714,100715],{"align":23741},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[15,100717,100718],{},"可以先用一个类比理解：",[266,100720,100721,100731],{},[269,100722,100723],{},[272,100724,100725,100728],{},[275,100726,100727],{"align":23741},"类比",[275,100729,100730],{"align":23741},"MuJoCo 对象",[313,100732,100733,100742,100751],{},[272,100734,100735,100738],{},[318,100736,100737],{"align":23741},"游戏地图和角色配置",[318,100739,100740],{"align":23741},[115,100741,100702],{},[272,100743,100744,100747],{},[318,100745,100746],{"align":23741},"游戏运行到当前帧的状态",[318,100748,100749],{"align":23741},[115,100750,100712],{},[272,100752,100753,100756],{},[318,100754,100755],{"align":23741},"前进一帧",[318,100757,100758],{"align":23741},[115,100759,100678],{},[60,100761,100763],{"id":100762},"_2环境与依赖安装","2.环境与依赖安装",[15,100765,100766],{},"Fedora 44 系统依赖:",[109,100768,100770],{"className":23827,"code":100769,"language":23829,"meta":39,"style":39},"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",[115,100771,100772,100784,100797,100810,100820,100830,100849],{"__ignoreMap":39},[118,100773,100774,100776,100778,100780,100782],{"class":120,"line":121},[118,100775,24581],{"class":1967},[118,100777,26308],{"class":233},[118,100779,23839],{"class":233},[118,100781,26393],{"class":177},[118,100783,24683],{"class":177},[118,100785,100786,100789,100792,100795],{"class":120,"line":40},[118,100787,100788],{"class":233},"  python3",[118,100790,100791],{"class":233}," python3-pip",[118,100793,100794],{"class":233}," python3-virtualenv",[118,100796,24683],{"class":177},[118,100798,100799,100802,100805,100808],{"class":120,"line":1183},[118,100800,100801],{"class":233},"  mesa-libGL",[118,100803,100804],{"class":233}," mesa-libGLU",[118,100806,100807],{"class":233}," mesa-dri-drivers",[118,100809,24683],{"class":177},[118,100811,100812,100815,100818],{"class":120,"line":1198},[118,100813,100814],{"class":233},"  libglvnd-glx",[118,100816,100817],{"class":233}," libglvnd-opengl",[118,100819,24683],{"class":177},[118,100821,100822,100825,100828],{"class":120,"line":1204},[118,100823,100824],{"class":233},"  glfw",[118,100826,100827],{"class":233}," glfw-devel",[118,100829,24683],{"class":177},[118,100831,100832,100835,100838,100841,100844,100847],{"class":120,"line":1218},[118,100833,100834],{"class":233},"  libX11",[118,100836,100837],{"class":233}," libXcursor",[118,100839,100840],{"class":233}," libXi",[118,100842,100843],{"class":233}," libXinerama",[118,100845,100846],{"class":233}," libXrandr",[118,100848,24683],{"class":177},[118,100850,100851,100854,100857],{"class":120,"line":1224},[118,100852,100853],{"class":233},"  gcc",[118,100855,100856],{"class":233}," gcc-c++",[118,100858,100859],{"class":233}," make\n",[15,100861,100862],{},"创建 Python 环境:",[109,100864,100866],{"className":23827,"code":100865,"language":23829,"meta":39,"style":39},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[115,100867,100868,100882,100890],{"__ignoreMap":39},[118,100869,100870,100873,100876,100879],{"class":120,"line":121},[118,100871,100872],{"class":1967},"python3",[118,100874,100875],{"class":177}," -m",[118,100877,100878],{"class":233}," venv",[118,100880,100881],{"class":233}," .venv\n",[118,100883,100884,100887],{"class":120,"line":40},[118,100885,100886],{"class":177},"source",[118,100888,100889],{"class":233}," .venv\u002Fbin\u002Factivate\n",[118,100891,100892,100894,100896,100899,100901,100904],{"class":120,"line":1183},[118,100893,30373],{"class":1967},[118,100895,100875],{"class":177},[118,100897,100898],{"class":233}," pip",[118,100900,23839],{"class":233},[118,100902,100903],{"class":177}," --upgrade",[118,100905,100906],{"class":233}," pip\n",[15,100908,100909],{},"pip 安装:",[109,100911,100913],{"className":23827,"code":100912,"language":23829,"meta":39,"style":39},"pip install \"mujoco>=2.3\" numpy\n",[115,100914,100915],{"__ignoreMap":39},[118,100916,100917,100919,100921,100924],{"class":120,"line":121},[118,100918,23836],{"class":1967},[118,100920,23839],{"class":233},[118,100922,100923],{"class":233}," \"mujoco>=2.3\"",[118,100925,100926],{"class":233}," numpy\n",[15,100928,100929],{},"安装完成后，先做最小检查：",[109,100931,100933],{"className":23827,"code":100932,"language":23829,"meta":39,"style":39},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[115,100934,100935],{"__ignoreMap":39},[118,100936,100937,100939,100941],{"class":120,"line":121},[118,100938,30373],{"class":1967},[118,100940,30351],{"class":177},[118,100942,100943],{"class":233}," \"import mujoco; print(mujoco.__version__)\"\n",[15,100945,100946],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[15,100948,100949],{},"conda 安装:",[109,100951,100953],{"className":23827,"code":100952,"language":23829,"meta":39,"style":39},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[115,100954,100955,100975,100985],{"__ignoreMap":39},[118,100956,100957,100959,100961,100963,100966,100969,100972],{"class":120,"line":121},[118,100958,30323],{"class":1967},[118,100960,29169],{"class":233},[118,100962,25120],{"class":177},[118,100964,100965],{"class":233}," mujoco-study",[118,100967,100968],{"class":233}," python=",[118,100970,100971],{"class":177},"3.10",[118,100973,100974],{"class":177}," -y\n",[118,100976,100977,100979,100982],{"class":120,"line":40},[118,100978,30323],{"class":1967},[118,100980,100981],{"class":233}," activate",[118,100983,100984],{"class":233}," mujoco-study\n",[118,100986,100987,100989,100991,100993],{"class":120,"line":1183},[118,100988,23836],{"class":1967},[118,100990,23839],{"class":233},[118,100992,100923],{"class":233},[118,100994,100926],{"class":233},[15,100996,100997],{},"版本冲突说明:",[72,100999,101000,101006,101016,101025],{},[75,101001,101002,101003,28378],{},"不要安装 ",[115,101004,101005],{},"mujoco-py",[75,101007,101008,101009,101011,101012,101015],{},"如果旧项目里同时安装了 ",[115,101010,101005],{}," 和 ",[115,101013,101014],{},"mujoco","，建议新建干净虚拟环境。",[75,101017,101018,101021,101022,28378],{},[115,101019,101020],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[115,101023,101024],{},"~\u002F.mujoco\u002Fmujoco210",[75,101026,101027,101028,82532,101031,101034],{},"离屏渲染可能涉及 OpenGL 后端，",[115,101029,101030],{},"MUJOCO_GL=egl",[115,101032,101033],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[60,101036,101038],{"id":101037},"_3核心概念解释","3.核心概念解释",[15,101040,101041],{},"MuJoCo 的基本执行流程:",[109,101043,101046],{"className":101044,"code":101045,"language":5192,"meta":39},[5190],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[115,101047,101045],{"__ignoreMap":39},[15,101049,101050,101052],{},[115,101051,100702],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[15,101054,101055,101057,101058,341,101061,341,101064,341,101067,341,101070,28378],{},[115,101056,100712],{}," 存放仿真运行时状态，例如 ",[115,101059,101060],{},"data.time",[115,101062,101063],{},"data.qpos",[115,101065,101066],{},"data.qvel",[115,101068,101069],{},"data.ctrl",[115,101071,101072],{},"data.xpos",[89,101074,101076],{"id":101075},"xml-是什么","XML 是什么",[15,101078,101079],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[109,101081,101083],{"className":53060,"code":101082,"language":53062,"meta":39,"style":39},"\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",[115,101084,101085,101107,101138],{"__ignoreMap":39},[118,101086,101087,101089,101091,101093,101095,101097,101100,101102,101105],{"class":120,"line":121},[118,101088,1038],{"class":128},[118,101090,51793],{"class":51293},[118,101092,14925],{"class":1967},[118,101094,174],{"class":128},[118,101096,53484],{"class":233},[118,101098,101099],{"class":1967}," pos",[118,101101,174],{"class":128},[118,101103,101104],{"class":233},"\"0 0 1\"",[118,101106,51300],{"class":128},[118,101108,101109,101111,101114,101116,101118,101121,101123,101125,101127,101130,101132,101135],{"class":120,"line":40},[118,101110,52137],{"class":128},[118,101112,101113],{"class":51293},"geom",[118,101115,14925],{"class":1967},[118,101117,174],{"class":128},[118,101119,101120],{"class":233},"\"box_geom\"",[118,101122,53817],{"class":1967},[118,101124,174],{"class":128},[118,101126,53484],{"class":233},[118,101128,101129],{"class":1967}," size",[118,101131,174],{"class":128},[118,101133,101134],{"class":233},"\"0.1 0.1 0.1\"",[118,101136,101137],{"class":128},"\u002F>\n",[118,101139,101140,101142,101144],{"class":120,"line":1183},[118,101141,51778],{"class":128},[118,101143,51793],{"class":51293},[118,101145,51300],{"class":128},[15,101147,101148],{},"这段意思是：",[72,101150,101151,101157,101164],{},[75,101152,101153,101154,101156],{},"创建一个叫 ",[115,101155,53707],{}," 的刚体。",[75,101158,101159,101160,101163],{},"它初始放在 ",[115,101161,101162],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[75,101165,101166],{},"它里面有一个盒子形状的几何体。",[89,101168,101170],{"id":101169},"timestep-是什么","timestep 是什么",[15,101172,101173],{},"XML 里的：",[109,101175,101177],{"className":53060,"code":101176,"language":53062,"meta":39,"style":39},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[115,101178,101179],{"__ignoreMap":39},[118,101180,101181,101183,101185,101188,101190,101193,101196,101198,101201],{"class":120,"line":121},[118,101182,1038],{"class":128},[118,101184,69159],{"class":51293},[118,101186,101187],{"class":1967}," timestep",[118,101189,174],{"class":128},[118,101191,101192],{"class":233},"\"0.01\"",[118,101194,101195],{"class":1967}," gravity",[118,101197,174],{"class":128},[118,101199,101200],{"class":233},"\"0 0 -9.81\"",[118,101202,101137],{"class":128},[15,101204,101205,101206,101209,101210,101212],{},"表示每调用一次 ",[115,101207,101208],{},"mj_step","，仿真时间前进 ",[115,101211,38979],{}," 秒。循环 100 次，大约就是 1 秒：",[109,101214,101217],{"className":101215,"code":101216,"language":5192,"meta":39},[5190],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[115,101218,101216],{"__ignoreMap":39},[89,101220,101222],{"id":101221},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[15,101224,101225],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[109,101227,101230],{"className":101228,"code":101229,"language":5192,"meta":39},[5190],"x y z qw qx qy qz\n",[115,101231,101229],{"__ignoreMap":39},[15,101233,101234,101235,101238,101239,101242],{},"表示一个自由刚体的位置和姿态。其中 ",[115,101236,101237],{},"x y z"," 是位置，",[115,101240,101241],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[60,101244,101246],{"id":101245},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[15,101248,101249],{},"新建文件:",[109,101251,101253],{"className":23827,"code":101252,"language":23829,"meta":39,"style":39},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[115,101254,101255,101265,101272],{"__ignoreMap":39},[118,101256,101257,101260,101262],{"class":120,"line":121},[118,101258,101259],{"class":1967},"mkdir",[118,101261,29209],{"class":177},[118,101263,101264],{"class":233}," mujoco_tutorial\n",[118,101266,101267,101270],{"class":120,"line":40},[118,101268,101269],{"class":177},"cd",[118,101271,101264],{"class":233},[118,101273,101274,101277],{"class":120,"line":1183},[118,101275,101276],{"class":1967},"touch",[118,101278,101279],{"class":233}," ch1_first_sim.py\n",[15,101281,101282],{},"写入:",[109,101284,101286],{"className":30371,"code":101285,"language":30373,"meta":39,"style":39},"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",[115,101287,101288,101295,101299,101303,101313,101318,101323,101327,101332,101337,101341,101346,101351,101356,101361,101366,101371,101375,101379,101383,101396,101410,101420,101424,101436,101448,101460,101472,101484,101488,101505,101510,101514,101525,101536,101540,101544,101558],{"__ignoreMap":39},[118,101289,101290,101292],{"class":120,"line":121},[118,101291,30385],{"class":124},[118,101293,101294],{"class":128}," mujoco\n",[118,101296,101297],{"class":120,"line":40},[118,101298,2404],{"emptyLinePlaceholder":45},[118,101300,101301],{"class":120,"line":1183},[118,101302,2404],{"emptyLinePlaceholder":45},[118,101304,101305,101308,101310],{"class":120,"line":1198},[118,101306,101307],{"class":177},"XML",[118,101309,13569],{"class":124},[118,101311,101312],{"class":233}," \"\"\"\n",[118,101314,101315],{"class":120,"line":1204},[118,101316,101317],{"class":233},"\u003Cmujoco model=\"first_sim\">\n",[118,101319,101320],{"class":120,"line":1218},[118,101321,101322],{"class":233},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[118,101324,101325],{"class":120,"line":1224},[118,101326,2404],{"emptyLinePlaceholder":45},[118,101328,101329],{"class":120,"line":1315},[118,101330,101331],{"class":233},"  \u003Cworldbody>\n",[118,101333,101334],{"class":120,"line":1321},[118,101335,101336],{"class":233},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[118,101338,101339],{"class":120,"line":1333},[118,101340,2404],{"emptyLinePlaceholder":45},[118,101342,101343],{"class":120,"line":1616},[118,101344,101345],{"class":233},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[118,101347,101348],{"class":120,"line":1621},[118,101349,101350],{"class":233},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[118,101352,101353],{"class":120,"line":1627},[118,101354,101355],{"class":233},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[118,101357,101358],{"class":120,"line":1632},[118,101359,101360],{"class":233},"    \u003C\u002Fbody>\n",[118,101362,101363],{"class":120,"line":1646},[118,101364,101365],{"class":233},"  \u003C\u002Fworldbody>\n",[118,101367,101368],{"class":120,"line":1651},[118,101369,101370],{"class":233},"\u003C\u002Fmujoco>\n",[118,101372,101373],{"class":120,"line":1657},[118,101374,95691],{"class":233},[118,101376,101377],{"class":120,"line":1678},[118,101378,2404],{"emptyLinePlaceholder":45},[118,101380,101381],{"class":120,"line":1683},[118,101382,2404],{"emptyLinePlaceholder":45},[118,101384,101385,101387,101389,101392,101394],{"class":120,"line":1697},[118,101386,31940],{"class":124},[118,101388,1977],{"class":1967},[118,101390,101391],{"class":128},"() -> ",[118,101393,95679],{"class":177},[118,101395,3743],{"class":128},[118,101397,101398,101401,101403,101406,101408],{"class":120,"line":1702},[118,101399,101400],{"class":128},"    model ",[118,101402,174],{"class":124},[118,101404,101405],{"class":128}," mujoco.MjModel.from_xml_string(",[118,101407,101307],{"class":177},[118,101409,135],{"class":128},[118,101411,101412,101415,101417],{"class":120,"line":1731},[118,101413,101414],{"class":128},"    data ",[118,101416,174],{"class":124},[118,101418,101419],{"class":128}," mujoco.MjData(model)\n",[118,101421,101422],{"class":120,"line":1736},[118,101423,2404],{"emptyLinePlaceholder":45},[118,101425,101426,101428,101430,101433],{"class":120,"line":1753},[118,101427,31292],{"class":177},[118,101429,129],{"class":128},[118,101431,101432],{"class":233},"\"nq:\"",[118,101434,101435],{"class":128},", model.nq)\n",[118,101437,101438,101440,101442,101445],{"class":120,"line":1758},[118,101439,31292],{"class":177},[118,101441,129],{"class":128},[118,101443,101444],{"class":233},"\"nv:\"",[118,101446,101447],{"class":128},", model.nv)\n",[118,101449,101450,101452,101454,101457],{"class":120,"line":1763},[118,101451,31292],{"class":177},[118,101453,129],{"class":128},[118,101455,101456],{"class":233},"\"nu:\"",[118,101458,101459],{"class":128},", model.nu)\n",[118,101461,101462,101464,101466,101469],{"class":120,"line":1768},[118,101463,31292],{"class":177},[118,101465,129],{"class":128},[118,101467,101468],{"class":233},"\"initial time:\"",[118,101470,101471],{"class":128},", data.time)\n",[118,101473,101474,101476,101478,101481],{"class":120,"line":1782},[118,101475,31292],{"class":177},[118,101477,129],{"class":128},[118,101479,101480],{"class":233},"\"initial qpos:\"",[118,101482,101483],{"class":128},", data.qpos.copy())\n",[118,101485,101486],{"class":120,"line":1787},[118,101487,2404],{"emptyLinePlaceholder":45},[118,101489,101490,101492,101495,101497,101499,101501,101503],{"class":120,"line":2581},[118,101491,3205],{"class":124},[118,101493,101494],{"class":128}," _ ",[118,101496,26036],{"class":124},[118,101498,32436],{"class":177},[118,101500,129],{"class":128},[118,101502,439],{"class":177},[118,101504,30779],{"class":128},[118,101506,101507],{"class":120,"line":2595},[118,101508,101509],{"class":128},"        mujoco.mj_step(model, data)\n",[118,101511,101512],{"class":120,"line":2603},[118,101513,2404],{"emptyLinePlaceholder":45},[118,101515,101516,101518,101520,101523],{"class":120,"line":2608},[118,101517,31292],{"class":177},[118,101519,129],{"class":128},[118,101521,101522],{"class":233},"\"final time:\"",[118,101524,101471],{"class":128},[118,101526,101527,101529,101531,101534],{"class":120,"line":2614},[118,101528,31292],{"class":177},[118,101530,129],{"class":128},[118,101532,101533],{"class":233},"\"final qpos:\"",[118,101535,101483],{"class":128},[118,101537,101538],{"class":120,"line":2620},[118,101539,2404],{"emptyLinePlaceholder":45},[118,101541,101542],{"class":120,"line":2625},[118,101543,2404],{"emptyLinePlaceholder":45},[118,101545,101546,101548,101550,101553,101556],{"class":120,"line":7953},[118,101547,1535],{"class":124},[118,101549,31213],{"class":177},[118,101551,101552],{"class":124}," ==",[118,101554,101555],{"class":233}," \"__main__\"",[118,101557,3743],{"class":128},[118,101559,101560],{"class":120,"line":7977},[118,101561,101562],{"class":128},"    main()\n",[89,101564,101565],{"id":101565},"代码逐段解释",[15,101567,101568],{},"导入库：",[109,101570,101572],{"className":30371,"code":101571,"language":30373,"meta":39,"style":39},"import mujoco\n",[115,101573,101574],{"__ignoreMap":39},[118,101575,101576,101578],{"class":120,"line":121},[118,101577,30385],{"class":124},[118,101579,101294],{"class":128},[15,101581,101582],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[15,101584,101585],{},"定义 XML：",[109,101587,101589],{"className":30371,"code":101588,"language":30373,"meta":39,"style":39},"XML = \"\"\"\n...\n\"\"\"\n",[115,101590,101591,101599,101604],{"__ignoreMap":39},[118,101592,101593,101595,101597],{"class":120,"line":121},[118,101594,101307],{"class":177},[118,101596,13569],{"class":124},[118,101598,101312],{"class":233},[118,101600,101601],{"class":120,"line":40},[118,101602,101603],{"class":233},"...\n",[118,101605,101606],{"class":120,"line":1183},[118,101607,95691],{"class":233},[15,101609,101610,101611,101614],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[115,101612,101613],{},"freejoint"," 的方块。",[15,101616,101617],{},"编译模型：",[109,101619,101621],{"className":30371,"code":101620,"language":30373,"meta":39,"style":39},"model = mujoco.MjModel.from_xml_string(XML)\n",[115,101622,101623],{"__ignoreMap":39},[118,101624,101625,101628,101630,101632,101634],{"class":120,"line":121},[118,101626,101627],{"class":128},"model ",[118,101629,174],{"class":124},[118,101631,101405],{"class":128},[118,101633,101307],{"class":177},[118,101635,135],{"class":128},[15,101637,101638],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[15,101640,101641],{},"创建数据：",[109,101643,101645],{"className":30371,"code":101644,"language":30373,"meta":39,"style":39},"data = mujoco.MjData(model)\n",[115,101646,101647],{"__ignoreMap":39},[118,101648,101649,101652,101654],{"class":120,"line":121},[118,101650,101651],{"class":128},"data ",[118,101653,174],{"class":124},[118,101655,101419],{"class":128},[15,101657,101658,101660,101661,101663],{},[115,101659,33394],{}," 会保存仿真当前状态。刚创建时，时间是 ",[115,101662,320],{},"，方块还在初始位置。",[15,101665,101666],{},"推进仿真：",[109,101668,101670],{"className":30371,"code":101669,"language":30373,"meta":39,"style":39},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[115,101671,101672,101688],{"__ignoreMap":39},[118,101673,101674,101676,101678,101680,101682,101684,101686],{"class":120,"line":121},[118,101675,3029],{"class":124},[118,101677,101494],{"class":128},[118,101679,26036],{"class":124},[118,101681,32436],{"class":177},[118,101683,129],{"class":128},[118,101685,439],{"class":177},[118,101687,30779],{"class":128},[118,101689,101690],{"class":120,"line":40},[118,101691,101692],{"class":128},"    mujoco.mj_step(model, data)\n",[15,101694,101695,101696,101698],{},"每次 ",[115,101697,101208],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[89,101700,101701],{"id":101701},"代码逐行细讲",[15,101703,101704],{},"下面把完整代码按新手视角拆开讲。",[109,101706,101707],{"className":30371,"code":101571,"language":30373,"meta":39,"style":39},[115,101708,101709],{"__ignoreMap":39},[118,101710,101711,101713],{"class":120,"line":121},[118,101712,30385],{"class":124},[118,101714,101294],{"class":128},[15,101716,101717,101719,101720,341,101722,341,101724,28378],{},[115,101718,30385],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[115,101721,100668],{},[115,101723,100673],{},[115,101725,101726],{},"mujoco.mj_step",[109,101728,101729],{"className":30371,"code":101588,"language":30373,"meta":39,"style":39},[115,101730,101731,101739,101743],{"__ignoreMap":39},[118,101732,101733,101735,101737],{"class":120,"line":121},[118,101734,101307],{"class":177},[118,101736,13569],{"class":124},[118,101738,101312],{"class":233},[118,101740,101741],{"class":120,"line":40},[118,101742,101603],{"class":233},[118,101744,101745],{"class":120,"line":1183},[118,101746,95691],{"class":233},[15,101748,101749,101751,101752,101755],{},[115,101750,101307],{}," 是一个变量名。右边的三引号 ",[115,101753,101754],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[109,101757,101758],{"className":53060,"code":101317,"language":53062,"meta":39,"style":39},[115,101759,101760],{"__ignoreMap":39},[118,101761,101762,101764,101766,101769,101771,101774],{"class":120,"line":121},[118,101763,1038],{"class":128},[118,101765,101014],{"class":51293},[118,101767,101768],{"class":1967}," model",[118,101770,174],{"class":128},[118,101772,101773],{"class":233},"\"first_sim\"",[118,101775,51300],{"class":128},[15,101777,101778,101779,101782,101783,28378],{},"这是 XML 的根标签。",[115,101780,101781],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[115,101784,101785],{},"first_sim",[109,101787,101788],{"className":53060,"code":101176,"language":53062,"meta":39,"style":39},[115,101789,101790],{"__ignoreMap":39},[118,101791,101792,101794,101796,101798,101800,101802,101804,101806,101808],{"class":120,"line":121},[118,101793,1038],{"class":128},[118,101795,69159],{"class":51293},[118,101797,101187],{"class":1967},[118,101799,174],{"class":128},[118,101801,101192],{"class":233},[118,101803,101195],{"class":1967},[118,101805,174],{"class":128},[118,101807,101200],{"class":233},[118,101809,101137],{"class":128},[15,101811,101812,101814,101815,101818,101819,101822],{},[115,101813,69159],{}," 用来设置仿真参数。",[115,101816,101817],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[115,101820,101821],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[109,101824,101826],{"className":53060,"code":101825,"language":53062,"meta":39,"style":39},"\u003Cworldbody>\n",[115,101827,101828],{"__ignoreMap":39},[118,101829,101830,101832,101835],{"class":120,"line":121},[118,101831,1038],{"class":128},[118,101833,101834],{"class":51293},"worldbody",[118,101836,51300],{"class":128},[15,101838,101839,101841],{},[115,101840,101834],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[109,101843,101845],{"className":53060,"code":101844,"language":53062,"meta":39,"style":39},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[115,101846,101847],{"__ignoreMap":39},[118,101848,101849,101851,101853,101855,101857,101860,101862,101864,101867,101869,101871,101874,101876,101878,101881],{"class":120,"line":121},[118,101850,1038],{"class":128},[118,101852,101113],{"class":51293},[118,101854,14925],{"class":1967},[118,101856,174],{"class":128},[118,101858,101859],{"class":233},"\"floor\"",[118,101861,53817],{"class":1967},[118,101863,174],{"class":128},[118,101865,101866],{"class":233},"\"plane\"",[118,101868,101129],{"class":1967},[118,101870,174],{"class":128},[118,101872,101873],{"class":233},"\"2 2 0.1\"",[118,101875,78760],{"class":1967},[118,101877,174],{"class":128},[118,101879,101880],{"class":233},"\"0.8 0.8 0.8 1\"",[118,101882,101137],{"class":128},[15,101884,101885,101886,101888,101889,101892,101893,101896,101897,101899],{},"这行创建地面。",[115,101887,101113],{}," 是几何体。",[115,101890,101891],{},"name=\"floor\""," 是名字。",[115,101894,101895],{},"type=\"plane\""," 表示平面。",[115,101898,55103],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[109,101901,101903],{"className":53060,"code":101902,"language":53062,"meta":39,"style":39},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[115,101904,101905],{"__ignoreMap":39},[118,101906,101907,101909,101911,101913,101915,101917,101919,101921,101923],{"class":120,"line":121},[118,101908,1038],{"class":128},[118,101910,51793],{"class":51293},[118,101912,14925],{"class":1967},[118,101914,174],{"class":128},[118,101916,53484],{"class":233},[118,101918,101099],{"class":1967},[118,101920,174],{"class":128},[118,101922,101104],{"class":233},[118,101924,51300],{"class":128},[15,101926,101927,101928,28378,101930,101933,101934,101936],{},"这行创建一个刚体，名字叫 ",[115,101929,53707],{},[115,101931,101932],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[115,101935,101162],{},"，也就是离地面 1 米高。",[109,101938,101940],{"className":53060,"code":101939,"language":53062,"meta":39,"style":39},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[115,101941,101942],{"__ignoreMap":39},[118,101943,101944,101946,101948,101950,101952,101955],{"class":120,"line":121},[118,101945,1038],{"class":128},[118,101947,101613],{"class":51293},[118,101949,14925],{"class":1967},[118,101951,174],{"class":128},[118,101953,101954],{"class":233},"\"box_free\"",[118,101956,101137],{"class":128},[15,101958,101959,101960,101962],{},"这行很重要。",[115,101961,101613],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[109,101964,101966],{"className":53060,"code":101965,"language":53062,"meta":39,"style":39},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[115,101967,101968],{"__ignoreMap":39},[118,101969,101970,101972,101974,101976,101978,101980,101982,101984,101986,101988,101990,101992,101995,101997,101999,102001,102003,102006],{"class":120,"line":121},[118,101971,1038],{"class":128},[118,101973,101113],{"class":51293},[118,101975,14925],{"class":1967},[118,101977,174],{"class":128},[118,101979,101120],{"class":233},[118,101981,53817],{"class":1967},[118,101983,174],{"class":128},[118,101985,53484],{"class":233},[118,101987,101129],{"class":1967},[118,101989,174],{"class":128},[118,101991,101134],{"class":233},[118,101993,101994],{"class":1967}," mass",[118,101996,174],{"class":128},[118,101998,3682],{"class":233},[118,102000,78760],{"class":1967},[118,102002,174],{"class":128},[118,102004,102005],{"class":233},"\"1 0 0 1\"",[118,102007,101137],{"class":128},[15,102009,102010,102011,102014,102015,102018,102019,102022,102023,102026],{},"这行给 box body 添加一个盒子形状。",[115,102012,102013],{},"type=\"box\""," 表示形状是盒子。",[115,102016,102017],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[115,102020,102021],{},"mass=\"1\""," 表示质量是 1。",[115,102024,102025],{},"rgba=\"1 0 0 1\""," 表示红色。",[109,102028,102030],{"className":30371,"code":102029,"language":30373,"meta":39,"style":39},"def main() -> None:\n",[115,102031,102032],{"__ignoreMap":39},[118,102033,102034,102036,102038,102040,102042],{"class":120,"line":121},[118,102035,31940],{"class":124},[118,102037,1977],{"class":1967},[118,102039,101391],{"class":128},[118,102041,95679],{"class":177},[118,102043,3743],{"class":128},[15,102045,102046,102048,102049,102052,102053,102056],{},[115,102047,31940],{}," 用来定义函数。这里定义了一个叫 ",[115,102050,102051],{},"main"," 的函数。",[115,102054,102055],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[109,102058,102059],{"className":30371,"code":101620,"language":30373,"meta":39,"style":39},[115,102060,102061],{"__ignoreMap":39},[118,102062,102063,102065,102067,102069,102071],{"class":120,"line":121},[118,102064,101627],{"class":128},[118,102066,174],{"class":124},[118,102068,101405],{"class":128},[118,102070,101307],{"class":177},[118,102072,135],{"class":128},[15,102074,102075,102076,102079],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[115,102077,102078],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[109,102081,102082],{"className":30371,"code":101644,"language":30373,"meta":39,"style":39},[115,102083,102084],{"__ignoreMap":39},[118,102085,102086,102088,102090],{"class":120,"line":121},[118,102087,101651],{"class":128},[118,102089,174],{"class":124},[118,102091,101419],{"class":128},[15,102093,102094,102095,102097,102098,102100],{},"这行创建仿真数据。",[115,102096,33394],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[115,102099,33394],{}," 都会变化。",[109,102102,102104],{"className":30371,"code":102103,"language":30373,"meta":39,"style":39},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[115,102105,102106,102116,102126],{"__ignoreMap":39},[118,102107,102108,102110,102112,102114],{"class":120,"line":121},[118,102109,30408],{"class":177},[118,102111,129],{"class":128},[118,102113,101432],{"class":233},[118,102115,101435],{"class":128},[118,102117,102118,102120,102122,102124],{"class":120,"line":40},[118,102119,30408],{"class":177},[118,102121,129],{"class":128},[118,102123,101444],{"class":233},[118,102125,101447],{"class":128},[118,102127,102128,102130,102132,102134],{"class":120,"line":1183},[118,102129,30408],{"class":177},[118,102131,129],{"class":128},[118,102133,101456],{"class":233},[118,102135,101459],{"class":128},[15,102137,102138,102140,102141,102144,102145,102148,102149,102152,102153,102156],{},[115,102139,30408],{}," 用来输出信息。",[115,102142,102143],{},"model.nq"," 是位置变量数量，",[115,102146,102147],{},"model.nv"," 是速度变量数量，",[115,102150,102151],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[115,102154,102155],{},"nu"," 是 0。",[109,102158,102160],{"className":30371,"code":102159,"language":30373,"meta":39,"style":39},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[115,102161,102162,102172],{"__ignoreMap":39},[118,102163,102164,102166,102168,102170],{"class":120,"line":121},[118,102165,30408],{"class":177},[118,102167,129],{"class":128},[118,102169,101468],{"class":233},[118,102171,101471],{"class":128},[118,102173,102174,102176,102178,102180],{"class":120,"line":40},[118,102175,30408],{"class":177},[118,102177,129],{"class":128},[118,102179,101480],{"class":233},[118,102181,101483],{"class":128},[15,102183,102184,102185,102187,102188,102190,102191,102194],{},"这里打印初始时间和初始位置。",[115,102186,101060],{}," 一开始是 0。",[115,102189,101063],{}," 是位置数组。",[115,102192,102193],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[109,102196,102197],{"className":30371,"code":101669,"language":30373,"meta":39,"style":39},[115,102198,102199,102215],{"__ignoreMap":39},[118,102200,102201,102203,102205,102207,102209,102211,102213],{"class":120,"line":121},[118,102202,3029],{"class":124},[118,102204,101494],{"class":128},[118,102206,26036],{"class":124},[118,102208,32436],{"class":177},[118,102210,129],{"class":128},[118,102212,439],{"class":177},[118,102214,30779],{"class":128},[118,102216,102217],{"class":120,"line":40},[118,102218,101692],{"class":128},[15,102220,102221,102223,102224,102227,102228,102230,102231,102233],{},[115,102222,3029],{}," 是循环。",[115,102225,102226],{},"range(100)"," 表示循环 100 次。",[115,102229,1120],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[115,102232,101208],{},"，仿真就前进一步。",[109,102235,102237],{"className":30371,"code":102236,"language":30373,"meta":39,"style":39},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[115,102238,102239,102249],{"__ignoreMap":39},[118,102240,102241,102243,102245,102247],{"class":120,"line":121},[118,102242,30408],{"class":177},[118,102244,129],{"class":128},[118,102246,101522],{"class":233},[118,102248,101471],{"class":128},[118,102250,102251,102253,102255,102257],{"class":120,"line":40},[118,102252,30408],{"class":177},[118,102254,129],{"class":128},[118,102256,101533],{"class":233},[118,102258,101483],{"class":128},[15,102260,102261],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[109,102263,102265],{"className":30371,"code":102264,"language":30373,"meta":39,"style":39},"if __name__ == \"__main__\":\n    main()\n",[115,102266,102267,102279],{"__ignoreMap":39},[118,102268,102269,102271,102273,102275,102277],{"class":120,"line":121},[118,102270,1535],{"class":124},[118,102272,31213],{"class":177},[118,102274,101552],{"class":124},[118,102276,101555],{"class":233},[118,102278,3743],{"class":128},[118,102280,102281],{"class":120,"line":40},[118,102282,101562],{"class":128},[15,102284,102285,102286,102289,102290,28378],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[115,102287,102288],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[115,102291,102288],{},[15,102293,102294],{},"运行:",[109,102296,102298],{"className":23827,"code":102297,"language":23829,"meta":39,"style":39},"python ch1_first_sim.py\n",[115,102299,102300],{"__ignoreMap":39},[118,102301,102302,102304],{"class":120,"line":121},[118,102303,30373],{"class":1967},[118,102305,101279],{"class":233},[60,102307,102309],{"id":102308},"_5运行结果说明","5.运行结果说明",[15,102311,102312],{},"你应该看到类似输出:",[109,102314,102317],{"className":102315,"code":102316,"language":5192,"meta":39},[5190],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[115,102318,102316],{"__ignoreMap":39},[15,102320,102321,102323,102324,102327,102328,28378],{},[115,102322,101613],{}," 有 7 个位置变量: ",[115,102325,102326],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[115,102329,102330],{},"vx vy vz wx wy wz",[15,102332,102333,102334,102337],{},"你还会看到 ",[115,102335,102336],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[60,102339,102341],{"id":102340},"_6验证步骤","6.验证步骤",[15,102343,102344],{},"确认版本:",[109,102346,102347],{"className":23827,"code":100932,"language":23829,"meta":39,"style":39},[115,102348,102349],{"__ignoreMap":39},[118,102350,102351,102353,102355],{"class":120,"line":121},[118,102352,30373],{"class":1967},[118,102354,30351],{"class":177},[118,102356,100943],{"class":233},[15,102358,102359],{},"确认导入的是官方 bindings:",[109,102361,102363],{"className":23827,"code":102362,"language":23829,"meta":39,"style":39},"python -c \"import mujoco; print(mujoco)\"\n",[115,102364,102365],{"__ignoreMap":39},[118,102366,102367,102369,102371],{"class":120,"line":121},[118,102368,30373],{"class":1967},[118,102370,30351],{"class":177},[118,102372,102373],{"class":233}," \"import mujoco; print(mujoco)\"\n",[15,102375,102376],{},"运行程序:",[109,102378,102379],{"className":23827,"code":102297,"language":23829,"meta":39,"style":39},[115,102380,102381],{"__ignoreMap":39},[118,102382,102383,102385],{"class":120,"line":121},[118,102384,30373],{"class":1967},[118,102386,101279],{"class":233},[15,102388,102389,102390,102393,102394,28378],{},"检查 ",[115,102391,102392],{},"final time"," 是否约等于 ",[115,102395,102396],{},"1.0",[15,102398,102399],{},"再做几个小实验：",[72,102401,102402,102412,102420,102433],{},[75,102403,102404,102405,102407,102408,102411],{},"把 ",[115,102406,101932],{}," 改成 ",[115,102409,102410],{},"pos=\"0 0 2\"","，观察初始高度变化。",[75,102413,102404,102414,102407,102416,102419],{},[115,102415,101821],{},[115,102417,102418],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[75,102421,102404,102422,102407,102424,102427,102428,102430,102431,28378],{},[115,102423,101817],{},[115,102425,102426],{},"timestep=\"0.005\"","，观察 100 步后的 ",[115,102429,102392],{}," 是否变成约 ",[115,102432,35322],{},[75,102434,102435,102436,102439],{},"删除 ",[115,102437,102438],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[15,102441,102442],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[60,102444,102446],{"id":102445},"_7常见错误与解决方案","7.常见错误与解决方案",[89,102448,102450],{"id":102449},"modulenotfounderror-no-module-named-mujoco",[115,102451,102452],{},"ModuleNotFoundError: No module named 'mujoco'",[15,102454,102455],{},"解决:",[109,102457,102459],{"className":23827,"code":102458,"language":23829,"meta":39,"style":39},"pip install \"mujoco>=2.3\"\n",[115,102460,102461],{"__ignoreMap":39},[118,102462,102463,102465,102467],{"class":120,"line":121},[118,102464,23836],{"class":1967},[118,102466,23839],{"class":233},[118,102468,102469],{"class":233}," \"mujoco>=2.3\"\n",[89,102471,102473],{"id":102472},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[15,102475,102476],{},"先安装系统依赖:",[109,102478,102480],{"className":23827,"code":102479,"language":23829,"meta":39,"style":39},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[115,102481,102482],{"__ignoreMap":39},[118,102483,102484,102486,102488,102490,102492,102495,102497,102500,102502,102505,102507],{"class":120,"line":121},[118,102485,24581],{"class":1967},[118,102487,26308],{"class":233},[118,102489,23839],{"class":233},[118,102491,26393],{"class":177},[118,102493,102494],{"class":233}," mesa-libGL",[118,102496,100807],{"class":233},[118,102498,102499],{"class":233}," glfw",[118,102501,100827],{"class":233},[118,102503,102504],{"class":233}," libX11",[118,102506,100840],{"class":233},[118,102508,102509],{"class":233}," libXrandr\n",[89,102511,102513],{"id":102512},"xml-解析失败","XML 解析失败",[15,102515,102516],{},"检查:",[72,102518,102519,102522,102525,102531],{},[75,102520,102521],{},"标签是否闭合",[75,102523,102524],{},"属性是否带引号",[75,102526,102527,102528],{},"根节点是否是 ",[115,102529,102530],{},"\u003Cmujoco>",[75,102532,102533,102535,102536,102539],{},[115,102534,51793],{}," 是否放在 ",[115,102537,102538],{},"\u003Cworldbody>"," 内部",[89,102541,102543,102545,102546],{"id":102542},"final-time-不是严格等于-10",[115,102544,102392],{}," 不是严格等于 ",[115,102547,102396],{},[15,102549,102550],{},"这通常不是错误。浮点数计算可能得到：",[109,102552,102555],{"className":102553,"code":102554,"language":5192,"meta":39},[5190],"1.0000000000000007\n",[115,102556,102554],{"__ignoreMap":39},[15,102558,102559,102560,102562],{},"只要接近 ",[115,102561,102396],{}," 就正常。",[89,102564,102565],{"id":102565},"方块没有掉下来",[15,102567,102568],{},"检查：",[72,102570,102571,102577,102583,102588],{},[75,102572,102573,102574],{},"方块 body 里是否有 ",[115,102575,102576],{},"\u003Cfreejoint\u002F>",[75,102578,102579,102580],{},"重力是否是 ",[115,102581,102582],{},"0 0 -9.81",[75,102584,102585,102586],{},"是否真的调用了 ",[115,102587,100678],{},[75,102589,102590,102591,102593,102594],{},"你看的是否是 ",[115,102592,102336],{},"，不是 ",[115,102595,102596],{},"initial qpos",[60,102598,102600],{"id":102599},"_8本章小结","8.本章小结",[15,102602,102603],{},"本章你已经完成了 MuJoCo 的最小闭环：",[109,102605,102608],{"className":102606,"code":102607,"language":5192,"meta":39},[5190],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[115,102609,102607],{"__ignoreMap":39},[15,102611,102612],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5131,102614,102615],{},"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":39,"searchDepth":40,"depth":40,"links":102617},[102618,102619,102620,102625,102629,102630,102631,102639],{"id":100639,"depth":40,"text":100640},{"id":100762,"depth":40,"text":100763},{"id":101037,"depth":40,"text":101038,"children":102621},[102622,102623,102624],{"id":101075,"depth":1183,"text":101076},{"id":101169,"depth":1183,"text":101170},{"id":101221,"depth":1183,"text":101222},{"id":101245,"depth":40,"text":101246,"children":102626},[102627,102628],{"id":101565,"depth":1183,"text":101565},{"id":101701,"depth":1183,"text":101701},{"id":102308,"depth":40,"text":102309},{"id":102340,"depth":40,"text":102341},{"id":102445,"depth":40,"text":102446,"children":102632},[102633,102634,102635,102636,102638],{"id":102449,"depth":1183,"text":102452},{"id":102472,"depth":1183,"text":102473},{"id":102512,"depth":1183,"text":102513},{"id":102542,"depth":1183,"text":102637},"final time 不是严格等于 1.0",{"id":102565,"depth":1183,"text":102565},{"id":102599,"depth":40,"text":102600},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100631,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102646,"title":102647,"body":102648,"description":39,"extension":43,"meta":104304,"navigation":45,"path":104305,"seo":104306,"stem":104307,"__hash__":104308},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102649,"toc":104280},[102650,102653,102655,102658,102661,102678,102773,102776,102782,102784,102786,102810,102813,102827,102830,102871,102873,102886,102888,102891,102939,102951,102954,102957,102963,102976,103043,103046,103065,103068,103071,103077,103079,103088,103091,103095,103104,103186,103195,103199,103205,103219,103229,103231,103561,103564,103576,103578,103589,103591,103594,103612,103615,103618,103636,103647,103650,103665,103675,103677,103698,103715,103735,103741,103781,103797,103813,103819,103822,103846,103862,103867,103897,103914,103939,103942,103957,103966,103981,103990,104005,104012,104014,104024,104037,104044,104047,104086,104093,104095,104147,104149,104155,104158,104165,104172,104175,104177,104195,104198,104201,104235,104247,104249,104252,104274,104277],[10,102651,102647],{"id":102652},"_2xml-与-mjcf-物理建模基础",[60,102654,100640],{"id":100639},[15,102656,102657],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[15,102659,102660],{},"本章结束后，你应该能看懂一个简单模型里：",[72,102662,102663,102666,102669,102672,102675],{},[75,102664,102665],{},"地面在哪里。",[75,102667,102668],{},"物体初始位置在哪里。",[75,102670,102671],{},"几何体是什么形状。",[75,102673,102674],{},"哪些 body 可以自由运动。",[75,102676,102677],{},"如何用名字在 Python 里找到 XML 中的对象。",[266,102679,102680,102690],{},[269,102681,102682],{},[272,102683,102684,102687],{},[275,102685,102686],{"align":23741},"标签",[275,102688,102689],{"align":23741},"作用",[313,102691,102692,102701,102711,102720,102730,102740,102753,102763],{},[272,102693,102694,102698],{},[318,102695,102696],{"align":23741},[115,102697,102530],{},[318,102699,102700],{"align":23741},"根节点",[272,102702,102703,102708],{},[318,102704,102705],{"align":23741},[115,102706,102707],{},"\u003Coption>",[318,102709,102710],{"align":23741},"仿真参数",[272,102712,102713,102717],{},[318,102714,102715],{"align":23741},[115,102716,102538],{},[318,102718,102719],{"align":23741},"世界中的物体",[272,102721,102722,102727],{},[318,102723,102724],{"align":23741},[115,102725,102726],{},"\u003Cbody>",[318,102728,102729],{"align":23741},"刚体",[272,102731,102732,102737],{},[318,102733,102734],{"align":23741},[115,102735,102736],{},"\u003Cgeom>",[318,102738,102739],{"align":23741},"几何体、碰撞体、可视体",[272,102741,102742,102750],{},[318,102743,102744,24983,102747],{"align":23741},[115,102745,102746],{},"\u003Cjoint>",[115,102748,102749],{},"\u003Cfreejoint>",[318,102751,102752],{"align":23741},"关节",[272,102754,102755,102760],{},[318,102756,102757],{"align":23741},[115,102758,102759],{},"\u003Csite>",[318,102761,102762],{"align":23741},"标记点",[272,102764,102765,102770],{},[318,102766,102767],{"align":23741},[115,102768,102769],{},"\u003Cactuator>",[318,102771,102772],{"align":23741},"控制器",[15,102774,102775],{},"初学时可以先记住：",[109,102777,102780],{"className":102778,"code":102779,"language":5192,"meta":39},[5190],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[115,102781,102779],{"__ignoreMap":39},[60,102783,100763],{"id":100762},[15,102785,100766],{},[109,102787,102789],{"className":23827,"code":102788,"language":23829,"meta":39,"style":39},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[115,102790,102791],{"__ignoreMap":39},[118,102792,102793,102795,102797,102799,102801,102803,102805,102807],{"class":120,"line":121},[118,102794,24581],{"class":1967},[118,102796,26308],{"class":233},[118,102798,23839],{"class":233},[118,102800,26393],{"class":177},[118,102802,102494],{"class":233},[118,102804,100807],{"class":233},[118,102806,102499],{"class":233},[118,102808,102809],{"class":233}," glfw-devel\n",[15,102811,102812],{},"pip:",[109,102814,102815],{"className":23827,"code":100912,"language":23829,"meta":39,"style":39},[115,102816,102817],{"__ignoreMap":39},[118,102818,102819,102821,102823,102825],{"class":120,"line":121},[118,102820,23836],{"class":1967},[118,102822,23839],{"class":233},[118,102824,100923],{"class":233},[118,102826,100926],{"class":233},[15,102828,102829],{},"conda:",[109,102831,102833],{"className":23827,"code":102832,"language":23829,"meta":39,"style":39},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[115,102834,102835,102852,102861],{"__ignoreMap":39},[118,102836,102837,102839,102841,102843,102846,102848,102850],{"class":120,"line":121},[118,102838,30323],{"class":1967},[118,102840,29169],{"class":233},[118,102842,25120],{"class":177},[118,102844,102845],{"class":233}," mujoco-xml",[118,102847,100968],{"class":233},[118,102849,100971],{"class":177},[118,102851,100974],{"class":177},[118,102853,102854,102856,102858],{"class":120,"line":40},[118,102855,30323],{"class":1967},[118,102857,100981],{"class":233},[118,102859,102860],{"class":233}," mujoco-xml\n",[118,102862,102863,102865,102867,102869],{"class":120,"line":1183},[118,102864,23836],{"class":1967},[118,102866,23839],{"class":233},[118,102868,100923],{"class":233},[118,102870,100926],{"class":233},[15,102872,100997],{},[72,102874,102875,102878,102883],{},[75,102876,102877],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[75,102879,102880,102881,28378],{},"本章使用基础标签，适用于 ",[115,102882,101020],{},[75,102884,102885],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[60,102887,101038],{"id":101037},[15,102889,102890],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[109,102892,102894],{"className":53060,"code":102893,"language":53062,"meta":39,"style":39},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[115,102895,102896,102910,102918,102923,102931],{"__ignoreMap":39},[118,102897,102898,102900,102902,102904,102906,102908],{"class":120,"line":121},[118,102899,1038],{"class":128},[118,102901,101014],{"class":51293},[118,102903,101768],{"class":1967},[118,102905,174],{"class":128},[118,102907,62672],{"class":233},[118,102909,51300],{"class":128},[118,102911,102912,102914,102916],{"class":120,"line":40},[118,102913,52137],{"class":128},[118,102915,101834],{"class":51293},[118,102917,51300],{"class":128},[118,102919,102920],{"class":120,"line":1183},[118,102921,102922],{"class":128},"    ...\n",[118,102924,102925,102927,102929],{"class":120,"line":1198},[118,102926,52410],{"class":128},[118,102928,101834],{"class":51293},[118,102930,51300],{"class":128},[118,102932,102933,102935,102937],{"class":120,"line":1204},[118,102934,51778],{"class":128},[118,102936,101014],{"class":51293},[118,102938,51300],{"class":128},[15,102940,102941,102943,102944,102946,102947,102950],{},[115,102942,51793],{}," 表示刚体。",[115,102945,101113],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[115,102948,102949],{},"joint"," 表示刚体相对父刚体如何运动。",[89,102952,102953],{"id":102953},"层级结构非常重要",[15,102955,102956],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[109,102958,102961],{"className":102959,"code":102960,"language":5192,"meta":39},[5190],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[115,102962,102960],{"__ignoreMap":39},[15,102964,102965,101011,102968,102971,102972,102975],{},[115,102966,102967],{},"red_box_geom",[115,102969,102970],{},"box_center"," 都属于 ",[115,102973,102974],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[109,102977,102979],{"className":53060,"code":102978,"language":53062,"meta":39,"style":39},"\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",[115,102980,102981,103001,103015,103035],{"__ignoreMap":39},[118,102982,102983,102985,102987,102989,102991,102993,102995,102997,102999],{"class":120,"line":121},[118,102984,1038],{"class":128},[118,102986,51793],{"class":51293},[118,102988,14925],{"class":1967},[118,102990,174],{"class":128},[118,102992,53484],{"class":233},[118,102994,101099],{"class":1967},[118,102996,174],{"class":128},[118,102998,101104],{"class":233},[118,103000,51300],{"class":128},[118,103002,103003,103005,103007,103009,103011,103013],{"class":120,"line":40},[118,103004,52137],{"class":128},[118,103006,101613],{"class":51293},[118,103008,14925],{"class":1967},[118,103010,174],{"class":128},[118,103012,101954],{"class":233},[118,103014,101137],{"class":128},[118,103016,103017,103019,103021,103023,103025,103027,103029,103031,103033],{"class":120,"line":1183},[118,103018,52137],{"class":128},[118,103020,101113],{"class":51293},[118,103022,53817],{"class":1967},[118,103024,174],{"class":128},[118,103026,53484],{"class":233},[118,103028,101129],{"class":1967},[118,103030,174],{"class":128},[118,103032,101134],{"class":233},[118,103034,101137],{"class":128},[118,103036,103037,103039,103041],{"class":120,"line":1198},[118,103038,51778],{"class":128},[118,103040,51793],{"class":51293},[118,103042,51300],{"class":128},[15,103044,103045],{},"含义:",[72,103047,103048,103054,103059,103062],{},[75,103049,103050,103051,103053],{},"创建名为 ",[115,103052,53707],{}," 的刚体",[75,103055,103056,103057],{},"初始位置在世界坐标 ",[115,103058,101162],{},[75,103060,103061],{},"它有一个自由关节",[75,103063,103064],{},"它有一个盒子几何体",[89,103066,103067],{"id":103067},"坐标怎么理解",[15,103069,103070],{},"MuJoCo 默认使用三维坐标：",[109,103072,103075],{"className":103073,"code":103074,"language":5192,"meta":39},[5190],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[115,103076,103074],{"__ignoreMap":39},[15,103078,14638],{},[109,103080,103082],{"className":53060,"code":103081,"language":53062,"meta":39,"style":39},"pos=\"0 0 1\"\n",[115,103083,103084],{"__ignoreMap":39},[118,103085,103086],{"class":120,"line":121},[118,103087,103081],{"class":128},[15,103089,103090],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[89,103092,103094],{"id":103093},"geom-的-size-怎么理解","geom 的 size 怎么理解",[15,103096,103097,103098,82523,103101,103103],{},"不同 ",[115,103099,103100],{},"type",[115,103102,31489],{}," 含义不同：",[266,103105,103106,103121],{},[269,103107,103108],{},[272,103109,103110,103114,103119],{},[275,103111,103112],{"align":23741},[115,103113,103100],{},[275,103115,103116,103118],{"align":23741},[115,103117,31489],{}," 示例",[275,103120,100693],{"align":23741},[313,103122,103123,103137,103152,103171],{},[272,103124,103125,103129,103134],{},[318,103126,103127],{"align":23741},[115,103128,53707],{},[318,103130,103131],{"align":23741},[115,103132,103133],{},"size=\"0.1 0.2 0.3\"",[318,103135,103136],{"align":23741},"x\u002Fy\u002Fz 半边长，不是完整长度",[272,103138,103139,103144,103149],{},[318,103140,103141],{"align":23741},[115,103142,103143],{},"sphere",[318,103145,103146],{"align":23741},[115,103147,103148],{},"size=\"0.1\"",[318,103150,103151],{"align":23741},"球半径",[272,103153,103154,103159,103164],{},[318,103155,103156],{"align":23741},[115,103157,103158],{},"capsule",[318,103160,103161],{"align":23741},[115,103162,103163],{},"size=\"0.03\"",[318,103165,103166,103167,103170],{"align":23741},"胶囊半径，长度常用 ",[115,103168,103169],{},"fromto"," 指定",[272,103172,103173,103178,103183],{},[318,103174,103175],{"align":23741},[115,103176,103177],{},"plane",[318,103179,103180],{"align":23741},[115,103181,103182],{},"size=\"3 3 0.1\"",[318,103184,103185],{"align":23741},"可视平面大小，通常当地面",[15,103187,103188,103189,103191,103192,103194],{},"最容易踩坑的是 box：",[115,103190,102017],{}," 表示边长大约是 ",[115,103193,32030],{},"，因为 MuJoCo 用的是半边长。",[89,103196,103198],{"id":103197},"site-是什么","site 是什么",[15,103200,103201,103204],{},[115,103202,103203],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[72,103206,103207,103210,103213,103216],{},[75,103208,103209],{},"标记机械臂末端。",[75,103211,103212],{},"标记目标位置。",[75,103214,103215],{},"放传感器或相机参考点。",[75,103217,103218],{},"在 Python 中读取某个关键点的世界坐标。",[15,103220,103221,103222,101011,103225,103228],{},"在后面的 Reacher 任务中，",[115,103223,103224],{},"tip",[115,103226,103227],{},"target"," 就会用 site 表示。",[60,103230,101246],{"id":101245},[109,103232,103234],{"className":30371,"code":103233,"language":30373,"meta":39,"style":39},"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",[115,103235,103236,103242,103252,103256,103260,103268,103273,103277,103281,103285,103290,103294,103299,103304,103309,103314,103318,103322,103326,103330,103334,103338,103350,103362,103370,103374,103389,103404,103408,103421,103436,103449,103462,103466,103482,103486,103490,103501,103513,103525,103537,103541,103545,103557],{"__ignoreMap":39},[118,103237,103238,103240],{"class":120,"line":121},[118,103239,30385],{"class":124},[118,103241,101294],{"class":128},[118,103243,103244,103246,103248,103250],{"class":120,"line":40},[118,103245,30385],{"class":124},[118,103247,31373],{"class":128},[118,103249,31376],{"class":124},[118,103251,31379],{"class":128},[118,103253,103254],{"class":120,"line":1183},[118,103255,2404],{"emptyLinePlaceholder":45},[118,103257,103258],{"class":120,"line":1198},[118,103259,2404],{"emptyLinePlaceholder":45},[118,103261,103262,103264,103266],{"class":120,"line":1204},[118,103263,101307],{"class":177},[118,103265,13569],{"class":124},[118,103267,101312],{"class":233},[118,103269,103270],{"class":120,"line":1218},[118,103271,103272],{"class":233},"\u003Cmujoco model=\"xml_basic\">\n",[118,103274,103275],{"class":120,"line":1224},[118,103276,101322],{"class":233},[118,103278,103279],{"class":120,"line":1315},[118,103280,2404],{"emptyLinePlaceholder":45},[118,103282,103283],{"class":120,"line":1321},[118,103284,101331],{"class":233},[118,103286,103287],{"class":120,"line":1333},[118,103288,103289],{"class":233},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[118,103291,103292],{"class":120,"line":1616},[118,103293,2404],{"emptyLinePlaceholder":45},[118,103295,103296],{"class":120,"line":1621},[118,103297,103298],{"class":233},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[118,103300,103301],{"class":120,"line":1627},[118,103302,103303],{"class":233},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[118,103305,103306],{"class":120,"line":1632},[118,103307,103308],{"class":233},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[118,103310,103311],{"class":120,"line":1646},[118,103312,103313],{"class":233},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[118,103315,103316],{"class":120,"line":1651},[118,103317,101360],{"class":233},[118,103319,103320],{"class":120,"line":1657},[118,103321,101365],{"class":233},[118,103323,103324],{"class":120,"line":1678},[118,103325,101370],{"class":233},[118,103327,103328],{"class":120,"line":1683},[118,103329,95691],{"class":233},[118,103331,103332],{"class":120,"line":1697},[118,103333,2404],{"emptyLinePlaceholder":45},[118,103335,103336],{"class":120,"line":1702},[118,103337,2404],{"emptyLinePlaceholder":45},[118,103339,103340,103342,103344,103346,103348],{"class":120,"line":1731},[118,103341,31940],{"class":124},[118,103343,1977],{"class":1967},[118,103345,101391],{"class":128},[118,103347,95679],{"class":177},[118,103349,3743],{"class":128},[118,103351,103352,103354,103356,103358,103360],{"class":120,"line":1736},[118,103353,101400],{"class":128},[118,103355,174],{"class":124},[118,103357,101405],{"class":128},[118,103359,101307],{"class":177},[118,103361,135],{"class":128},[118,103363,103364,103366,103368],{"class":120,"line":1753},[118,103365,101414],{"class":128},[118,103367,174],{"class":124},[118,103369,101419],{"class":128},[118,103371,103372],{"class":120,"line":1758},[118,103373,2404],{"emptyLinePlaceholder":45},[118,103375,103376,103379,103381,103384,103387],{"class":120,"line":1763},[118,103377,103378],{"class":128},"    box_body_id ",[118,103380,174],{"class":124},[118,103382,103383],{"class":128}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[118,103385,103386],{"class":233},"\"red_box\"",[118,103388,135],{"class":128},[118,103390,103391,103394,103396,103399,103402],{"class":120,"line":1768},[118,103392,103393],{"class":128},"    site_id ",[118,103395,174],{"class":124},[118,103397,103398],{"class":128}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[118,103400,103401],{"class":233},"\"box_center\"",[118,103403,135],{"class":128},[118,103405,103406],{"class":120,"line":1782},[118,103407,2404],{"emptyLinePlaceholder":45},[118,103409,103410,103412,103415,103417,103419],{"class":120,"line":1787},[118,103411,3105],{"class":124},[118,103413,103414],{"class":128}," box_body_id ",[118,103416,1038],{"class":124},[118,103418,4097],{"class":177},[118,103420,3743],{"class":128},[118,103422,103423,103426,103429,103431,103434],{"class":120,"line":2581},[118,103424,103425],{"class":124},"        raise",[118,103427,103428],{"class":177}," RuntimeError",[118,103430,129],{"class":128},[118,103432,103433],{"class":233},"\"body red_box not found\"",[118,103435,135],{"class":128},[118,103437,103438,103440,103443,103445,103447],{"class":120,"line":2595},[118,103439,3105],{"class":124},[118,103441,103442],{"class":128}," site_id ",[118,103444,1038],{"class":124},[118,103446,4097],{"class":177},[118,103448,3743],{"class":128},[118,103450,103451,103453,103455,103457,103460],{"class":120,"line":2603},[118,103452,103425],{"class":124},[118,103454,103428],{"class":177},[118,103456,129],{"class":128},[118,103458,103459],{"class":233},"\"site box_center not found\"",[118,103461,135],{"class":128},[118,103463,103464],{"class":120,"line":2608},[118,103465,2404],{"emptyLinePlaceholder":45},[118,103467,103468,103470,103472,103474,103476,103478,103480],{"class":120,"line":2614},[118,103469,3205],{"class":124},[118,103471,101494],{"class":128},[118,103473,26036],{"class":124},[118,103475,32436],{"class":177},[118,103477,129],{"class":128},[118,103479,1726],{"class":177},[118,103481,30779],{"class":128},[118,103483,103484],{"class":120,"line":2620},[118,103485,101509],{"class":128},[118,103487,103488],{"class":120,"line":2625},[118,103489,2404],{"emptyLinePlaceholder":45},[118,103491,103492,103494,103496,103499],{"class":120,"line":7953},[118,103493,31292],{"class":177},[118,103495,129],{"class":128},[118,103497,103498],{"class":233},"\"simulation time:\"",[118,103500,101471],{"class":128},[118,103502,103503,103505,103507,103510],{"class":120,"line":7977},[118,103504,31292],{"class":177},[118,103506,129],{"class":128},[118,103508,103509],{"class":233},"\"box body position:\"",[118,103511,103512],{"class":128},", data.xpos[box_body_id].copy())\n",[118,103514,103515,103517,103519,103522],{"class":120,"line":7982},[118,103516,31292],{"class":177},[118,103518,129],{"class":128},[118,103520,103521],{"class":233},"\"site position:\"",[118,103523,103524],{"class":128},", data.site_xpos[site_id].copy())\n",[118,103526,103527,103529,103531,103534],{"class":120,"line":7988},[118,103528,31292],{"class":177},[118,103530,129],{"class":128},[118,103532,103533],{"class":233},"\"box qpos:\"",[118,103535,103536],{"class":128},", np.array(data.qpos))\n",[118,103538,103539],{"class":120,"line":8015},[118,103540,2404],{"emptyLinePlaceholder":45},[118,103542,103543],{"class":120,"line":8020},[118,103544,2404],{"emptyLinePlaceholder":45},[118,103546,103547,103549,103551,103553,103555],{"class":120,"line":8026},[118,103548,1535],{"class":124},[118,103550,31213],{"class":177},[118,103552,101552],{"class":124},[118,103554,101555],{"class":233},[118,103556,3743],{"class":128},[118,103558,103559],{"class":120,"line":8038},[118,103560,101562],{"class":128},[15,103562,103563],{},"保存为：",[109,103565,103567],{"className":23827,"code":103566,"language":23829,"meta":39,"style":39},"touch ch2_xml_basic.py\n",[115,103568,103569],{"__ignoreMap":39},[118,103570,103571,103573],{"class":120,"line":121},[118,103572,101276],{"class":1967},[118,103574,103575],{"class":233}," ch2_xml_basic.py\n",[15,103577,102294],{},[109,103579,103581],{"className":23827,"code":103580,"language":23829,"meta":39,"style":39},"python ch2_xml_basic.py\n",[115,103582,103583],{"__ignoreMap":39},[118,103584,103585,103587],{"class":120,"line":121},[118,103586,30373],{"class":1967},[118,103588,103575],{"class":233},[89,103590,101565],{"id":101565},[15,103592,103593],{},"用名字查找 body：",[109,103595,103597],{"className":30371,"code":103596,"language":30373,"meta":39,"style":39},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[115,103598,103599],{"__ignoreMap":39},[118,103600,103601,103604,103606,103608,103610],{"class":120,"line":121},[118,103602,103603],{"class":128},"box_body_id ",[118,103605,174],{"class":124},[118,103607,103383],{"class":128},[118,103609,103386],{"class":233},[118,103611,135],{"class":128},[15,103613,103614],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[15,103616,103617],{},"用名字查找 site：",[109,103619,103621],{"className":30371,"code":103620,"language":30373,"meta":39,"style":39},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[115,103622,103623],{"__ignoreMap":39},[118,103624,103625,103628,103630,103632,103634],{"class":120,"line":121},[118,103626,103627],{"class":128},"site_id ",[118,103629,174],{"class":124},[118,103631,103398],{"class":128},[118,103633,103401],{"class":233},[118,103635,135],{"class":128},[15,103637,103638,103639,103642,103643,103646],{},"注意第二个参数是对象类型。查 body 就用 ",[115,103640,103641],{},"mjOBJ_BODY","，查 site 就用 ",[115,103644,103645],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[15,103648,103649],{},"读取世界坐标：",[109,103651,103653],{"className":30371,"code":103652,"language":30373,"meta":39,"style":39},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[115,103654,103655,103660],{"__ignoreMap":39},[118,103656,103657],{"class":120,"line":121},[118,103658,103659],{"class":128},"data.xpos[box_body_id]\n",[118,103661,103662],{"class":120,"line":40},[118,103663,103664],{"class":128},"data.site_xpos[site_id]\n",[15,103666,103667,103670,103671,103674],{},[115,103668,103669],{},"xpos"," 是 body 的世界坐标，",[115,103672,103673],{},"site_xpos"," 是 site 的世界坐标。",[89,103676,101701],{"id":101701},[109,103678,103680],{"className":30371,"code":103679,"language":30373,"meta":39,"style":39},"import mujoco\nimport numpy as np\n",[115,103681,103682,103688],{"__ignoreMap":39},[118,103683,103684,103686],{"class":120,"line":121},[118,103685,30385],{"class":124},[118,103687,101294],{"class":128},[118,103689,103690,103692,103694,103696],{"class":120,"line":40},[118,103691,30385],{"class":124},[118,103693,31373],{"class":128},[118,103695,31376],{"class":124},[118,103697,31379],{"class":128},[15,103699,103700,103701,103704,103705,103708,103709,341,103712,28378],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[115,103702,103703],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[115,103706,103707],{},"as np"," 是习惯写法，后面就可以写 ",[115,103710,103711],{},"np.array(...)",[115,103713,103714],{},"np.round(...)",[109,103716,103717],{"className":30371,"code":101588,"language":30373,"meta":39,"style":39},[115,103718,103719,103727,103731],{"__ignoreMap":39},[118,103720,103721,103723,103725],{"class":120,"line":121},[118,103722,101307],{"class":177},[118,103724,13569],{"class":124},[118,103726,101312],{"class":233},[118,103728,103729],{"class":120,"line":40},[118,103730,101603],{"class":233},[118,103732,103733],{"class":120,"line":1183},[118,103734,95691],{"class":233},[15,103736,103737,103738,28378],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[115,103739,103740],{},"mujoco.MjModel.from_xml_string(XML)",[109,103742,103744],{"className":53060,"code":103743,"language":53062,"meta":39,"style":39},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[115,103745,103746],{"__ignoreMap":39},[118,103747,103748,103750,103752,103754,103756,103758,103760,103762,103765,103767,103769,103772,103774,103776,103779],{"class":120,"line":121},[118,103749,1038],{"class":128},[118,103751,103203],{"class":51293},[118,103753,14925],{"class":1967},[118,103755,174],{"class":128},[118,103757,103401],{"class":233},[118,103759,101099],{"class":1967},[118,103761,174],{"class":128},[118,103763,103764],{"class":233},"\"0 0 0\"",[118,103766,101129],{"class":1967},[118,103768,174],{"class":128},[118,103770,103771],{"class":233},"\"0.03\"",[118,103773,78760],{"class":1967},[118,103775,174],{"class":128},[118,103777,103778],{"class":233},"\"0 1 0 1\"",[118,103780,101137],{"class":128},[15,103782,103783,103785,103786,103789,103790,103792,103793,103796],{},[115,103784,103203],{}," 是标记点。",[115,103787,103788],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[115,103791,103163],{}," 表示显示出来的小球大小。",[115,103794,103795],{},"rgba=\"0 1 0 1\""," 表示绿色。",[109,103798,103799],{"className":30371,"code":103596,"language":30373,"meta":39,"style":39},[115,103800,103801],{"__ignoreMap":39},[118,103802,103803,103805,103807,103809,103811],{"class":120,"line":121},[118,103804,103603],{"class":128},[118,103806,174],{"class":124},[118,103808,103383],{"class":128},[118,103810,103386],{"class":233},[118,103812,135],{"class":128},[15,103814,103815,103816,103818],{},"这行的作用是：根据名字 ",[115,103817,103386],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[15,103820,103821],{},"拆开看：",[72,103823,103824,103830,103835,103841],{},[75,103825,103826,103829],{},[115,103827,103828],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[75,103831,103832,103834],{},[115,103833,102078],{}," 是被查询的模型。",[75,103836,103837,103840],{},[115,103838,103839],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[75,103842,103843,103845],{},[115,103844,103386],{}," 是 XML 里写的名字。",[109,103847,103848],{"className":30371,"code":103620,"language":30373,"meta":39,"style":39},[115,103849,103850],{"__ignoreMap":39},[118,103851,103852,103854,103856,103858,103860],{"class":120,"line":121},[118,103853,103627],{"class":128},[118,103855,174],{"class":124},[118,103857,103398],{"class":128},[118,103859,103401],{"class":233},[118,103861,135],{"class":128},[15,103863,103864,103865,28378],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[115,103866,103401],{},[109,103868,103870],{"className":30371,"code":103869,"language":30373,"meta":39,"style":39},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[115,103871,103872,103884],{"__ignoreMap":39},[118,103873,103874,103876,103878,103880,103882],{"class":120,"line":121},[118,103875,1535],{"class":124},[118,103877,103414],{"class":128},[118,103879,1038],{"class":124},[118,103881,4097],{"class":177},[118,103883,3743],{"class":128},[118,103885,103886,103889,103891,103893,103895],{"class":120,"line":40},[118,103887,103888],{"class":124},"    raise",[118,103890,103428],{"class":177},[118,103892,129],{"class":128},[118,103894,103433],{"class":233},[118,103896,135],{"class":128},[15,103898,103899,103901,103902,103905,103906,103909,103910,103913],{},[115,103900,1535],{}," 是条件判断。",[115,103903,103904],{},"mj_name2id"," 找不到对象时会返回 ",[115,103907,103908],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[115,103911,103912],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[109,103915,103917],{"className":30371,"code":103916,"language":30373,"meta":39,"style":39},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[115,103918,103919,103935],{"__ignoreMap":39},[118,103920,103921,103923,103925,103927,103929,103931,103933],{"class":120,"line":121},[118,103922,3029],{"class":124},[118,103924,101494],{"class":128},[118,103926,26036],{"class":124},[118,103928,32436],{"class":177},[118,103930,129],{"class":128},[118,103932,1726],{"class":177},[118,103934,30779],{"class":128},[118,103936,103937],{"class":120,"line":40},[118,103938,101692],{"class":128},[15,103940,103941],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[109,103943,103945],{"className":30371,"code":103944,"language":30373,"meta":39,"style":39},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[115,103946,103947],{"__ignoreMap":39},[118,103948,103949,103951,103953,103955],{"class":120,"line":121},[118,103950,30408],{"class":177},[118,103952,129],{"class":128},[118,103954,103509],{"class":233},[118,103956,103512],{"class":128},[15,103958,103959,103961,103962,103965],{},[115,103960,101072],{}," 保存所有 body 的世界坐标。",[115,103963,103964],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[109,103967,103969],{"className":30371,"code":103968,"language":30373,"meta":39,"style":39},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[115,103970,103971],{"__ignoreMap":39},[118,103972,103973,103975,103977,103979],{"class":120,"line":121},[118,103974,30408],{"class":177},[118,103976,129],{"class":128},[118,103978,103521],{"class":233},[118,103980,103524],{"class":128},[15,103982,103983,103986,103987,103989],{},[115,103984,103985],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[115,103988,102970],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[109,103991,103993],{"className":30371,"code":103992,"language":30373,"meta":39,"style":39},"print(\"box qpos:\", np.array(data.qpos))\n",[115,103994,103995],{"__ignoreMap":39},[118,103996,103997,103999,104001,104003],{"class":120,"line":121},[118,103998,30408],{"class":177},[118,104000,129],{"class":128},[118,104002,103533],{"class":233},[118,104004,103536],{"class":128},[15,104006,104007,104008,104011],{},"这里打印广义位置数组。",[115,104009,104010],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[60,104013,102309],{"id":102308},[15,104015,104016,104017,104020,104021,28378],{},"程序会输出 ",[115,104018,104019],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[115,104022,104023],{},"qpos",[15,104025,104026,104028,104029,104032,104033,104036],{},[115,104027,103964],{}," 是 body 的世界坐标位置。",[115,104030,104031],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[115,104034,104035],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[15,104038,82215,104039,82523,104041,104043],{},[115,104040,102970],{},[115,104042,103788],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[15,104045,104046],{},"如果你把 site 改成：",[109,104048,104050],{"className":53060,"code":104049,"language":53062,"meta":39,"style":39},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[115,104051,104052],{"__ignoreMap":39},[118,104053,104054,104056,104058,104060,104062,104065,104067,104069,104072,104074,104076,104078,104080,104082,104084],{"class":120,"line":121},[118,104055,1038],{"class":128},[118,104057,103203],{"class":51293},[118,104059,14925],{"class":1967},[118,104061,174],{"class":128},[118,104063,104064],{"class":233},"\"box_top\"",[118,104066,101099],{"class":1967},[118,104068,174],{"class":128},[118,104070,104071],{"class":233},"\"0 0 0.15\"",[118,104073,101129],{"class":1967},[118,104075,174],{"class":128},[118,104077,103771],{"class":233},[118,104079,78760],{"class":1967},[118,104081,174],{"class":128},[118,104083,103778],{"class":233},[118,104085,101137],{"class":128},[15,104087,104088,104089,104092],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[115,104090,104091],{},"site position"," 就会比 body position 的 z 坐标更高。",[60,104094,102341],{"id":102340},[72,104096,104097,104106,104109,104116,104122,104133],{},[75,104098,102404,104099,104101,104102,102407,104104,28378],{},[115,104100,102974],{}," 的初始高度从 ",[115,104103,346],{},[115,104105,206],{},[75,104107,104108],{},"重新运行程序。",[75,104110,104111,104112,104115],{},"观察 ",[115,104113,104114],{},"box qpos"," 和最终位置是否变化。",[75,104117,104118,104119,104121],{},"故意把 ",[115,104120,103203],{}," 名称改错，确认程序能报错。",[75,104123,102404,104124,104126,104127,102407,104129,104132],{},[115,104125,101113],{}," 的颜色 ",[115,104128,102025],{},[115,104130,104131],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[75,104134,102404,104135,82523,104137,102407,104140,104143,104144,104146],{},[115,104136,102970],{},[115,104138,104139],{},"pos",[115,104141,104142],{},"0 0 0.2","，观察 ",[115,104145,104091],{}," 如何变化。",[60,104148,102446],{"id":102445},[89,104150,104152],{"id":104151},"xml-error-schema-violation",[115,104153,104154],{},"XML Error: Schema violation",[15,104156,104157],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[89,104159,104161,81283,104163],{"id":104160},"mj_name2id-返回-1",[115,104162,103904],{},[115,104164,103908],{},[15,104166,104167,104168,104171],{},"说明名字没有找到。检查 XML 中 ",[115,104169,104170],{},"name=\"...\"","，并确认对象类型正确。",[89,104173,104174],{"id":104174},"物体不下落",[15,104176,102516],{},[72,104178,104179,104184,104189],{},[75,104180,104181,104182],{},"body 是否有 ",[115,104183,101613],{},[75,104185,104186,104187],{},"gravity 是否为 ",[115,104188,102582],{},[75,104190,104191,104192,104194],{},"body 是否被固定在 ",[115,104193,101834],{}," 中",[89,104196,104197],{"id":104197},"坐标看起来不符合预期",[15,104199,104200],{},"先区分两种坐标：",[266,104202,104203,104212],{},[269,104204,104205],{},[272,104206,104207,104210],{},[275,104208,104209],{"align":23741},"坐标",[275,104211,100693],{"align":23741},[313,104213,104214,104224],{},[272,104215,104216,104221],{},[318,104217,104218,104219],{"align":23741},"XML 里的 ",[115,104220,104139],{},[318,104222,104223],{"align":23741},"相对父 body 的局部坐标",[272,104225,104226,104232],{},[318,104227,104228,24983,104230],{"align":23741},[115,104229,101072],{},[115,104231,103985],{},[318,104233,104234],{"align":23741},"仿真更新后的世界坐标",[15,104236,104237,104238,104240,104241,82532,104244,104246],{},"如果你修改了 ",[115,104239,101063],{},"，但还没调用 ",[115,104242,104243],{},"mj_forward",[115,104245,101208],{},"，世界坐标可能还没有更新。",[60,104248,102600],{"id":102599},[15,104250,104251],{},"MJCF 建模先掌握四件事：",[72,104253,104254,104259,104264,104269],{},[75,104255,104256,104258],{},[115,104257,51793],{}," 表示刚体层级。",[75,104260,104261,104263],{},[115,104262,101113],{}," 表示形状、碰撞和质量。",[75,104265,104266,104268],{},[115,104267,102949],{}," 决定 body 能不能动、怎么动。",[75,104270,104271,104273],{},[115,104272,103203],{}," 用来标记关键点，方便 Python 读取位置。",[15,104275,104276],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5131,104278,104279],{},"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":39,"searchDepth":40,"depth":40,"links":104281},[104282,104283,104284,104290,104294,104295,104296,104303],{"id":100639,"depth":40,"text":100640},{"id":100762,"depth":40,"text":100763},{"id":101037,"depth":40,"text":101038,"children":104285},[104286,104287,104288,104289],{"id":102953,"depth":1183,"text":102953},{"id":103067,"depth":1183,"text":103067},{"id":103093,"depth":1183,"text":103094},{"id":103197,"depth":1183,"text":103198},{"id":101245,"depth":40,"text":101246,"children":104291},[104292,104293],{"id":101565,"depth":1183,"text":101565},{"id":101701,"depth":1183,"text":101701},{"id":102308,"depth":40,"text":102309},{"id":102340,"depth":40,"text":102341},{"id":102445,"depth":40,"text":102446,"children":104297},[104298,104299,104301,104302],{"id":104151,"depth":1183,"text":104154},{"id":104160,"depth":1183,"text":104300},"mj_name2id 返回 -1",{"id":104174,"depth":1183,"text":104174},{"id":104197,"depth":1183,"text":104197},{"id":102599,"depth":40,"text":102600},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102647,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104310,"title":104311,"body":104312,"description":39,"extension":43,"meta":105807,"navigation":45,"path":105808,"seo":105809,"stem":105810,"__hash__":105811},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104313,"toc":105779},[104314,104317,104319,104322,104325,104363,104366,104372,104375,104377,104379,104406,104408,104422,104424,104465,104467,104491,104493,104496,104505,104514,104517,104526,104534,104543,104546,104556,104559,104611,104618,104624,104632,104680,104683,104702,104705,104713,104717,104726,104759,104761,105109,105111,105123,105125,105136,105138,105141,105162,105168,105171,105196,105206,105209,105217,105220,105223,105244,105255,105257,105277,105280,105301,105310,105329,105335,105360,105363,105377,105384,105408,105411,105419,105428,105444,105456,105464,105473,105475,105478,105502,105507,105510,105532,105534,105573,105575,105582,105584,105592,105595,105598,105610,105651,105658,105669,105676,105679,105728,105731,105734,105740,105742,105747,105773,105776],[10,104315,104311],{"id":104316},"_3python-控制接口读取状态与推进仿真",[60,104318,100640],{"id":100639},[15,104320,104321],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[15,104323,104324],{},"你将学习:",[72,104326,104327,104332,104337,104341,104346,104357],{},[75,104328,104329],{},[115,104330,104331],{},"MjModel.from_xml_string",[75,104333,104334],{},[115,104335,104336],{},"MjData(model)",[75,104338,104339],{},[115,104340,101208],{},[75,104342,104343],{},[115,104344,104345],{},"mj_resetData",[75,104347,104348,104349,341,104351,341,104354],{},"读取 ",[115,104350,104023],{},[115,104352,104353],{},"qvel",[115,104355,104356],{},"ctrl",[75,104358,104359,104360],{},"使用 ",[115,104361,104362],{},"model.opt.timestep",[15,104364,104365],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[109,104367,104370],{"className":104368,"code":104369,"language":5192,"meta":39},[5190],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[115,104371,104369],{"__ignoreMap":39},[15,104373,104374],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[60,104376,100763],{"id":100762},[15,104378,100766],{},[109,104380,104382],{"className":23827,"code":104381,"language":23829,"meta":39,"style":39},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[115,104383,104384],{"__ignoreMap":39},[118,104385,104386,104388,104390,104392,104394,104397,104399,104401,104403],{"class":120,"line":121},[118,104387,24581],{"class":1967},[118,104389,26308],{"class":233},[118,104391,23839],{"class":233},[118,104393,26393],{"class":177},[118,104395,104396],{"class":233}," python3",[118,104398,100791],{"class":233},[118,104400,102494],{"class":233},[118,104402,100807],{"class":233},[118,104404,104405],{"class":233}," glfw\n",[15,104407,102812],{},[109,104409,104410],{"className":23827,"code":100912,"language":23829,"meta":39,"style":39},[115,104411,104412],{"__ignoreMap":39},[118,104413,104414,104416,104418,104420],{"class":120,"line":121},[118,104415,23836],{"class":1967},[118,104417,23839],{"class":233},[118,104419,100923],{"class":233},[118,104421,100926],{"class":233},[15,104423,102829],{},[109,104425,104427],{"className":23827,"code":104426,"language":23829,"meta":39,"style":39},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[115,104428,104429,104446,104455],{"__ignoreMap":39},[118,104430,104431,104433,104435,104437,104440,104442,104444],{"class":120,"line":121},[118,104432,30323],{"class":1967},[118,104434,29169],{"class":233},[118,104436,25120],{"class":177},[118,104438,104439],{"class":233}," mujoco-python-api",[118,104441,100968],{"class":233},[118,104443,100971],{"class":177},[118,104445,100974],{"class":177},[118,104447,104448,104450,104452],{"class":120,"line":40},[118,104449,30323],{"class":1967},[118,104451,100981],{"class":233},[118,104453,104454],{"class":233}," mujoco-python-api\n",[118,104456,104457,104459,104461,104463],{"class":120,"line":1183},[118,104458,23836],{"class":1967},[118,104460,23839],{"class":233},[118,104462,100923],{"class":233},[118,104464,100926],{"class":233},[15,104466,100997],{},[72,104468,104469,104476,104485],{},[75,104470,104471,101011,104473,104475],{},[115,104472,100668],{},[115,104474,100673],{}," 是官方 Python bindings 的类名。",[75,104477,104478,104479,104482,104483,28378],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[115,104480,104481],{},"mjModel"," 在 Python 中是 ",[115,104484,100702],{},[75,104486,104487,104488,28378],{},"不要使用 ",[115,104489,104490],{},"sim = mujoco_py.MjSim(...)",[60,104492,101038],{"id":101037},[15,104494,104495],{},"仿真推进核心代码:",[109,104497,104499],{"className":30371,"code":104498,"language":30373,"meta":39,"style":39},"mujoco.mj_step(model, data)\n",[115,104500,104501],{"__ignoreMap":39},[118,104502,104503],{"class":120,"line":121},[118,104504,104498],{"class":128},[15,104506,104507,104508,341,104510,341,104512,28378],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[115,104509,101063],{},[115,104511,101066],{},[115,104513,101060],{},[15,104515,104516],{},"重置仿真:",[109,104518,104520],{"className":30371,"code":104519,"language":30373,"meta":39,"style":39},"mujoco.mj_resetData(model, data)\n",[115,104521,104522],{"__ignoreMap":39},[118,104523,104524],{"class":120,"line":121},[118,104525,104519],{"class":128},[15,104527,104528,104529,82532,104531,104533],{},"如果手动修改了 ",[115,104530,101063],{},[115,104532,101066],{},"，通常应调用:",[109,104535,104537],{"className":30371,"code":104536,"language":30373,"meta":39,"style":39},"mujoco.mj_forward(model, data)\n",[115,104538,104539],{"__ignoreMap":39},[118,104540,104541],{"class":120,"line":121},[118,104542,104536],{"class":128},[15,104544,104545],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[89,104547,104549,341,104551,341,104553,104555],{"id":104548},"qposqvelctrl-是什么",[115,104550,104023],{},[115,104552,104353],{},[115,104554,104356],{}," 是什么",[15,104557,104558],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[266,104560,104561,104573],{},[269,104562,104563],{},[272,104564,104565,104568,104570],{},[275,104566,104567],{"align":23741},"字段",[275,104569,100693],{"align":23741},[275,104571,104572],{"align":23741},"谁来修改",[313,104574,104575,104587,104599],{},[272,104576,104577,104581,104584],{},[318,104578,104579],{"align":23741},[115,104580,101063],{},[318,104582,104583],{"align":23741},"广义位置，例如小车位置、关节角、自由物体位置姿态",[318,104585,104586],{"align":23741},"MuJoCo 更新，也可以手动设置初始状态",[272,104588,104589,104593,104596],{},[318,104590,104591],{"align":23741},[115,104592,101066],{},[318,104594,104595],{"align":23741},"广义速度，例如小车速度、关节角速度",[318,104597,104598],{"align":23741},"MuJoCo 更新，也可以手动清零",[272,104600,104601,104605,104608],{},[318,104602,104603],{"align":23741},[115,104604,101069],{},[318,104606,104607],{"align":23741},"actuator 的控制输入",[318,104609,104610],{"align":23741},"主要由你的控制代码写入",[15,104612,9030,104613,101011,104615,104617],{},[115,104614,104023],{},[115,104616,104353],{}," 不一定同维。自由刚体就是典型例子：",[109,104619,104622],{"className":104620,"code":104621,"language":5192,"meta":39},[5190],"freejoint: qpos 7 维，qvel 6 维\n",[115,104623,104621],{"__ignoreMap":39},[89,104625,104627,101011,104629,104631],{"id":104626},"mj_step-和-mj_forward-的区别",[115,104628,101208],{},[115,104630,104243],{}," 的区别",[266,104633,104634,104647],{},[269,104635,104636],{},[272,104637,104638,104641,104644],{},[275,104639,104640],{"align":23741},"函数",[275,104642,104643],{"align":23741},"是否推进时间",[275,104645,104646],{"align":23741},"什么时候用",[313,104648,104649,104662],{},[272,104650,104651,104656,104659],{},[318,104652,104653],{"align":23741},[115,104654,104655],{},"mj_step(model, data)",[318,104657,104658],{"align":23741},"是",[318,104660,104661],{"align":23741},"正常仿真循环，每调用一次前进一步",[272,104663,104664,104669,104672],{},[318,104665,104666],{"align":23741},[115,104667,104668],{},"mj_forward(model, data)",[318,104670,104671],{"align":23741},"否",[318,104673,104674,104675,341,104677,104679],{"align":23741},"手动改了 ",[115,104676,104023],{},[115,104678,104353],{}," 后，刷新派生量",[15,104681,104682],{},"例如你写：",[109,104684,104686],{"className":30371,"code":104685,"language":30373,"meta":39,"style":39},"data.qpos[2] = 2.0\n",[115,104687,104688],{"__ignoreMap":39},[118,104689,104690,104693,104695,104697,104699],{"class":120,"line":121},[118,104691,104692],{"class":128},"data.qpos[",[118,104694,206],{"class":177},[118,104696,4447],{"class":128},[118,104698,174],{"class":124},[118,104700,104701],{"class":177}," 2.0\n",[15,104703,104704],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[109,104706,104707],{"className":30371,"code":104536,"language":30373,"meta":39,"style":39},[115,104708,104709],{"__ignoreMap":39},[118,104710,104711],{"class":120,"line":121},[118,104712,104536],{"class":128},[89,104714,104716],{"id":104715},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[15,104718,104719,104722,104723,104725],{},[115,104720,104721],{},"mujoco.mj_resetData(model, data)"," 会把 ",[115,104724,33394],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[109,104727,104729],{"className":30371,"code":104728,"language":30373,"meta":39,"style":39},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[115,104730,104731,104735,104745,104755],{"__ignoreMap":39},[118,104732,104733],{"class":120,"line":121},[118,104734,104519],{"class":128},[118,104736,104737,104740,104742],{"class":120,"line":40},[118,104738,104739],{"class":128},"data.qpos[:] ",[118,104741,174],{"class":124},[118,104743,104744],{"class":128}," random_qpos\n",[118,104746,104747,104750,104752],{"class":120,"line":1183},[118,104748,104749],{"class":128},"data.qvel[:] ",[118,104751,174],{"class":124},[118,104753,104754],{"class":177}," 0.0\n",[118,104756,104757],{"class":120,"line":1198},[118,104758,104536],{"class":128},[60,104760,101246],{"id":101245},[109,104762,104764],{"className":30371,"code":104763,"language":30373,"meta":39,"style":39},"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",[115,104765,104766,104772,104782,104786,104790,104798,104803,104807,104811,104815,104820,104824,104829,104834,104839,104843,104847,104851,104855,104859,104863,104882,104889,104901,104912,104928,104944,104948,104952,104964,104976,104984,104988,104999,105003,105019,105023,105027,105036,105040,105045,105054,105058,105071,105076,105085,105089,105093,105105],{"__ignoreMap":39},[118,104767,104768,104770],{"class":120,"line":121},[118,104769,30385],{"class":124},[118,104771,101294],{"class":128},[118,104773,104774,104776,104778,104780],{"class":120,"line":40},[118,104775,30385],{"class":124},[118,104777,31373],{"class":128},[118,104779,31376],{"class":124},[118,104781,31379],{"class":128},[118,104783,104784],{"class":120,"line":1183},[118,104785,2404],{"emptyLinePlaceholder":45},[118,104787,104788],{"class":120,"line":1198},[118,104789,2404],{"emptyLinePlaceholder":45},[118,104791,104792,104794,104796],{"class":120,"line":1204},[118,104793,101307],{"class":177},[118,104795,13569],{"class":124},[118,104797,101312],{"class":233},[118,104799,104800],{"class":120,"line":1218},[118,104801,104802],{"class":233},"\u003Cmujoco model=\"state_api\">\n",[118,104804,104805],{"class":120,"line":1224},[118,104806,101322],{"class":233},[118,104808,104809],{"class":120,"line":1315},[118,104810,2404],{"emptyLinePlaceholder":45},[118,104812,104813],{"class":120,"line":1321},[118,104814,101331],{"class":233},[118,104816,104817],{"class":120,"line":1333},[118,104818,104819],{"class":233},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[118,104821,104822],{"class":120,"line":1616},[118,104823,2404],{"emptyLinePlaceholder":45},[118,104825,104826],{"class":120,"line":1621},[118,104827,104828],{"class":233},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[118,104830,104831],{"class":120,"line":1627},[118,104832,104833],{"class":233},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[118,104835,104836],{"class":120,"line":1632},[118,104837,104838],{"class":233},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[118,104840,104841],{"class":120,"line":1646},[118,104842,101360],{"class":233},[118,104844,104845],{"class":120,"line":1651},[118,104846,101365],{"class":233},[118,104848,104849],{"class":120,"line":1657},[118,104850,101370],{"class":233},[118,104852,104853],{"class":120,"line":1678},[118,104854,95691],{"class":233},[118,104856,104857],{"class":120,"line":1683},[118,104858,2404],{"emptyLinePlaceholder":45},[118,104860,104861],{"class":120,"line":1697},[118,104862,2404],{"emptyLinePlaceholder":45},[118,104864,104865,104867,104870,104873,104875,104878,104880],{"class":120,"line":1702},[118,104866,31940],{"class":124},[118,104868,104869],{"class":1967}," print_state",[118,104871,104872],{"class":128},"(prefix: ",[118,104874,1303],{"class":177},[118,104876,104877],{"class":128},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[118,104879,95679],{"class":177},[118,104881,3743],{"class":128},[118,104883,104884,104886],{"class":120,"line":1731},[118,104885,31292],{"class":177},[118,104887,104888],{"class":128},"(prefix)\n",[118,104890,104891,104893,104895,104898],{"class":120,"line":1736},[118,104892,31292],{"class":177},[118,104894,129],{"class":128},[118,104896,104897],{"class":233},"\"  timestep:\"",[118,104899,104900],{"class":128},", model.opt.timestep)\n",[118,104902,104903,104905,104907,104910],{"class":120,"line":1753},[118,104904,31292],{"class":177},[118,104906,129],{"class":128},[118,104908,104909],{"class":233},"\"  time:\"",[118,104911,101471],{"class":128},[118,104913,104914,104916,104918,104921,104924,104926],{"class":120,"line":1758},[118,104915,31292],{"class":177},[118,104917,129],{"class":128},[118,104919,104920],{"class":233},"\"  qpos:\"",[118,104922,104923],{"class":128},", np.round(data.qpos.copy(), ",[118,104925,421],{"class":177},[118,104927,30490],{"class":128},[118,104929,104930,104932,104934,104937,104940,104942],{"class":120,"line":1763},[118,104931,31292],{"class":177},[118,104933,129],{"class":128},[118,104935,104936],{"class":233},"\"  qvel:\"",[118,104938,104939],{"class":128},", np.round(data.qvel.copy(), ",[118,104941,421],{"class":177},[118,104943,30490],{"class":128},[118,104945,104946],{"class":120,"line":1768},[118,104947,2404],{"emptyLinePlaceholder":45},[118,104949,104950],{"class":120,"line":1782},[118,104951,2404],{"emptyLinePlaceholder":45},[118,104953,104954,104956,104958,104960,104962],{"class":120,"line":1787},[118,104955,31940],{"class":124},[118,104957,1977],{"class":1967},[118,104959,101391],{"class":128},[118,104961,95679],{"class":177},[118,104963,3743],{"class":128},[118,104965,104966,104968,104970,104972,104974],{"class":120,"line":2581},[118,104967,101400],{"class":128},[118,104969,174],{"class":124},[118,104971,101405],{"class":128},[118,104973,101307],{"class":177},[118,104975,135],{"class":128},[118,104977,104978,104980,104982],{"class":120,"line":2595},[118,104979,101414],{"class":128},[118,104981,174],{"class":124},[118,104983,101419],{"class":128},[118,104985,104986],{"class":120,"line":2603},[118,104987,2404],{"emptyLinePlaceholder":45},[118,104989,104990,104993,104996],{"class":120,"line":2608},[118,104991,104992],{"class":128},"    print_state(",[118,104994,104995],{"class":233},"\"initial\"",[118,104997,104998],{"class":128},", model, data)\n",[118,105000,105001],{"class":120,"line":2614},[118,105002,2404],{"emptyLinePlaceholder":45},[118,105004,105005,105007,105009,105011,105013,105015,105017],{"class":120,"line":2620},[118,105006,3205],{"class":124},[118,105008,101494],{"class":128},[118,105010,26036],{"class":124},[118,105012,32436],{"class":177},[118,105014,129],{"class":128},[118,105016,784],{"class":177},[118,105018,30779],{"class":128},[118,105020,105021],{"class":120,"line":2625},[118,105022,101509],{"class":128},[118,105024,105025],{"class":120,"line":7953},[118,105026,2404],{"emptyLinePlaceholder":45},[118,105028,105029,105031,105034],{"class":120,"line":7977},[118,105030,104992],{"class":128},[118,105032,105033],{"class":233},"\"after 50 steps\"",[118,105035,104998],{"class":128},[118,105037,105038],{"class":120,"line":7982},[118,105039,2404],{"emptyLinePlaceholder":45},[118,105041,105042],{"class":120,"line":7988},[118,105043,105044],{"class":128},"    mujoco.mj_resetData(model, data)\n",[118,105046,105047,105049,105052],{"class":120,"line":8015},[118,105048,104992],{"class":128},[118,105050,105051],{"class":233},"\"after reset\"",[118,105053,104998],{"class":128},[118,105055,105056],{"class":120,"line":8020},[118,105057,2404],{"emptyLinePlaceholder":45},[118,105059,105060,105063,105065,105067,105069],{"class":120,"line":8026},[118,105061,105062],{"class":128},"    data.qpos[",[118,105064,206],{"class":177},[118,105066,4447],{"class":128},[118,105068,174],{"class":124},[118,105070,104701],{"class":177},[118,105072,105073],{"class":120,"line":8038},[118,105074,105075],{"class":128},"    mujoco.mj_forward(model, data)\n",[118,105077,105078,105080,105083],{"class":120,"line":8050},[118,105079,104992],{"class":128},[118,105081,105082],{"class":233},"\"after manual qpos edit\"",[118,105084,104998],{"class":128},[118,105086,105087],{"class":120,"line":8062},[118,105088,2404],{"emptyLinePlaceholder":45},[118,105090,105091],{"class":120,"line":9721},[118,105092,2404],{"emptyLinePlaceholder":45},[118,105094,105095,105097,105099,105101,105103],{"class":120,"line":9746},[118,105096,1535],{"class":124},[118,105098,31213],{"class":177},[118,105100,101552],{"class":124},[118,105102,101555],{"class":233},[118,105104,3743],{"class":128},[118,105106,105107],{"class":120,"line":9769},[118,105108,101562],{"class":128},[15,105110,103563],{},[109,105112,105114],{"className":23827,"code":105113,"language":23829,"meta":39,"style":39},"touch ch3_python_state.py\n",[115,105115,105116],{"__ignoreMap":39},[118,105117,105118,105120],{"class":120,"line":121},[118,105119,101276],{"class":1967},[118,105121,105122],{"class":233}," ch3_python_state.py\n",[15,105124,102294],{},[109,105126,105128],{"className":23827,"code":105127,"language":23829,"meta":39,"style":39},"python ch3_python_state.py\n",[115,105129,105130],{"__ignoreMap":39},[118,105131,105132,105134],{"class":120,"line":121},[118,105133,30373],{"class":1967},[118,105135,105122],{"class":233},[89,105137,101565],{"id":101565},[15,105139,105140],{},"打印状态的函数：",[109,105142,105144],{"className":30371,"code":105143,"language":30373,"meta":39,"style":39},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[115,105145,105146],{"__ignoreMap":39},[118,105147,105148,105150,105152,105154,105156,105158,105160],{"class":120,"line":121},[118,105149,31940],{"class":124},[118,105151,104869],{"class":1967},[118,105153,104872],{"class":128},[118,105155,1303],{"class":177},[118,105157,104877],{"class":128},[118,105159,95679],{"class":177},[118,105161,3743],{"class":128},[15,105163,105164,105165,105167],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[115,105166,33394],{}," 里发生了什么。",[15,105169,105170],{},"推进 50 步：",[109,105172,105174],{"className":30371,"code":105173,"language":30373,"meta":39,"style":39},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[115,105175,105176,105192],{"__ignoreMap":39},[118,105177,105178,105180,105182,105184,105186,105188,105190],{"class":120,"line":121},[118,105179,3029],{"class":124},[118,105181,101494],{"class":128},[118,105183,26036],{"class":124},[118,105185,32436],{"class":177},[118,105187,129],{"class":128},[118,105189,784],{"class":177},[118,105191,30779],{"class":128},[118,105193,105194],{"class":120,"line":40},[118,105195,101692],{"class":128},[15,105197,105198,105199,105202,105203,105205],{},"由于 ",[115,105200,105201],{},"timestep=0.01","，所以 50 步后时间约为 ",[115,105204,35322],{}," 秒。",[15,105207,105208],{},"重置：",[109,105210,105211],{"className":30371,"code":104519,"language":30373,"meta":39,"style":39},[115,105212,105213],{"__ignoreMap":39},[118,105214,105215],{"class":120,"line":121},[118,105216,104519],{"class":128},[15,105218,105219],{},"这会把时间、位置、速度恢复到初始状态。",[15,105221,105222],{},"手动改高度：",[109,105224,105226],{"className":30371,"code":105225,"language":30373,"meta":39,"style":39},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[115,105227,105228,105240],{"__ignoreMap":39},[118,105229,105230,105232,105234,105236,105238],{"class":120,"line":121},[118,105231,104692],{"class":128},[118,105233,206],{"class":177},[118,105235,4447],{"class":128},[118,105237,174],{"class":124},[118,105239,104701],{"class":177},[118,105241,105242],{"class":120,"line":40},[118,105243,104536],{"class":128},[15,105245,105246,105247,105250,105251,105254],{},"这个例子里 ",[115,105248,105249],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[115,105252,105253],{},"2.0"," 表示把小球放到更高的位置。",[89,105256,101701],{"id":101701},[109,105258,105259],{"className":30371,"code":105143,"language":30373,"meta":39,"style":39},[115,105260,105261],{"__ignoreMap":39},[118,105262,105263,105265,105267,105269,105271,105273,105275],{"class":120,"line":121},[118,105264,31940],{"class":124},[118,105266,104869],{"class":1967},[118,105268,104872],{"class":128},[118,105270,1303],{"class":177},[118,105272,104877],{"class":128},[118,105274,95679],{"class":177},[118,105276,3743],{"class":128},[15,105278,105279],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[72,105281,105282,105291,105296],{},[75,105283,105284,105287,105288,105290],{},[115,105285,105286],{},"prefix","：一段文字，比如 ",[115,105289,104995],{},"，用来说明现在打印的是哪个阶段。",[75,105292,105293,105295],{},[115,105294,102078],{},"：MuJoCo 模型。",[75,105297,105298,105300],{},[115,105299,33394],{},"：MuJoCo 当前状态。",[15,105302,105303,341,105306,105309],{},[115,105304,105305],{},"prefix: str",[115,105307,105308],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[109,105311,105313],{"className":30371,"code":105312,"language":30373,"meta":39,"style":39},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[115,105314,105315],{"__ignoreMap":39},[118,105316,105317,105319,105321,105323,105325,105327],{"class":120,"line":121},[118,105318,30408],{"class":177},[118,105320,129],{"class":128},[118,105322,104920],{"class":233},[118,105324,104923],{"class":128},[118,105326,421],{"class":177},[118,105328,30490],{"class":128},[15,105330,105331,105334],{},[115,105332,105333],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[109,105336,105338],{"className":30371,"code":105337,"language":30373,"meta":39,"style":39},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[115,105339,105340,105352],{"__ignoreMap":39},[118,105341,105342,105344,105346,105348,105350],{"class":120,"line":121},[118,105343,101627],{"class":128},[118,105345,174],{"class":124},[118,105347,101405],{"class":128},[118,105349,101307],{"class":177},[118,105351,135],{"class":128},[118,105353,105354,105356,105358],{"class":120,"line":40},[118,105355,101651],{"class":128},[118,105357,174],{"class":124},[118,105359,101419],{"class":128},[15,105361,105362],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[109,105364,105366],{"className":30371,"code":105365,"language":30373,"meta":39,"style":39},"print_state(\"initial\", model, data)\n",[115,105367,105368],{"__ignoreMap":39},[118,105369,105370,105373,105375],{"class":120,"line":121},[118,105371,105372],{"class":128},"print_state(",[118,105374,104995],{"class":233},[118,105376,104998],{"class":128},[15,105378,105379,105380,105383],{},"调用刚才定义的 ",[115,105381,105382],{},"print_state"," 函数，打印初始状态。",[109,105385,105386],{"className":30371,"code":105173,"language":30373,"meta":39,"style":39},[115,105387,105388,105404],{"__ignoreMap":39},[118,105389,105390,105392,105394,105396,105398,105400,105402],{"class":120,"line":121},[118,105391,3029],{"class":124},[118,105393,101494],{"class":128},[118,105395,26036],{"class":124},[118,105397,32436],{"class":177},[118,105399,129],{"class":128},[118,105401,784],{"class":177},[118,105403,30779],{"class":128},[118,105405,105406],{"class":120,"line":40},[118,105407,101692],{"class":128},[15,105409,105410],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[109,105412,105413],{"className":30371,"code":104519,"language":30373,"meta":39,"style":39},[115,105414,105415],{"__ignoreMap":39},[118,105416,105417],{"class":120,"line":121},[118,105418,104519],{"class":128},[15,105420,105421,105422,105424,105425,105427],{},"重置 ",[115,105423,33394],{},"。注意它不会重新创建 ",[115,105426,102078],{},"，因为模型结构没有变，只是状态回到初始值。",[109,105429,105430],{"className":30371,"code":104685,"language":30373,"meta":39,"style":39},[115,105431,105432],{"__ignoreMap":39},[118,105433,105434,105436,105438,105440,105442],{"class":120,"line":121},[118,105435,104692],{"class":128},[118,105437,206],{"class":177},[118,105439,4447],{"class":128},[118,105441,174],{"class":124},[118,105443,104701],{"class":177},[15,105445,105446,105447,341,105450,341,105453,105455],{},"这行是“手动改状态”。在 freejoint 中，",[115,105448,105449],{},"qpos[0]",[115,105451,105452],{},"qpos[1]",[115,105454,105249],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[109,105457,105458],{"className":30371,"code":104536,"language":30373,"meta":39,"style":39},[115,105459,105460],{"__ignoreMap":39},[118,105461,105462],{"class":120,"line":121},[118,105463,104536],{"class":128},[15,105465,105466,105467,105469,105470,105472],{},"手动改完 ",[115,105468,104023],{}," 后，调用 ",[115,105471,104243],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[60,105474,102309],{"id":102308},[15,105476,105477],{},"你会看到:",[72,105479,105480,105485,105490,105493],{},[75,105481,105482,105483],{},"初始时间为 ",[115,105484,320],{},[75,105486,105487,105488],{},"50 步后时间约为 ",[115,105489,35322],{},[75,105491,105492],{},"reset 后状态恢复",[75,105494,105495,105496,105499,105500],{},"手动修改 ",[115,105497,105498],{},"data.qpos[2]"," 后，小球高度变为 ",[115,105501,105253],{},[15,105503,105504,105506],{},[115,105505,105249],{}," 在这个例子中表示自由刚体的 z 坐标。",[15,105508,105509],{},"输出里可以重点看三件事：",[72,105511,105512,105520,105525],{},[75,105513,105514,105516,105517,105519],{},[115,105515,2391],{}," 是否随着 ",[115,105518,101208],{}," 增加。",[75,105521,105522,105524],{},[115,105523,104023],{}," 的 z 坐标是否因为下落而变化。",[75,105526,105527,105529,105530,28378],{},[115,105528,104345],{}," 后时间是否回到 ",[115,105531,320],{},[60,105533,102341],{"id":102340},[72,105535,105536,105542,105548,105554,105557,105566],{},[75,105537,105538,105539,28378],{},"修改 timestep 为 ",[115,105540,105541],{},"0.005",[75,105543,105544,105545,28378],{},"重新运行，检查 50 步后时间是否约为 ",[115,105546,105547],{},"0.25",[75,105549,105550,105551,28378],{},"修改重力为 ",[115,105552,105553],{},"0 0 -1.0",[75,105555,105556],{},"观察小球下降速度是否变慢。",[75,105558,102404,105559,102407,105562,105565],{},[115,105560,105561],{},"data.qpos[2] = 2.0",[115,105563,105564],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[75,105567,105568,105569,105572],{},"注释掉 ",[115,105570,105571],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[60,105574,102446],{"id":102445},[89,105576,105578,105579,105581],{"id":105577},"修改-dataqpos-后位置没有更新","修改 ",[115,105580,101063],{}," 后位置没有更新",[15,105583,102455],{},[109,105585,105586],{"className":30371,"code":104536,"language":30373,"meta":39,"style":39},[115,105587,105588],{"__ignoreMap":39},[118,105589,105590],{"class":120,"line":121},[118,105591,104536],{"class":128},[89,105593,105594],{"id":105594},"数组维度看不懂",[15,105596,105597],{},"打印模型维度:",[109,105599,105601],{"className":30371,"code":105600,"language":30373,"meta":39,"style":39},"print(model.nq, model.nv, model.nu)\n",[115,105602,105603],{"__ignoreMap":39},[118,105604,105605,105607],{"class":120,"line":121},[118,105606,30408],{"class":177},[118,105608,105609],{"class":128},"(model.nq, model.nv, model.nu)\n",[266,105611,105612,105620],{},[269,105613,105614],{},[272,105615,105616,105618],{},[275,105617,104567],{"align":23741},[275,105619,100693],{"align":23741},[313,105621,105622,105632,105642],{},[272,105623,105624,105629],{},[318,105625,105626],{"align":23741},[115,105627,105628],{},"nq",[318,105630,105631],{"align":23741},"位置变量数量",[272,105633,105634,105639],{},[318,105635,105636],{"align":23741},[115,105637,105638],{},"nv",[318,105640,105641],{"align":23741},"速度变量数量",[272,105643,105644,105648],{},[318,105645,105646],{"align":23741},[115,105647,102155],{},[318,105649,105650],{"align":23741},"控制输入数量",[89,105652,105654,105655,105657],{"id":105653},"误以为-qpos-一定等于关节数","误以为 ",[115,105656,104023],{}," 一定等于关节数",[15,105659,105660,105661,82523,105663,105665,105666,105668],{},"不是。例如 ",[115,105662,101613],{},[115,105664,104023],{}," 是 7 维，但 ",[115,105667,104353],{}," 是 6 维。",[89,105670,105672,105673,105675],{"id":105671},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[115,105674,104023],{}," 的第几位",[15,105677,105678],{},"初学时可以先打印：",[109,105680,105682],{"className":30371,"code":105681,"language":30373,"meta":39,"style":39},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[115,105683,105684,105694,105704,105716],{"__ignoreMap":39},[118,105685,105686,105688,105690,105692],{"class":120,"line":121},[118,105687,30408],{"class":177},[118,105689,129],{"class":128},[118,105691,101432],{"class":233},[118,105693,101435],{"class":128},[118,105695,105696,105698,105700,105702],{"class":120,"line":40},[118,105697,30408],{"class":177},[118,105699,129],{"class":128},[118,105701,101444],{"class":233},[118,105703,101447],{"class":128},[118,105705,105706,105708,105710,105713],{"class":120,"line":1183},[118,105707,30408],{"class":177},[118,105709,129],{"class":128},[118,105711,105712],{"class":233},"\"qpos:\"",[118,105714,105715],{"class":128},", data.qpos)\n",[118,105717,105718,105720,105722,105725],{"class":120,"line":1198},[118,105719,30408],{"class":177},[118,105721,129],{"class":128},[118,105723,105724],{"class":233},"\"qvel:\"",[118,105726,105727],{"class":128},", data.qvel)\n",[15,105729,105730],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[89,105732,105733],{"id":105733},"仿真结果每次都一样",[15,105735,105736,105737,105739],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[115,105738,104023],{},"、目标点或控制输入。",[60,105741,102600],{"id":102599},[15,105743,105744,105745,24623],{},"Python 控制 MuJoCo 的核心就是读写 ",[115,105746,33394],{},[72,105748,105749,105757,105762,105767],{},[75,105750,105751,105752,101011,105754,105756],{},"用 ",[115,105753,101063],{},[115,105755,101066],{}," 读取状态。",[75,105758,105751,105759,105761],{},[115,105760,101069],{}," 写入控制。",[75,105763,105751,105764,105766],{},[115,105765,101208],{}," 推进时间。",[75,105768,105769,105770,105772],{},"手动改状态后用 ",[115,105771,104243],{}," 刷新派生量。",[15,105774,105775],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5131,105777,105778],{},"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":39,"searchDepth":40,"depth":40,"links":105780},[105781,105782,105783,105790,105794,105795,105796,105806],{"id":100639,"depth":40,"text":100640},{"id":100762,"depth":40,"text":100763},{"id":101037,"depth":40,"text":101038,"children":105784},[105785,105787,105789],{"id":104548,"depth":1183,"text":105786},"qpos、qvel、ctrl 是什么",{"id":104626,"depth":1183,"text":105788},"mj_step 和 mj_forward 的区别",{"id":104715,"depth":1183,"text":104716},{"id":101245,"depth":40,"text":101246,"children":105791},[105792,105793],{"id":101565,"depth":1183,"text":101565},{"id":101701,"depth":1183,"text":101701},{"id":102308,"depth":40,"text":102309},{"id":102340,"depth":40,"text":102341},{"id":102445,"depth":40,"text":102446,"children":105797},[105798,105800,105801,105803,105805],{"id":105577,"depth":1183,"text":105799},"修改 data.qpos 后位置没有更新",{"id":105594,"depth":1183,"text":105594},{"id":105653,"depth":1183,"text":105802},"误以为 qpos 一定等于关节数",{"id":105671,"depth":1183,"text":105804},"不知道某个元素在 qpos 的第几位",{"id":105733,"depth":1183,"text":105733},{"id":102599,"depth":40,"text":102600},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104311,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105813,"title":105814,"body":105815,"description":39,"extension":43,"meta":107505,"navigation":45,"path":107506,"seo":107507,"stem":107508,"__hash__":107509},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105816,"toc":107481},[105817,105820,105822,105825,105827,105852,105855,105874,105877,105879,105881,105905,105907,105921,105923,105964,105966,105990,105992,105995,106029,106031,106044,106047,106115,106124,106128,106131,106165,106171,106174,106178,106217,106220,106240,106244,106287,106289,106318,106321,106327,106330,106332,106726,106728,106740,106742,106753,106755,106758,106787,106795,106798,106833,106836,106838,106846,106849,106851,106862,106872,106892,106895,106931,106943,106991,107010,107052,107065,107093,107098,107119,107129,107147,107150,107184,107187,107207,107210,107229,107235,107237,107240,107246,107252,107262,107265,107271,107280,107282,107328,107330,107336,107342,107345,107348,107368,107371,107377,107383,107385,107408,107411,107414,107423,107426,107464,107466,107469,107475,107478],[10,105818,105814],{"id":105819},"_4关节actuator-与力控制",[60,105821,100640],{"id":100639},[15,105823,105824],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[15,105826,104324],{},[72,105828,105829,105835,105840,105844,105849],{},[75,105830,105831,105834],{},[115,105832,105833],{},"hinge"," 关节",[75,105836,105837],{},[115,105838,105839],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[75,105841,105842],{},[115,105843,101069],{},[75,105845,105846],{},[115,105847,105848],{},"ctrlrange",[75,105850,105851],{},"读取关节角和角速度",[15,105853,105854],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[109,105856,105858],{"className":30371,"code":105857,"language":30373,"meta":39,"style":39},"data.ctrl[0] = ...\n",[115,105859,105860],{"__ignoreMap":39},[118,105861,105862,105865,105867,105869,105871],{"class":120,"line":121},[118,105863,105864],{"class":128},"data.ctrl[",[118,105866,320],{"class":177},[118,105868,4447],{"class":128},[118,105870,174],{"class":124},[118,105872,105873],{"class":177}," ...\n",[15,105875,105876],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[60,105878,100763],{"id":100762},[15,105880,100766],{},[109,105882,105883],{"className":23827,"code":104381,"language":23829,"meta":39,"style":39},[115,105884,105885],{"__ignoreMap":39},[118,105886,105887,105889,105891,105893,105895,105897,105899,105901,105903],{"class":120,"line":121},[118,105888,24581],{"class":1967},[118,105890,26308],{"class":233},[118,105892,23839],{"class":233},[118,105894,26393],{"class":177},[118,105896,104396],{"class":233},[118,105898,100791],{"class":233},[118,105900,102494],{"class":233},[118,105902,100807],{"class":233},[118,105904,104405],{"class":233},[15,105906,102812],{},[109,105908,105909],{"className":23827,"code":100912,"language":23829,"meta":39,"style":39},[115,105910,105911],{"__ignoreMap":39},[118,105912,105913,105915,105917,105919],{"class":120,"line":121},[118,105914,23836],{"class":1967},[118,105916,23839],{"class":233},[118,105918,100923],{"class":233},[118,105920,100926],{"class":233},[15,105922,102829],{},[109,105924,105926],{"className":23827,"code":105925,"language":23829,"meta":39,"style":39},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[115,105927,105928,105945,105954],{"__ignoreMap":39},[118,105929,105930,105932,105934,105936,105939,105941,105943],{"class":120,"line":121},[118,105931,30323],{"class":1967},[118,105933,29169],{"class":233},[118,105935,25120],{"class":177},[118,105937,105938],{"class":233}," mujoco-control",[118,105940,100968],{"class":233},[118,105942,100971],{"class":177},[118,105944,100974],{"class":177},[118,105946,105947,105949,105951],{"class":120,"line":40},[118,105948,30323],{"class":1967},[118,105950,100981],{"class":233},[118,105952,105953],{"class":233}," mujoco-control\n",[118,105955,105956,105958,105960,105962],{"class":120,"line":1183},[118,105957,23836],{"class":1967},[118,105959,23839],{"class":233},[118,105961,100923],{"class":233},[118,105963,100926],{"class":233},[15,105965,100997],{},[72,105967,105968,105974,105981,105987],{},[75,105969,105970,105973],{},[115,105971,105972],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[75,105975,105976,105978,105979,28378],{},[115,105977,101069],{}," 长度等于 ",[115,105980,102151],{},[75,105982,82215,105983,105986],{},[115,105984,105985],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[75,105988,105989],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[60,105991,101038],{"id":101037},[15,105993,105994],{},"关节决定 body 如何运动:",[109,105996,105998],{"className":53060,"code":105997,"language":53062,"meta":39,"style":39},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[115,105999,106000],{"__ignoreMap":39},[118,106001,106002,106004,106006,106008,106010,106013,106015,106017,106019,106022,106024,106027],{"class":120,"line":121},[118,106003,1038],{"class":128},[118,106005,102949],{"class":51293},[118,106007,14925],{"class":1967},[118,106009,174],{"class":128},[118,106011,106012],{"class":233},"\"hinge\"",[118,106014,53817],{"class":1967},[118,106016,174],{"class":128},[118,106018,106012],{"class":233},[118,106020,106021],{"class":1967}," axis",[118,106023,174],{"class":128},[118,106025,106026],{"class":233},"\"0 1 0\"",[118,106028,101137],{"class":128},[15,106030,103045],{},[72,106032,106033,106038,106041],{},[75,106034,106035,106036],{},"名字是 ",[115,106037,105833],{},[75,106039,106040],{},"类型是旋转关节",[75,106042,106043],{},"绕 y 轴旋转",[15,106045,106046],{},"actuator 决定如何施加控制:",[109,106048,106050],{"className":53060,"code":106049,"language":53062,"meta":39,"style":39},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[115,106051,106052,106061,106107],{"__ignoreMap":39},[118,106053,106054,106056,106059],{"class":120,"line":121},[118,106055,1038],{"class":128},[118,106057,106058],{"class":51293},"actuator",[118,106060,51300],{"class":128},[118,106062,106063,106065,106068,106070,106072,106075,106078,106080,106082,106085,106087,106089,106092,106094,106097,106100,106102,106105],{"class":120,"line":40},[118,106064,52137],{"class":128},[118,106066,106067],{"class":51293},"motor",[118,106069,14925],{"class":1967},[118,106071,174],{"class":128},[118,106073,106074],{"class":233},"\"hinge_motor\"",[118,106076,106077],{"class":1967}," joint",[118,106079,174],{"class":128},[118,106081,106012],{"class":233},[118,106083,106084],{"class":1967}," gear",[118,106086,174],{"class":128},[118,106088,3682],{"class":233},[118,106090,106091],{"class":1967}," ctrlrange",[118,106093,174],{"class":128},[118,106095,106096],{"class":233},"\"-2 2\"",[118,106098,106099],{"class":1967}," ctrllimited",[118,106101,174],{"class":128},[118,106103,106104],{"class":233},"\"true\"",[118,106106,101137],{"class":128},[118,106108,106109,106111,106113],{"class":120,"line":1183},[118,106110,51778],{"class":128},[118,106112,106058],{"class":51293},[118,106114,51300],{"class":128},[15,106116,106117,106120,106121,28378],{},[115,106118,106119],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[115,106122,106123],{},"[-2, 2]",[89,106125,106127],{"id":106126},"joint-和-actuator-的关系","joint 和 actuator 的关系",[15,106129,106130],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[266,106132,106133,106143],{},[269,106134,106135],{},[272,106136,106137,106139,106141],{},[275,106138,25746],{"align":23741},[275,106140,102689],{"align":23741},[275,106142,100727],{"align":23741},[313,106144,106145,106155],{},[272,106146,106147,106149,106152],{},[318,106148,102949],{"align":23741},[318,106150,106151],{"align":23741},"定义能怎么动",[318,106153,106154],{"align":23741},"门轴允许门旋转",[272,106156,106157,106159,106162],{},[318,106158,106058],{"align":23741},[318,106160,106161],{"align":23741},"定义怎么施力或控制",[318,106163,106164],{"align":23741},"人推门、马达带动门",[15,106166,106167,106168,106170],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[115,106169,101069],{}," 主动控制它。",[15,106172,106173],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[89,106175,106177],{"id":106176},"hinge-joint","hinge joint",[109,106179,106181],{"className":53060,"code":106180,"language":53062,"meta":39,"style":39},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[115,106182,106183],{"__ignoreMap":39},[118,106184,106185,106187,106189,106191,106193,106195,106197,106199,106201,106203,106205,106207,106210,106212,106215],{"class":120,"line":121},[118,106186,1038],{"class":128},[118,106188,102949],{"class":51293},[118,106190,14925],{"class":1967},[118,106192,174],{"class":128},[118,106194,106012],{"class":233},[118,106196,53817],{"class":1967},[118,106198,174],{"class":128},[118,106200,106012],{"class":233},[118,106202,106021],{"class":1967},[118,106204,174],{"class":128},[118,106206,106026],{"class":233},[118,106208,106209],{"class":1967}," damping",[118,106211,174],{"class":128},[118,106213,106214],{"class":233},"\"0.1\"",[118,106216,101137],{"class":128},[15,106218,106219],{},"含义：",[72,106221,106222,106228,106234],{},[75,106223,106224,106227],{},[115,106225,106226],{},"type=\"hinge\"","：只能绕一个轴旋转。",[75,106229,106230,106233],{},[115,106231,106232],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[75,106235,106236,106239],{},[115,106237,106238],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[89,106241,106243],{"id":106242},"motor-actuator","motor actuator",[109,106245,106247],{"className":53060,"code":106246,"language":53062,"meta":39,"style":39},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[115,106248,106249],{"__ignoreMap":39},[118,106250,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273,106275,106277,106279,106281,106283,106285],{"class":120,"line":121},[118,106252,1038],{"class":128},[118,106254,106067],{"class":51293},[118,106256,14925],{"class":1967},[118,106258,174],{"class":128},[118,106260,106074],{"class":233},[118,106262,106077],{"class":1967},[118,106264,174],{"class":128},[118,106266,106012],{"class":233},[118,106268,106084],{"class":1967},[118,106270,174],{"class":128},[118,106272,3682],{"class":233},[118,106274,106091],{"class":1967},[118,106276,174],{"class":128},[118,106278,106096],{"class":233},[118,106280,106099],{"class":1967},[118,106282,174],{"class":128},[118,106284,106104],{"class":233},[118,106286,101137],{"class":128},[15,106288,106219],{},[72,106290,106291,106300,106306,106312],{},[75,106292,106293,106296,106297,106299],{},[115,106294,106295],{},"joint=\"hinge\"","：这个电机作用在名为 ",[115,106298,105833],{}," 的关节上。",[75,106301,106302,106305],{},[115,106303,106304],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[75,106307,106308,106311],{},[115,106309,106310],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[75,106313,106314,106317],{},[115,106315,106316],{},"ctrllimited=\"true\"","：启用控制范围限制。",[15,106319,106320],{},"简单理解：",[109,106322,106325],{"className":106323,"code":106324,"language":5192,"meta":39},[5190],"实际施加效果 ≈ data.ctrl[0] * gear\n",[115,106326,106324],{"__ignoreMap":39},[15,106328,106329],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[60,106331,101246],{"id":101245},[109,106333,106335],{"className":30371,"code":106334,"language":30373,"meta":39,"style":39},"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",[115,106336,106337,106344,106348,106354,106364,106368,106372,106380,106385,106390,106394,106398,106403,106408,106412,106417,106422,106427,106432,106436,106440,106444,106449,106454,106459,106463,106467,106471,106475,106487,106499,106507,106511,106521,106531,106541,106545,106558,106571,106575,106592,106606,106641,106645,106649,106660,106675,106690,106702,106706,106710,106722],{"__ignoreMap":39},[118,106338,106339,106341],{"class":120,"line":121},[118,106340,30385],{"class":124},[118,106342,106343],{"class":128}," math\n",[118,106345,106346],{"class":120,"line":40},[118,106347,2404],{"emptyLinePlaceholder":45},[118,106349,106350,106352],{"class":120,"line":1183},[118,106351,30385],{"class":124},[118,106353,101294],{"class":128},[118,106355,106356,106358,106360,106362],{"class":120,"line":1198},[118,106357,30385],{"class":124},[118,106359,31373],{"class":128},[118,106361,31376],{"class":124},[118,106363,31379],{"class":128},[118,106365,106366],{"class":120,"line":1204},[118,106367,2404],{"emptyLinePlaceholder":45},[118,106369,106370],{"class":120,"line":1218},[118,106371,2404],{"emptyLinePlaceholder":45},[118,106373,106374,106376,106378],{"class":120,"line":1224},[118,106375,101307],{"class":177},[118,106377,13569],{"class":124},[118,106379,101312],{"class":233},[118,106381,106382],{"class":120,"line":1315},[118,106383,106384],{"class":233},"\u003Cmujoco model=\"one_link_motor\">\n",[118,106386,106387],{"class":120,"line":1321},[118,106388,106389],{"class":233},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[118,106391,106392],{"class":120,"line":1333},[118,106393,2404],{"emptyLinePlaceholder":45},[118,106395,106396],{"class":120,"line":1616},[118,106397,101331],{"class":233},[118,106399,106400],{"class":120,"line":1621},[118,106401,106402],{"class":233},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[118,106404,106405],{"class":120,"line":1627},[118,106406,106407],{"class":233},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[118,106409,106410],{"class":120,"line":1632},[118,106411,2404],{"emptyLinePlaceholder":45},[118,106413,106414],{"class":120,"line":1646},[118,106415,106416],{"class":233},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[118,106418,106419],{"class":120,"line":1651},[118,106420,106421],{"class":233},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[118,106423,106424],{"class":120,"line":1657},[118,106425,106426],{"class":233},"        \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",[118,106428,106429],{"class":120,"line":1678},[118,106430,106431],{"class":233},"      \u003C\u002Fbody>\n",[118,106433,106434],{"class":120,"line":1683},[118,106435,101360],{"class":233},[118,106437,106438],{"class":120,"line":1697},[118,106439,101365],{"class":233},[118,106441,106442],{"class":120,"line":1702},[118,106443,2404],{"emptyLinePlaceholder":45},[118,106445,106446],{"class":120,"line":1731},[118,106447,106448],{"class":233},"  \u003Cactuator>\n",[118,106450,106451],{"class":120,"line":1736},[118,106452,106453],{"class":233},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[118,106455,106456],{"class":120,"line":1753},[118,106457,106458],{"class":233},"  \u003C\u002Factuator>\n",[118,106460,106461],{"class":120,"line":1758},[118,106462,101370],{"class":233},[118,106464,106465],{"class":120,"line":1763},[118,106466,95691],{"class":233},[118,106468,106469],{"class":120,"line":1768},[118,106470,2404],{"emptyLinePlaceholder":45},[118,106472,106473],{"class":120,"line":1782},[118,106474,2404],{"emptyLinePlaceholder":45},[118,106476,106477,106479,106481,106483,106485],{"class":120,"line":1787},[118,106478,31940],{"class":124},[118,106480,1977],{"class":1967},[118,106482,101391],{"class":128},[118,106484,95679],{"class":177},[118,106486,3743],{"class":128},[118,106488,106489,106491,106493,106495,106497],{"class":120,"line":2581},[118,106490,101400],{"class":128},[118,106492,174],{"class":124},[118,106494,101405],{"class":128},[118,106496,101307],{"class":177},[118,106498,135],{"class":128},[118,106500,106501,106503,106505],{"class":120,"line":2595},[118,106502,101414],{"class":128},[118,106504,174],{"class":124},[118,106506,101419],{"class":128},[118,106508,106509],{"class":120,"line":2603},[118,106510,2404],{"emptyLinePlaceholder":45},[118,106512,106513,106515,106517,106519],{"class":120,"line":2608},[118,106514,31292],{"class":177},[118,106516,129],{"class":128},[118,106518,101432],{"class":233},[118,106520,101435],{"class":128},[118,106522,106523,106525,106527,106529],{"class":120,"line":2614},[118,106524,31292],{"class":177},[118,106526,129],{"class":128},[118,106528,101444],{"class":233},[118,106530,101447],{"class":128},[118,106532,106533,106535,106537,106539],{"class":120,"line":2620},[118,106534,31292],{"class":177},[118,106536,129],{"class":128},[118,106538,101456],{"class":233},[118,106540,101459],{"class":128},[118,106542,106543],{"class":120,"line":2625},[118,106544,2404],{"emptyLinePlaceholder":45},[118,106546,106547,106549,106552,106554,106556],{"class":120,"line":7953},[118,106548,3105],{"class":124},[118,106550,106551],{"class":128}," model.nu ",[118,106553,20953],{"class":124},[118,106555,25123],{"class":177},[118,106557,3743],{"class":128},[118,106559,106560,106562,106564,106566,106569],{"class":120,"line":7977},[118,106561,103425],{"class":124},[118,106563,103428],{"class":177},[118,106565,129],{"class":128},[118,106567,106568],{"class":233},"\"expected exactly one actuator\"",[118,106570,135],{"class":128},[118,106572,106573],{"class":120,"line":7982},[118,106574,2404],{"emptyLinePlaceholder":45},[118,106576,106577,106579,106581,106583,106585,106587,106590],{"class":120,"line":7988},[118,106578,3205],{"class":124},[118,106580,31609],{"class":128},[118,106582,26036],{"class":124},[118,106584,32436],{"class":177},[118,106586,129],{"class":128},[118,106588,106589],{"class":177},"2000",[118,106591,30779],{"class":128},[118,106593,106594,106597,106599,106601,106603],{"class":120,"line":8015},[118,106595,106596],{"class":128},"        t ",[118,106598,174],{"class":124},[118,106600,31609],{"class":128},[118,106602,583],{"class":124},[118,106604,106605],{"class":128}," model.opt.timestep\n",[118,106607,106608,106611,106613,106615,106617,106620,106622,106625,106627,106629,106632,106634,106636,106638],{"class":120,"line":8020},[118,106609,106610],{"class":128},"        data.ctrl[",[118,106612,320],{"class":177},[118,106614,4447],{"class":128},[118,106616,174],{"class":124},[118,106618,106619],{"class":177}," 1.5",[118,106621,6523],{"class":124},[118,106623,106624],{"class":128}," math.sin(",[118,106626,105253],{"class":177},[118,106628,6523],{"class":124},[118,106630,106631],{"class":128}," math.pi ",[118,106633,583],{"class":124},[118,106635,61860],{"class":177},[118,106637,6523],{"class":124},[118,106639,106640],{"class":128}," t)\n",[118,106642,106643],{"class":120,"line":8026},[118,106644,101509],{"class":128},[118,106646,106647],{"class":120,"line":8038},[118,106648,2404],{"emptyLinePlaceholder":45},[118,106650,106651,106653,106655,106658],{"class":120,"line":8050},[118,106652,31292],{"class":177},[118,106654,129],{"class":128},[118,106656,106657],{"class":233},"\"time:\"",[118,106659,101471],{"class":128},[118,106661,106662,106664,106666,106669,106671,106673],{"class":120,"line":8062},[118,106663,31292],{"class":177},[118,106665,129],{"class":128},[118,106667,106668],{"class":233},"\"joint qpos:\"",[118,106670,104923],{"class":128},[118,106672,421],{"class":177},[118,106674,30490],{"class":128},[118,106676,106677,106679,106681,106684,106686,106688],{"class":120,"line":9721},[118,106678,31292],{"class":177},[118,106680,129],{"class":128},[118,106682,106683],{"class":233},"\"joint qvel:\"",[118,106685,104939],{"class":128},[118,106687,421],{"class":177},[118,106689,30490],{"class":128},[118,106691,106692,106694,106696,106699],{"class":120,"line":9746},[118,106693,31292],{"class":177},[118,106695,129],{"class":128},[118,106697,106698],{"class":233},"\"last ctrl:\"",[118,106700,106701],{"class":128},", data.ctrl.copy())\n",[118,106703,106704],{"class":120,"line":9769},[118,106705,2404],{"emptyLinePlaceholder":45},[118,106707,106708],{"class":120,"line":9793},[118,106709,2404],{"emptyLinePlaceholder":45},[118,106711,106712,106714,106716,106718,106720],{"class":120,"line":9798},[118,106713,1535],{"class":124},[118,106715,31213],{"class":177},[118,106717,101552],{"class":124},[118,106719,101555],{"class":233},[118,106721,3743],{"class":128},[118,106723,106724],{"class":120,"line":9803},[118,106725,101562],{"class":128},[15,106727,103563],{},[109,106729,106731],{"className":23827,"code":106730,"language":23829,"meta":39,"style":39},"touch ch4_joint_motor.py\n",[115,106732,106733],{"__ignoreMap":39},[118,106734,106735,106737],{"class":120,"line":121},[118,106736,101276],{"class":1967},[118,106738,106739],{"class":233}," ch4_joint_motor.py\n",[15,106741,102294],{},[109,106743,106745],{"className":23827,"code":106744,"language":23829,"meta":39,"style":39},"python ch4_joint_motor.py\n",[115,106746,106747],{"__ignoreMap":39},[118,106748,106749,106751],{"class":120,"line":121},[118,106750,30373],{"class":1967},[118,106752,106739],{"class":233},[89,106754,101565],{"id":101565},[15,106756,106757],{},"检查 actuator 数量：",[109,106759,106761],{"className":30371,"code":106760,"language":30373,"meta":39,"style":39},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[115,106762,106763,106775],{"__ignoreMap":39},[118,106764,106765,106767,106769,106771,106773],{"class":120,"line":121},[118,106766,1535],{"class":124},[118,106768,106551],{"class":128},[118,106770,20953],{"class":124},[118,106772,25123],{"class":177},[118,106774,3743],{"class":128},[118,106776,106777,106779,106781,106783,106785],{"class":120,"line":40},[118,106778,103888],{"class":124},[118,106780,103428],{"class":177},[118,106782,129],{"class":128},[118,106784,106568],{"class":233},[118,106786,135],{"class":128},[15,106788,106789,106791,106792,106794],{},[115,106790,102151],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[115,106793,101069],{}," 长度应该是 1。",[15,106796,106797],{},"产生正弦控制信号：",[109,106799,106801],{"className":30371,"code":106800,"language":30373,"meta":39,"style":39},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[115,106802,106803],{"__ignoreMap":39},[118,106804,106805,106807,106809,106811,106813,106815,106817,106819,106821,106823,106825,106827,106829,106831],{"class":120,"line":121},[118,106806,105864],{"class":128},[118,106808,320],{"class":177},[118,106810,4447],{"class":128},[118,106812,174],{"class":124},[118,106814,106619],{"class":177},[118,106816,6523],{"class":124},[118,106818,106624],{"class":128},[118,106820,105253],{"class":177},[118,106822,6523],{"class":124},[118,106824,106631],{"class":128},[118,106826,583],{"class":124},[118,106828,61860],{"class":177},[118,106830,6523],{"class":124},[118,106832,106640],{"class":128},[15,106834,106835],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[15,106837,101666],{},[109,106839,106840],{"className":30371,"code":104498,"language":30373,"meta":39,"style":39},[115,106841,106842],{"__ignoreMap":39},[118,106843,106844],{"class":120,"line":121},[118,106845,104498],{"class":128},[15,106847,106848],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[89,106850,101701],{"id":101701},[109,106852,106854],{"className":30371,"code":106853,"language":30373,"meta":39,"style":39},"import math\n",[115,106855,106856],{"__ignoreMap":39},[118,106857,106858,106860],{"class":120,"line":121},[118,106859,30385],{"class":124},[118,106861,106343],{"class":128},[15,106863,106864,106865,101011,106868,106871],{},"导入 Python 标准库里的数学模块。后面要用 ",[115,106866,106867],{},"math.sin",[115,106869,106870],{},"math.pi"," 生成周期变化的控制信号。",[109,106873,106874],{"className":30371,"code":103679,"language":30373,"meta":39,"style":39},[115,106875,106876,106882],{"__ignoreMap":39},[118,106877,106878,106880],{"class":120,"line":121},[118,106879,30385],{"class":124},[118,106881,101294],{"class":128},[118,106883,106884,106886,106888,106890],{"class":120,"line":40},[118,106885,30385],{"class":124},[118,106887,31373],{"class":128},[118,106889,31376],{"class":124},[118,106891,31379],{"class":128},[15,106893,106894],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[109,106896,106897],{"className":53060,"code":106180,"language":53062,"meta":39,"style":39},[115,106898,106899],{"__ignoreMap":39},[118,106900,106901,106903,106905,106907,106909,106911,106913,106915,106917,106919,106921,106923,106925,106927,106929],{"class":120,"line":121},[118,106902,1038],{"class":128},[118,106904,102949],{"class":51293},[118,106906,14925],{"class":1967},[118,106908,174],{"class":128},[118,106910,106012],{"class":233},[118,106912,53817],{"class":1967},[118,106914,174],{"class":128},[118,106916,106012],{"class":233},[118,106918,106021],{"class":1967},[118,106920,174],{"class":128},[118,106922,106026],{"class":233},[118,106924,106209],{"class":1967},[118,106926,174],{"class":128},[118,106928,106214],{"class":233},[118,106930,101137],{"class":128},[15,106932,106933,106934,106936,106937,106939,106940,106942],{},"这行定义关节。",[115,106935,105833],{}," 表示旋转关节。",[115,106938,106232],{}," 表示绕 y 轴旋转。",[115,106941,106238],{}," 表示有一点阻尼，运动不会完全无损耗。",[109,106944,106946],{"className":53060,"code":106945,"language":53062,"meta":39,"style":39},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[115,106947,106948],{"__ignoreMap":39},[118,106949,106950,106952,106954,106956,106958,106961,106963,106965,106968,106971,106973,106976,106978,106980,106982,106984,106986,106989],{"class":120,"line":121},[118,106951,1038],{"class":128},[118,106953,101113],{"class":51293},[118,106955,14925],{"class":1967},[118,106957,174],{"class":128},[118,106959,106960],{"class":233},"\"link_geom\"",[118,106962,53817],{"class":1967},[118,106964,174],{"class":128},[118,106966,106967],{"class":233},"\"capsule\"",[118,106969,106970],{"class":1967}," fromto",[118,106972,174],{"class":128},[118,106974,106975],{"class":233},"\"0 0 0 0 0 0.5\"",[118,106977,101129],{"class":1967},[118,106979,174],{"class":128},[118,106981,103771],{"class":233},[118,106983,101994],{"class":1967},[118,106985,174],{"class":128},[118,106987,106988],{"class":233},"\"0.5\"",[118,106990,101137],{"class":128},[15,106992,106993,106994,106996,106997,106999,107000,107003,107004,28378,107007,107009],{},"这行定义摆杆的形状。",[115,106995,103158],{}," 是胶囊体，适合表示杆子。",[115,106998,103169],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[115,107001,107002],{},"(0,0,0)"," 延伸到 ",[115,107005,107006],{},"(0,0,0.5)",[115,107008,103163],{}," 是半径。",[109,107011,107012],{"className":53060,"code":106246,"language":53062,"meta":39,"style":39},[115,107013,107014],{"__ignoreMap":39},[118,107015,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036,107038,107040,107042,107044,107046,107048,107050],{"class":120,"line":121},[118,107017,1038],{"class":128},[118,107019,106067],{"class":51293},[118,107021,14925],{"class":1967},[118,107023,174],{"class":128},[118,107025,106074],{"class":233},[118,107027,106077],{"class":1967},[118,107029,174],{"class":128},[118,107031,106012],{"class":233},[118,107033,106084],{"class":1967},[118,107035,174],{"class":128},[118,107037,3682],{"class":233},[118,107039,106091],{"class":1967},[118,107041,174],{"class":128},[118,107043,106096],{"class":233},[118,107045,106099],{"class":1967},[118,107047,174],{"class":128},[118,107049,106104],{"class":233},[118,107051,101137],{"class":128},[15,107053,107054,107055,107057,107058,107061,107062,107064],{},"这行定义电机。它作用在 ",[115,107056,105833],{}," 关节上。",[115,107059,107060],{},"gear"," 可以理解成放大倍数。",[115,107063,105848],{}," 限制控制输入范围。",[109,107066,107067],{"className":30371,"code":106760,"language":30373,"meta":39,"style":39},[115,107068,107069,107081],{"__ignoreMap":39},[118,107070,107071,107073,107075,107077,107079],{"class":120,"line":121},[118,107072,1535],{"class":124},[118,107074,106551],{"class":128},[118,107076,20953],{"class":124},[118,107078,25123],{"class":177},[118,107080,3743],{"class":128},[118,107082,107083,107085,107087,107089,107091],{"class":120,"line":40},[118,107084,103888],{"class":124},[118,107086,103428],{"class":177},[118,107088,129],{"class":128},[118,107090,106568],{"class":233},[118,107092,135],{"class":128},[15,107094,107095,107097],{},[115,107096,102151],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[109,107099,107101],{"className":30371,"code":107100,"language":30373,"meta":39,"style":39},"for step in range(2000):\n",[115,107102,107103],{"__ignoreMap":39},[118,107104,107105,107107,107109,107111,107113,107115,107117],{"class":120,"line":121},[118,107106,3029],{"class":124},[118,107108,31609],{"class":128},[118,107110,26036],{"class":124},[118,107112,32436],{"class":177},[118,107114,129],{"class":128},[118,107116,106589],{"class":177},[118,107118,30779],{"class":128},[15,107120,107121,107122,107124,107125,107128],{},"循环 2000 步。这里没有用 ",[115,107123,1120],{},"，而是用 ",[115,107126,107127],{},"step","，因为后面要用当前步数计算时间。",[109,107130,107132],{"className":30371,"code":107131,"language":30373,"meta":39,"style":39},"t = step * model.opt.timestep\n",[115,107133,107134],{"__ignoreMap":39},[118,107135,107136,107139,107141,107143,107145],{"class":120,"line":121},[118,107137,107138],{"class":128},"t ",[118,107140,174],{"class":124},[118,107142,31609],{"class":128},[118,107144,583],{"class":124},[118,107146,106605],{"class":128},[15,107148,107149],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[109,107151,107152],{"className":30371,"code":106800,"language":30373,"meta":39,"style":39},[115,107153,107154],{"__ignoreMap":39},[118,107155,107156,107158,107160,107162,107164,107166,107168,107170,107172,107174,107176,107178,107180,107182],{"class":120,"line":121},[118,107157,105864],{"class":128},[118,107159,320],{"class":177},[118,107161,4447],{"class":128},[118,107163,174],{"class":124},[118,107165,106619],{"class":177},[118,107167,6523],{"class":124},[118,107169,106624],{"class":128},[118,107171,105253],{"class":177},[118,107173,6523],{"class":124},[118,107175,106631],{"class":128},[118,107177,583],{"class":124},[118,107179,61860],{"class":177},[118,107181,6523],{"class":124},[118,107183,106640],{"class":128},[15,107185,107186],{},"这行给电机输入一个正弦波。拆开看：",[72,107188,107189,107195,107201],{},[75,107190,107191,107194],{},[115,107192,107193],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[75,107196,107197,107200],{},[115,107198,107199],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[75,107202,107203,107206],{},[115,107204,107205],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[15,107208,107209],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[109,107211,107213],{"className":30371,"code":107212,"language":30373,"meta":39,"style":39},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[115,107214,107215],{"__ignoreMap":39},[118,107216,107217,107219,107221,107223,107225,107227],{"class":120,"line":121},[118,107218,30408],{"class":177},[118,107220,129],{"class":128},[118,107222,106668],{"class":233},[118,107224,104923],{"class":128},[118,107226,421],{"class":177},[118,107228,30490],{"class":128},[15,107230,107231,107232,107234],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[115,107233,101063],{}," 只有一个数。",[60,107236,102309],{"id":102308},[15,107238,107239],{},"输出类似:",[109,107241,107244],{"className":107242,"code":107243,"language":5192,"meta":39},[5190],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[115,107245,107243],{"__ignoreMap":39},[15,107247,107248,107249,107251],{},"这里 ",[115,107250,106119],{}," 是电机输入。",[15,107253,107254,107257,107258,107261],{},[115,107255,107256],{},"joint qpos"," 是关节角度，单位通常是弧度。",[115,107259,107260],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[15,107263,107264],{},"角度单位提示：",[109,107266,107269],{"className":107267,"code":107268,"language":5192,"meta":39},[5190],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[115,107270,107268],{"__ignoreMap":39},[15,107272,107273,107274,107276,107277,107279],{},"如果你看到 ",[115,107275,104023],{}," 是 ",[115,107278,35322],{},"，大约就是 28.6 度。",[60,107281,102341],{"id":102340},[72,107283,107284,107291,107294,107301,107304,107312,107320],{},[75,107285,102404,107286,102407,107288,28378],{},[115,107287,106304],{},[115,107289,107290],{},"gear=\"5\"",[75,107292,107293],{},"重新运行，观察关节运动是否更剧烈。",[75,107295,102404,107296,102407,107298,28378],{},[115,107297,105848],{},[115,107299,107300],{},"-0.2 0.2",[75,107302,107303],{},"重新运行，观察控制能力是否变弱。",[75,107305,107306,107307,107309,107310,28378],{},"去掉 actuator，确认 ",[115,107308,102151],{}," 变成 ",[115,107311,320],{},[75,107313,102404,107314,102407,107316,107319],{},[115,107315,106238],{},[115,107317,107318],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[75,107321,102404,107322,102407,107324,107327],{},[115,107323,106232],{},[115,107325,107326],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[60,107329,102446],{"id":102445},[89,107331,107333],{"id":107332},"indexerror-index-0-is-out-of-bounds",[115,107334,107335],{},"IndexError: index 0 is out of bounds",[15,107337,107338,107339,107341],{},"原因是 ",[115,107340,105985],{},"，没有 actuator。",[89,107343,107344],{"id":107344},"关节几乎不动",[15,107346,107347],{},"可能原因:",[72,107349,107350,107355,107359,107365],{},[75,107351,107352,107354],{},[115,107353,107060],{}," 太小",[75,107356,107357,107354],{},[115,107358,105848],{},[75,107360,107361,107364],{},[115,107362,107363],{},"damping"," 太大",[75,107366,107367],{},"重力方向导致运动不明显",[89,107369,107370],{"id":107370},"模型编译失败",[15,107372,107373,107374,107376],{},"检查 actuator 引用的 ",[115,107375,106295],{}," 是否存在，joint 名称是否拼写一致。",[89,107378,107380,107382],{"id":107379},"datactrl0-写了但没有效果",[115,107381,106119],{}," 写了但没有效果",[15,107384,102568],{},[72,107386,107387,107392,107395,107400,107405],{},[75,107388,107389,107391],{},[115,107390,102151],{}," 是否大于 0。",[75,107393,107394],{},"motor 是否引用了正确 joint。",[75,107396,107397,107399],{},[115,107398,107060],{}," 是否太小。",[75,107401,107402,107404],{},[115,107403,105848],{}," 是否把输入限制得太小。",[75,107406,107407],{},"body 是否真的有可动 joint。",[89,107409,107410],{"id":107410},"控制输入超过范围会怎样",[15,107412,107413],{},"如果设置了：",[109,107415,107417],{"className":53060,"code":107416,"language":53062,"meta":39,"style":39},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[115,107418,107419],{"__ignoreMap":39},[118,107420,107421],{"class":120,"line":121},[118,107422,107416],{"class":128},[15,107424,107425],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[109,107427,107429],{"className":30371,"code":107428,"language":30373,"meta":39,"style":39},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[115,107430,107431,107451],{"__ignoreMap":39},[118,107432,107433,107436,107438,107441,107443,107445,107447,107449],{"class":120,"line":121},[118,107434,107435],{"class":128},"action ",[118,107437,174],{"class":124},[118,107439,107440],{"class":128}," np.clip(action, ",[118,107442,660],{"class":124},[118,107444,105253],{"class":177},[118,107446,12440],{"class":128},[118,107448,105253],{"class":177},[118,107450,135],{"class":128},[118,107452,107453,107455,107457,107459,107461],{"class":120,"line":40},[118,107454,105864],{"class":128},[118,107456,320],{"class":177},[118,107458,4447],{"class":128},[118,107460,174],{"class":124},[118,107462,107463],{"class":128}," action\n",[60,107465,102600],{"id":102599},[15,107467,107468],{},"这一章建立了控制任务的基本形式：",[109,107470,107473],{"className":107471,"code":107472,"language":5192,"meta":39},[5190],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[115,107474,107472],{"__ignoreMap":39},[15,107476,107477],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5131,107479,107480],{},"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":39,"searchDepth":40,"depth":40,"links":107482},[107483,107484,107485,107490,107494,107495,107496,107504],{"id":100639,"depth":40,"text":100640},{"id":100762,"depth":40,"text":100763},{"id":101037,"depth":40,"text":101038,"children":107486},[107487,107488,107489],{"id":106126,"depth":1183,"text":106127},{"id":106176,"depth":1183,"text":106177},{"id":106242,"depth":1183,"text":106243},{"id":101245,"depth":40,"text":101246,"children":107491},[107492,107493],{"id":101565,"depth":1183,"text":101565},{"id":101701,"depth":1183,"text":101701},{"id":102308,"depth":40,"text":102309},{"id":102340,"depth":40,"text":102341},{"id":102445,"depth":40,"text":102446,"children":107497},[107498,107499,107500,107501,107503],{"id":107332,"depth":1183,"text":107335},{"id":107344,"depth":1183,"text":107344},{"id":107370,"depth":1183,"text":107370},{"id":107379,"depth":1183,"text":107502},"data.ctrl[0] 写了但没有效果",{"id":107410,"depth":1183,"text":107410},{"id":102599,"depth":40,"text":102600},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105814,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107511,"title":107512,"body":107513,"description":39,"extension":43,"meta":109422,"navigation":45,"path":109423,"seo":109424,"stem":109425,"__hash__":109426},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107514,"toc":109398},[107515,107518,107520,107523,107531,107534,107551,107554,107579,107582,107628,107630,107632,107687,107689,107708,107710,107753,107756,107773,107776,107792,107802,107809,107811,107814,107817,107851,107854,107902,107906,107909,107923,107932,107936,107939,107964,107967,107971,107984,107987,107993,107996,108011,108013,108016,108276,108278,108290,108293,108605,108607,108619,108621,108624,108639,108644,108647,108669,108672,108675,108709,108712,108716,108727,108730,108747,108750,108764,108771,108791,108798,108812,108815,108827,108842,108862,108865,108887,108890,108894,108909,108920,108935,108938,108968,108984,109013,109021,109045,109048,109066,109076,109088,109095,109104,109110,109119,109122,109124,109133,109136,109151,109153,109156,109167,109170,109181,109184,109202,109204,109221,109224,109252,109254,109258,109261,109291,109297,109300,109304,109312,109315,109317,109338,109341,109344,109360,109363,109379,109381,109384,109395],[10,107516,107512],{"id":107517},"_5viewer-可视化与-renderer-离屏渲染",[60,107519,100640],{"id":100639},[15,107521,107522],{},"本章掌握两类可视化方式:",[72,107524,107525,107528],{},[75,107526,107527],{},"交互式 viewer: 适合人工观察仿真",[75,107529,107530],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[15,107532,107533],{},"使用官方接口:",[109,107535,107537],{"className":30371,"code":107536,"language":30373,"meta":39,"style":39},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[115,107538,107539,107546],{"__ignoreMap":39},[118,107540,107541,107543],{"class":120,"line":121},[118,107542,30385],{"class":124},[118,107544,107545],{"class":128}," mujoco.viewer\n",[118,107547,107548],{"class":120,"line":40},[118,107549,107550],{"class":128},"mujoco.viewer.launch_passive(model, data)\n",[15,107552,107553],{},"以及:",[109,107555,107557],{"className":30371,"code":107556,"language":30373,"meta":39,"style":39},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[115,107558,107559,107569],{"__ignoreMap":39},[118,107560,107561,107564,107566],{"class":120,"line":121},[118,107562,107563],{"class":128},"renderer ",[118,107565,174],{"class":124},[118,107567,107568],{"class":128}," mujoco.Renderer(model)\n",[118,107570,107571,107574,107576],{"class":120,"line":40},[118,107572,107573],{"class":128},"image ",[118,107575,174],{"class":124},[118,107577,107578],{"class":128}," renderer.render()\n",[15,107580,107581],{},"新手建议先理解二者区别：",[266,107583,107584,107600],{},[269,107585,107586],{},[272,107587,107588,107591,107594,107597],{},[275,107589,107590],{"align":23741},"工具",[275,107592,107593],{"align":23741},"用途",[275,107595,107596],{"align":23741},"是否打开窗口",[275,107598,107599],{"align":23741},"常见场景",[313,107601,107602,107615],{},[272,107603,107604,107607,107610,107612],{},[318,107605,107606],{"align":23741},"Viewer",[318,107608,107609],{"align":23741},"人眼实时观察仿真",[318,107611,104658],{"align":23741},[318,107613,107614],{"align":23741},"调试模型、看控制效果",[272,107616,107617,107620,107623,107625],{},[318,107618,107619],{"align":23741},"Renderer",[318,107621,107622],{"align":23741},"生成图像数组",[318,107624,104671],{"align":23741},[318,107626,107627],{"align":23741},"保存图片、训练视觉策略、服务器批量采集",[60,107629,100763],{"id":100762},[15,107631,100766],{},[109,107633,107635],{"className":23827,"code":107634,"language":23829,"meta":39,"style":39},"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",[115,107636,107637,107649,107659,107667,107675],{"__ignoreMap":39},[118,107638,107639,107641,107643,107645,107647],{"class":120,"line":121},[118,107640,24581],{"class":1967},[118,107642,26308],{"class":233},[118,107644,23839],{"class":233},[118,107646,26393],{"class":177},[118,107648,24683],{"class":177},[118,107650,107651,107653,107655,107657],{"class":120,"line":40},[118,107652,100801],{"class":233},[118,107654,100804],{"class":233},[118,107656,100807],{"class":233},[118,107658,24683],{"class":177},[118,107660,107661,107663,107665],{"class":120,"line":1183},[118,107662,100814],{"class":233},[118,107664,100817],{"class":233},[118,107666,24683],{"class":177},[118,107668,107669,107671,107673],{"class":120,"line":1198},[118,107670,100824],{"class":233},[118,107672,100827],{"class":233},[118,107674,24683],{"class":177},[118,107676,107677,107679,107681,107683,107685],{"class":120,"line":1204},[118,107678,100834],{"class":233},[118,107680,100837],{"class":233},[118,107682,100840],{"class":233},[118,107684,100843],{"class":233},[118,107686,102509],{"class":233},[15,107688,102812],{},[109,107690,107692],{"className":23827,"code":107691,"language":23829,"meta":39,"style":39},"pip install \"mujoco>=2.3\" numpy pillow\n",[115,107693,107694],{"__ignoreMap":39},[118,107695,107696,107698,107700,107702,107705],{"class":120,"line":121},[118,107697,23836],{"class":1967},[118,107699,23839],{"class":233},[118,107701,100923],{"class":233},[118,107703,107704],{"class":233}," numpy",[118,107706,107707],{"class":233}," pillow\n",[15,107709,102829],{},[109,107711,107713],{"className":23827,"code":107712,"language":23829,"meta":39,"style":39},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[115,107714,107715,107732,107741],{"__ignoreMap":39},[118,107716,107717,107719,107721,107723,107726,107728,107730],{"class":120,"line":121},[118,107718,30323],{"class":1967},[118,107720,29169],{"class":233},[118,107722,25120],{"class":177},[118,107724,107725],{"class":233}," mujoco-render",[118,107727,100968],{"class":233},[118,107729,100971],{"class":177},[118,107731,100974],{"class":177},[118,107733,107734,107736,107738],{"class":120,"line":40},[118,107735,30323],{"class":1967},[118,107737,100981],{"class":233},[118,107739,107740],{"class":233}," mujoco-render\n",[118,107742,107743,107745,107747,107749,107751],{"class":120,"line":1183},[118,107744,23836],{"class":1967},[118,107746,23839],{"class":233},[118,107748,100923],{"class":233},[118,107750,107704],{"class":233},[118,107752,107707],{"class":233},[15,107754,107755],{},"离屏渲染后端:",[109,107757,107759],{"className":23827,"code":107758,"language":23829,"meta":39,"style":39},"export MUJOCO_GL=egl\n",[115,107760,107761],{"__ignoreMap":39},[118,107762,107763,107765,107768,107770],{"class":120,"line":121},[118,107764,25047],{"class":124},[118,107766,107767],{"class":128}," MUJOCO_GL",[118,107769,174],{"class":124},[118,107771,107772],{"class":128},"egl\n",[15,107774,107775],{},"或:",[109,107777,107779],{"className":23827,"code":107778,"language":23829,"meta":39,"style":39},"export MUJOCO_GL=osmesa\n",[115,107780,107781],{"__ignoreMap":39},[118,107782,107783,107785,107787,107789],{"class":120,"line":121},[118,107784,25047],{"class":124},[118,107786,107767],{"class":128},[118,107788,174],{"class":124},[118,107790,107791],{"class":128},"osmesa\n",[15,107793,107794,107795,107798,107799,28378],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[115,107796,107797],{},"egl"," 失败，再尝试 ",[115,107800,107801],{},"osmesa",[15,107803,107804,107805,107808],{},"如果你在本机桌面环境运行，通常先不要设置 ",[115,107806,107807],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[60,107810,101038],{"id":101037},[15,107812,107813],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[15,107815,107816],{},"典型 viewer 流程:",[109,107818,107820],{"className":30371,"code":107819,"language":30373,"meta":39,"style":39},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[115,107821,107822,107835,107842,107846],{"__ignoreMap":39},[118,107823,107824,107827,107830,107832],{"class":120,"line":121},[118,107825,107826],{"class":124},"with",[118,107828,107829],{"class":128}," mujoco.viewer.launch_passive(model, data) ",[118,107831,31376],{"class":124},[118,107833,107834],{"class":128}," viewer:\n",[118,107836,107837,107839],{"class":120,"line":40},[118,107838,2255],{"class":124},[118,107840,107841],{"class":128}," viewer.is_running():\n",[118,107843,107844],{"class":120,"line":1183},[118,107845,101509],{"class":128},[118,107847,107848],{"class":120,"line":1198},[118,107849,107850],{"class":128},"        viewer.sync()\n",[15,107852,107853],{},"典型 renderer 流程:",[109,107855,107857],{"className":30371,"code":107856,"language":30373,"meta":39,"style":39},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[115,107858,107859,107885,107889,107894],{"__ignoreMap":39},[118,107860,107861,107863,107865,107868,107870,107872,107874,107876,107878,107880,107883],{"class":120,"line":121},[118,107862,107563],{"class":128},[118,107864,174],{"class":124},[118,107866,107867],{"class":128}," mujoco.Renderer(model, ",[118,107869,24986],{"class":5221},[118,107871,174],{"class":124},[118,107873,42335],{"class":177},[118,107875,12440],{"class":128},[118,107877,24982],{"class":5221},[118,107879,174],{"class":124},[118,107881,107882],{"class":177},"640",[118,107884,135],{"class":128},[118,107886,107887],{"class":120,"line":40},[118,107888,104498],{"class":128},[118,107890,107891],{"class":120,"line":1183},[118,107892,107893],{"class":128},"renderer.update_scene(data)\n",[118,107895,107896,107898,107900],{"class":120,"line":1198},[118,107897,107573],{"class":128},[118,107899,174],{"class":124},[118,107901,107578],{"class":128},[89,107903,107905],{"id":107904},"viewer-的同步逻辑","viewer 的同步逻辑",[15,107907,107908],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[109,107910,107912],{"className":30371,"code":107911,"language":30373,"meta":39,"style":39},"mujoco.mj_step(model, data)\nviewer.sync()\n",[115,107913,107914,107918],{"__ignoreMap":39},[118,107915,107916],{"class":120,"line":121},[118,107917,104498],{"class":128},[118,107919,107920],{"class":120,"line":40},[118,107921,107922],{"class":128},"viewer.sync()\n",[15,107924,107925,107927,107928,107931],{},[115,107926,101208],{}," 负责算物理，",[115,107929,107930],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[89,107933,107935],{"id":107934},"为什么要-sleep","为什么要 sleep",[15,107937,107938],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[109,107940,107942],{"className":30371,"code":107941,"language":30373,"meta":39,"style":39},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[115,107943,107944],{"__ignoreMap":39},[118,107945,107946,107949,107951,107954,107956,107959,107961],{"class":120,"line":121},[118,107947,107948],{"class":128},"sleep_time ",[118,107950,174],{"class":124},[118,107952,107953],{"class":128}," model.opt.timestep ",[118,107955,660],{"class":124},[118,107957,107958],{"class":128}," (time.time() ",[118,107960,660],{"class":124},[118,107962,107963],{"class":128}," step_start)\n",[15,107965,107966],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[89,107968,107970],{"id":107969},"renderer-输出是什么","renderer 输出是什么",[109,107972,107974],{"className":30371,"code":107973,"language":30373,"meta":39,"style":39},"image = renderer.render()\n",[115,107975,107976],{"__ignoreMap":39},[118,107977,107978,107980,107982],{"class":120,"line":121},[118,107979,107573],{"class":128},[118,107981,174],{"class":124},[118,107983,107578],{"class":128},[15,107985,107986],{},"得到的是 NumPy 数组，形状通常是：",[109,107988,107991],{"className":107989,"code":107990,"language":5192,"meta":39},[5190],"(height, width, 3)\n",[115,107992,107990],{"__ignoreMap":39},[15,107994,107995],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[109,107997,107999],{"className":30371,"code":107998,"language":30373,"meta":39,"style":39},"Image.fromarray(image).save(\"render_output.png\")\n",[115,108000,108001],{"__ignoreMap":39},[118,108002,108003,108006,108009],{"class":120,"line":121},[118,108004,108005],{"class":128},"Image.fromarray(image).save(",[118,108007,108008],{"class":233},"\"render_output.png\"",[118,108010,135],{"class":128},[60,108012,101246],{"id":101245},[15,108014,108015],{},"交互式 Viewer:",[109,108017,108019],{"className":30371,"code":108018,"language":30373,"meta":39,"style":39},"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",[115,108020,108021,108027,108031,108037,108043,108047,108051,108059,108064,108068,108072,108076,108081,108086,108090,108094,108098,108103,108107,108111,108115,108119,108123,108127,108139,108151,108159,108163,108173,108193,108203,108208,108213,108217,108234,108247,108252,108256,108260,108272],{"__ignoreMap":39},[118,108022,108023,108025],{"class":120,"line":121},[118,108024,30385],{"class":124},[118,108026,31822],{"class":128},[118,108028,108029],{"class":120,"line":40},[118,108030,2404],{"emptyLinePlaceholder":45},[118,108032,108033,108035],{"class":120,"line":1183},[118,108034,30385],{"class":124},[118,108036,101294],{"class":128},[118,108038,108039,108041],{"class":120,"line":1198},[118,108040,30385],{"class":124},[118,108042,107545],{"class":128},[118,108044,108045],{"class":120,"line":1204},[118,108046,2404],{"emptyLinePlaceholder":45},[118,108048,108049],{"class":120,"line":1218},[118,108050,2404],{"emptyLinePlaceholder":45},[118,108052,108053,108055,108057],{"class":120,"line":1224},[118,108054,101307],{"class":177},[118,108056,13569],{"class":124},[118,108058,101312],{"class":233},[118,108060,108061],{"class":120,"line":1315},[118,108062,108063],{"class":233},"\u003Cmujoco model=\"viewer_demo\">\n",[118,108065,108066],{"class":120,"line":1321},[118,108067,101322],{"class":233},[118,108069,108070],{"class":120,"line":1333},[118,108071,2404],{"emptyLinePlaceholder":45},[118,108073,108074],{"class":120,"line":1616},[118,108075,101331],{"class":233},[118,108077,108078],{"class":120,"line":1621},[118,108079,108080],{"class":233},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[118,108082,108083],{"class":120,"line":1627},[118,108084,108085],{"class":233},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[118,108087,108088],{"class":120,"line":1632},[118,108089,2404],{"emptyLinePlaceholder":45},[118,108091,108092],{"class":120,"line":1646},[118,108093,101345],{"class":233},[118,108095,108096],{"class":120,"line":1651},[118,108097,101350],{"class":233},[118,108099,108100],{"class":120,"line":1657},[118,108101,108102],{"class":233},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[118,108104,108105],{"class":120,"line":1678},[118,108106,101360],{"class":233},[118,108108,108109],{"class":120,"line":1683},[118,108110,101365],{"class":233},[118,108112,108113],{"class":120,"line":1697},[118,108114,101370],{"class":233},[118,108116,108117],{"class":120,"line":1702},[118,108118,95691],{"class":233},[118,108120,108121],{"class":120,"line":1731},[118,108122,2404],{"emptyLinePlaceholder":45},[118,108124,108125],{"class":120,"line":1736},[118,108126,2404],{"emptyLinePlaceholder":45},[118,108128,108129,108131,108133,108135,108137],{"class":120,"line":1753},[118,108130,31940],{"class":124},[118,108132,1977],{"class":1967},[118,108134,101391],{"class":128},[118,108136,95679],{"class":177},[118,108138,3743],{"class":128},[118,108140,108141,108143,108145,108147,108149],{"class":120,"line":1758},[118,108142,101400],{"class":128},[118,108144,174],{"class":124},[118,108146,101405],{"class":128},[118,108148,101307],{"class":177},[118,108150,135],{"class":128},[118,108152,108153,108155,108157],{"class":120,"line":1763},[118,108154,101414],{"class":128},[118,108156,174],{"class":124},[118,108158,101419],{"class":128},[118,108160,108161],{"class":120,"line":1768},[118,108162,2404],{"emptyLinePlaceholder":45},[118,108164,108165,108167,108169,108171],{"class":120,"line":1782},[118,108166,34171],{"class":124},[118,108168,107829],{"class":128},[118,108170,31376],{"class":124},[118,108172,107834],{"class":128},[118,108174,108175,108178,108181,108183,108186,108188,108191],{"class":120,"line":1787},[118,108176,108177],{"class":124},"        while",[118,108179,108180],{"class":128}," viewer.is_running() ",[118,108182,30455],{"class":124},[118,108184,108185],{"class":128}," data.time ",[118,108187,1038],{"class":124},[118,108189,108190],{"class":177}," 5.0",[118,108192,3743],{"class":128},[118,108194,108195,108198,108200],{"class":120,"line":2581},[118,108196,108197],{"class":128},"            step_start ",[118,108199,174],{"class":124},[118,108201,108202],{"class":128}," time.time()\n",[118,108204,108205],{"class":120,"line":2595},[118,108206,108207],{"class":128},"            mujoco.mj_step(model, data)\n",[118,108209,108210],{"class":120,"line":2603},[118,108211,108212],{"class":128},"            viewer.sync()\n",[118,108214,108215],{"class":120,"line":2608},[118,108216,2404],{"emptyLinePlaceholder":45},[118,108218,108219,108222,108224,108226,108228,108230,108232],{"class":120,"line":2614},[118,108220,108221],{"class":128},"            sleep_time ",[118,108223,174],{"class":124},[118,108225,107953],{"class":128},[118,108227,660],{"class":124},[118,108229,107958],{"class":128},[118,108231,660],{"class":124},[118,108233,107963],{"class":128},[118,108235,108236,108238,108241,108243,108245],{"class":120,"line":2620},[118,108237,4646],{"class":124},[118,108239,108240],{"class":128}," sleep_time ",[118,108242,1088],{"class":124},[118,108244,4097],{"class":177},[118,108246,3743],{"class":128},[118,108248,108249],{"class":120,"line":2625},[118,108250,108251],{"class":128},"                time.sleep(sleep_time)\n",[118,108253,108254],{"class":120,"line":7953},[118,108255,2404],{"emptyLinePlaceholder":45},[118,108257,108258],{"class":120,"line":7977},[118,108259,2404],{"emptyLinePlaceholder":45},[118,108261,108262,108264,108266,108268,108270],{"class":120,"line":7982},[118,108263,1535],{"class":124},[118,108265,31213],{"class":177},[118,108267,101552],{"class":124},[118,108269,101555],{"class":233},[118,108271,3743],{"class":128},[118,108273,108274],{"class":120,"line":7988},[118,108275,101562],{"class":128},[15,108277,103563],{},[109,108279,108281],{"className":23827,"code":108280,"language":23829,"meta":39,"style":39},"touch ch5_viewer.py\n",[115,108282,108283],{"__ignoreMap":39},[118,108284,108285,108287],{"class":120,"line":121},[118,108286,101276],{"class":1967},[118,108288,108289],{"class":233}," ch5_viewer.py\n",[15,108291,108292],{},"离屏 Renderer 保存图片:",[109,108294,108296],{"className":30371,"code":108295,"language":30373,"meta":39,"style":39},"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",[115,108297,108298,108310,108314,108320,108330,108334,108338,108346,108351,108355,108359,108363,108367,108372,108376,108380,108384,108388,108392,108396,108400,108404,108408,108412,108416,108428,108440,108448,108473,108477,108493,108497,108501,108516,108525,108529,108543,108548,108553,108557,108569,108581,108585,108589,108601],{"__ignoreMap":39},[118,108299,108300,108302,108305,108307],{"class":120,"line":121},[118,108301,30730],{"class":124},[118,108303,108304],{"class":128}," pathlib ",[118,108306,30385],{"class":124},[118,108308,108309],{"class":128}," Path\n",[118,108311,108312],{"class":120,"line":40},[118,108313,2404],{"emptyLinePlaceholder":45},[118,108315,108316,108318],{"class":120,"line":1183},[118,108317,30385],{"class":124},[118,108319,101294],{"class":128},[118,108321,108322,108324,108326,108328],{"class":120,"line":1198},[118,108323,30730],{"class":124},[118,108325,47256],{"class":177},[118,108327,47259],{"class":124},[118,108329,47262],{"class":128},[118,108331,108332],{"class":120,"line":1204},[118,108333,2404],{"emptyLinePlaceholder":45},[118,108335,108336],{"class":120,"line":1218},[118,108337,2404],{"emptyLinePlaceholder":45},[118,108339,108340,108342,108344],{"class":120,"line":1224},[118,108341,101307],{"class":177},[118,108343,13569],{"class":124},[118,108345,101312],{"class":233},[118,108347,108348],{"class":120,"line":1315},[118,108349,108350],{"class":233},"\u003Cmujoco model=\"renderer_demo\">\n",[118,108352,108353],{"class":120,"line":1321},[118,108354,101322],{"class":233},[118,108356,108357],{"class":120,"line":1333},[118,108358,2404],{"emptyLinePlaceholder":45},[118,108360,108361],{"class":120,"line":1616},[118,108362,101331],{"class":233},[118,108364,108365],{"class":120,"line":1621},[118,108366,108080],{"class":233},[118,108368,108369],{"class":120,"line":1627},[118,108370,108371],{"class":233},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[118,108373,108374],{"class":120,"line":1632},[118,108375,108085],{"class":233},[118,108377,108378],{"class":120,"line":1646},[118,108379,2404],{"emptyLinePlaceholder":45},[118,108381,108382],{"class":120,"line":1651},[118,108383,101345],{"class":233},[118,108385,108386],{"class":120,"line":1657},[118,108387,101350],{"class":233},[118,108389,108390],{"class":120,"line":1678},[118,108391,108102],{"class":233},[118,108393,108394],{"class":120,"line":1683},[118,108395,101360],{"class":233},[118,108397,108398],{"class":120,"line":1697},[118,108399,101365],{"class":233},[118,108401,108402],{"class":120,"line":1702},[118,108403,101370],{"class":233},[118,108405,108406],{"class":120,"line":1731},[118,108407,95691],{"class":233},[118,108409,108410],{"class":120,"line":1736},[118,108411,2404],{"emptyLinePlaceholder":45},[118,108413,108414],{"class":120,"line":1753},[118,108415,2404],{"emptyLinePlaceholder":45},[118,108417,108418,108420,108422,108424,108426],{"class":120,"line":1758},[118,108419,31940],{"class":124},[118,108421,1977],{"class":1967},[118,108423,101391],{"class":128},[118,108425,95679],{"class":177},[118,108427,3743],{"class":128},[118,108429,108430,108432,108434,108436,108438],{"class":120,"line":1763},[118,108431,101400],{"class":128},[118,108433,174],{"class":124},[118,108435,101405],{"class":128},[118,108437,101307],{"class":177},[118,108439,135],{"class":128},[118,108441,108442,108444,108446],{"class":120,"line":1768},[118,108443,101414],{"class":128},[118,108445,174],{"class":124},[118,108447,101419],{"class":128},[118,108449,108450,108453,108455,108457,108459,108461,108463,108465,108467,108469,108471],{"class":120,"line":1782},[118,108451,108452],{"class":128},"    renderer ",[118,108454,174],{"class":124},[118,108456,107867],{"class":128},[118,108458,24986],{"class":5221},[118,108460,174],{"class":124},[118,108462,42335],{"class":177},[118,108464,12440],{"class":128},[118,108466,24982],{"class":5221},[118,108468,174],{"class":124},[118,108470,107882],{"class":177},[118,108472,135],{"class":128},[118,108474,108475],{"class":120,"line":1787},[118,108476,2404],{"emptyLinePlaceholder":45},[118,108478,108479,108481,108483,108485,108487,108489,108491],{"class":120,"line":2581},[118,108480,3205],{"class":124},[118,108482,101494],{"class":128},[118,108484,26036],{"class":124},[118,108486,32436],{"class":177},[118,108488,129],{"class":128},[118,108490,439],{"class":177},[118,108492,30779],{"class":128},[118,108494,108495],{"class":120,"line":2595},[118,108496,101509],{"class":128},[118,108498,108499],{"class":120,"line":2603},[118,108500,2404],{"emptyLinePlaceholder":45},[118,108502,108503,108506,108509,108511,108514],{"class":120,"line":2608},[118,108504,108505],{"class":128},"    renderer.update_scene(data, ",[118,108507,108508],{"class":5221},"camera",[118,108510,174],{"class":124},[118,108512,108513],{"class":233},"\"fixed_camera\"",[118,108515,135],{"class":128},[118,108517,108518,108521,108523],{"class":120,"line":2614},[118,108519,108520],{"class":128},"    image ",[118,108522,174],{"class":124},[118,108524,107578],{"class":128},[118,108526,108527],{"class":120,"line":2620},[118,108528,2404],{"emptyLinePlaceholder":45},[118,108530,108531,108534,108536,108539,108541],{"class":120,"line":2625},[118,108532,108533],{"class":128},"    output_path ",[118,108535,174],{"class":124},[118,108537,108538],{"class":128}," Path(",[118,108540,108008],{"class":233},[118,108542,135],{"class":128},[118,108544,108545],{"class":120,"line":7953},[118,108546,108547],{"class":128},"    Image.fromarray(image).save(output_path)\n",[118,108549,108550],{"class":120,"line":7977},[118,108551,108552],{"class":128},"    renderer.close()\n",[118,108554,108555],{"class":120,"line":7982},[118,108556,2404],{"emptyLinePlaceholder":45},[118,108558,108559,108561,108563,108566],{"class":120,"line":7988},[118,108560,31292],{"class":177},[118,108562,129],{"class":128},[118,108564,108565],{"class":233},"\"saved:\"",[118,108567,108568],{"class":128},", output_path.resolve())\n",[118,108570,108571,108573,108575,108578],{"class":120,"line":8015},[118,108572,31292],{"class":177},[118,108574,129],{"class":128},[118,108576,108577],{"class":233},"\"image shape:\"",[118,108579,108580],{"class":128},", image.shape)\n",[118,108582,108583],{"class":120,"line":8020},[118,108584,2404],{"emptyLinePlaceholder":45},[118,108586,108587],{"class":120,"line":8026},[118,108588,2404],{"emptyLinePlaceholder":45},[118,108590,108591,108593,108595,108597,108599],{"class":120,"line":8038},[118,108592,1535],{"class":124},[118,108594,31213],{"class":177},[118,108596,101552],{"class":124},[118,108598,101555],{"class":233},[118,108600,3743],{"class":128},[118,108602,108603],{"class":120,"line":8050},[118,108604,101562],{"class":128},[15,108606,103563],{},[109,108608,108610],{"className":23827,"code":108609,"language":23829,"meta":39,"style":39},"touch ch5_renderer.py\n",[115,108611,108612],{"__ignoreMap":39},[118,108613,108614,108616],{"class":120,"line":121},[118,108615,101276],{"class":1967},[118,108617,108618],{"class":233}," ch5_renderer.py\n",[89,108620,101565],{"id":101565},[15,108622,108623],{},"viewer 上下文：",[109,108625,108627],{"className":30371,"code":108626,"language":30373,"meta":39,"style":39},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[115,108628,108629],{"__ignoreMap":39},[118,108630,108631,108633,108635,108637],{"class":120,"line":121},[118,108632,107826],{"class":124},[118,108634,107829],{"class":128},[118,108636,31376],{"class":124},[118,108638,107834],{"class":128},[15,108640,108641,108643],{},[115,108642,107826],{}," 语句会创建窗口，并在退出时自动清理资源。",[15,108645,108646],{},"窗口循环：",[109,108648,108650],{"className":30371,"code":108649,"language":30373,"meta":39,"style":39},"while viewer.is_running() and data.time \u003C 5.0:\n",[115,108651,108652],{"__ignoreMap":39},[118,108653,108654,108657,108659,108661,108663,108665,108667],{"class":120,"line":121},[118,108655,108656],{"class":124},"while",[118,108658,108180],{"class":128},[118,108660,30455],{"class":124},[118,108662,108185],{"class":128},[118,108664,1038],{"class":124},[118,108666,108190],{"class":177},[118,108668,3743],{"class":128},[15,108670,108671],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[15,108673,108674],{},"固定相机：",[109,108676,108678],{"className":53060,"code":108677,"language":53062,"meta":39,"style":39},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[115,108679,108680],{"__ignoreMap":39},[118,108681,108682,108684,108686,108688,108690,108692,108694,108696,108699,108702,108704,108707],{"class":120,"line":121},[118,108683,1038],{"class":128},[118,108685,108508],{"class":51293},[118,108687,14925],{"class":1967},[118,108689,174],{"class":128},[118,108691,108513],{"class":233},[118,108693,101099],{"class":1967},[118,108695,174],{"class":128},[118,108697,108698],{"class":233},"\"1.5 -2.0 1.2\"",[118,108700,108701],{"class":1967}," xyaxes",[118,108703,174],{"class":128},[118,108705,108706],{"class":233},"\"1 0.75 0 0 0 1\"",[118,108708,101137],{"class":128},[15,108710,108711],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[89,108713,108715],{"id":108714},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[109,108717,108719],{"className":30371,"code":108718,"language":30373,"meta":39,"style":39},"import time\n",[115,108720,108721],{"__ignoreMap":39},[118,108722,108723,108725],{"class":120,"line":121},[118,108724,30385],{"class":124},[118,108726,31822],{"class":128},[15,108728,108729],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[109,108731,108733],{"className":30371,"code":108732,"language":30373,"meta":39,"style":39},"import mujoco\nimport mujoco.viewer\n",[115,108734,108735,108741],{"__ignoreMap":39},[118,108736,108737,108739],{"class":120,"line":121},[118,108738,30385],{"class":124},[118,108740,101294],{"class":128},[118,108742,108743,108745],{"class":120,"line":40},[118,108744,30385],{"class":124},[118,108746,107545],{"class":128},[15,108748,108749],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[109,108751,108752],{"className":30371,"code":108626,"language":30373,"meta":39,"style":39},[115,108753,108754],{"__ignoreMap":39},[118,108755,108756,108758,108760,108762],{"class":120,"line":121},[118,108757,107826],{"class":124},[118,108759,107829],{"class":128},[118,108761,31376],{"class":124},[118,108763,107834],{"class":128},[15,108765,108766,108767,108770],{},"打开一个 viewer 窗口。",[115,108768,108769],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[109,108772,108773],{"className":30371,"code":108649,"language":30373,"meta":39,"style":39},[115,108774,108775],{"__ignoreMap":39},[118,108776,108777,108779,108781,108783,108785,108787,108789],{"class":120,"line":121},[118,108778,108656],{"class":124},[118,108780,108180],{"class":128},[118,108782,30455],{"class":124},[118,108784,108185],{"class":128},[118,108786,1038],{"class":124},[118,108788,108190],{"class":177},[118,108790,3743],{"class":128},[15,108792,108793,108794,108797],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[115,108795,108796],{},"viewer.is_running()"," 会变成 false，循环结束。",[109,108799,108801],{"className":30371,"code":108800,"language":30373,"meta":39,"style":39},"step_start = time.time()\n",[115,108802,108803],{"__ignoreMap":39},[118,108804,108805,108808,108810],{"class":120,"line":121},[118,108806,108807],{"class":128},"step_start ",[118,108809,174],{"class":124},[118,108811,108202],{"class":128},[15,108813,108814],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[109,108816,108817],{"className":30371,"code":107911,"language":30373,"meta":39,"style":39},[115,108818,108819,108823],{"__ignoreMap":39},[118,108820,108821],{"class":120,"line":121},[118,108822,104498],{"class":128},[118,108824,108825],{"class":120,"line":40},[118,108826,107922],{"class":128},[15,108828,108829,108831,108832,108834,108835,108837,108838,108841],{},[115,108830,101208],{}," 推进物理仿真。",[115,108833,107930],{}," 把最新的 ",[115,108836,33394],{}," 同步到窗口里显示。没有 ",[115,108839,108840],{},"sync()","，窗口可能看不到最新状态。",[109,108843,108844],{"className":30371,"code":107941,"language":30373,"meta":39,"style":39},[115,108845,108846],{"__ignoreMap":39},[118,108847,108848,108850,108852,108854,108856,108858,108860],{"class":120,"line":121},[118,108849,107948],{"class":128},[118,108851,174],{"class":124},[118,108853,107953],{"class":128},[118,108855,660],{"class":124},[118,108857,107958],{"class":128},[118,108859,660],{"class":124},[118,108861,107963],{"class":128},[15,108863,108864],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[109,108866,108868],{"className":30371,"code":108867,"language":30373,"meta":39,"style":39},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[115,108869,108870,108882],{"__ignoreMap":39},[118,108871,108872,108874,108876,108878,108880],{"class":120,"line":121},[118,108873,1535],{"class":124},[118,108875,108240],{"class":128},[118,108877,1088],{"class":124},[118,108879,4097],{"class":177},[118,108881,3743],{"class":128},[118,108883,108884],{"class":120,"line":40},[118,108885,108886],{"class":128},"    time.sleep(sleep_time)\n",[15,108888,108889],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[89,108891,108893],{"id":108892},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[109,108895,108897],{"className":30371,"code":108896,"language":30373,"meta":39,"style":39},"from pathlib import Path\n",[115,108898,108899],{"__ignoreMap":39},[118,108900,108901,108903,108905,108907],{"class":120,"line":121},[118,108902,30730],{"class":124},[118,108904,108304],{"class":128},[118,108906,30385],{"class":124},[118,108908,108309],{"class":128},[15,108910,108911,108912,108915,108916,108919],{},"导入 ",[115,108913,108914],{},"Path","，用来处理文件路径。相比直接写字符串，",[115,108917,108918],{},"Path(\"render_output.png\")"," 更清晰。",[109,108921,108923],{"className":30371,"code":108922,"language":30373,"meta":39,"style":39},"from PIL import Image\n",[115,108924,108925],{"__ignoreMap":39},[118,108926,108927,108929,108931,108933],{"class":120,"line":121},[118,108928,30730],{"class":124},[118,108930,47256],{"class":177},[118,108932,47259],{"class":124},[118,108934,47262],{"class":128},[15,108936,108937],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[109,108939,108940],{"className":53060,"code":108677,"language":53062,"meta":39,"style":39},[115,108941,108942],{"__ignoreMap":39},[118,108943,108944,108946,108948,108950,108952,108954,108956,108958,108960,108962,108964,108966],{"class":120,"line":121},[118,108945,1038],{"class":128},[118,108947,108508],{"class":51293},[118,108949,14925],{"class":1967},[118,108951,174],{"class":128},[118,108953,108513],{"class":233},[118,108955,101099],{"class":1967},[118,108957,174],{"class":128},[118,108959,108698],{"class":233},[118,108961,108701],{"class":1967},[118,108963,174],{"class":128},[118,108965,108706],{"class":233},[118,108967,101137],{"class":128},[15,108969,108970,108971,108973,108974,108976,108977,108980,108981,108983],{},"定义一个相机。",[115,108972,79803],{}," 是相机名字。",[115,108975,104139],{}," 是相机在世界里的位置。",[115,108978,108979],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[115,108982,104139],{}," 来调视角。",[109,108985,108987],{"className":30371,"code":108986,"language":30373,"meta":39,"style":39},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[115,108988,108989],{"__ignoreMap":39},[118,108990,108991,108993,108995,108997,108999,109001,109003,109005,109007,109009,109011],{"class":120,"line":121},[118,108992,107563],{"class":128},[118,108994,174],{"class":124},[118,108996,107867],{"class":128},[118,108998,24986],{"class":5221},[118,109000,174],{"class":124},[118,109002,42335],{"class":177},[118,109004,12440],{"class":128},[118,109006,24982],{"class":5221},[118,109008,174],{"class":124},[118,109010,107882],{"class":177},[118,109012,135],{"class":128},[15,109014,109015,109016,101011,109018,109020],{},"创建离屏渲染器。",[115,109017,24986],{},[115,109019,24982],{}," 决定输出图片大小。",[109,109022,109023],{"className":30371,"code":101669,"language":30373,"meta":39,"style":39},[115,109024,109025,109041],{"__ignoreMap":39},[118,109026,109027,109029,109031,109033,109035,109037,109039],{"class":120,"line":121},[118,109028,3029],{"class":124},[118,109030,101494],{"class":128},[118,109032,26036],{"class":124},[118,109034,32436],{"class":177},[118,109036,129],{"class":128},[118,109038,439],{"class":177},[118,109040,30779],{"class":128},[118,109042,109043],{"class":120,"line":40},[118,109044,101692],{"class":128},[15,109046,109047],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[109,109049,109051],{"className":30371,"code":109050,"language":30373,"meta":39,"style":39},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[115,109052,109053],{"__ignoreMap":39},[118,109054,109055,109058,109060,109062,109064],{"class":120,"line":121},[118,109056,109057],{"class":128},"renderer.update_scene(data, ",[118,109059,108508],{"class":5221},[118,109061,174],{"class":124},[118,109063,108513],{"class":233},[118,109065,135],{"class":128},[15,109067,109068,109069,109071,109072,109075],{},"告诉 renderer：用当前 ",[115,109070,33394],{}," 的状态更新画面，并使用名为 ",[115,109073,109074],{},"fixed_camera"," 的相机视角。",[109,109077,109078],{"className":30371,"code":107973,"language":30373,"meta":39,"style":39},[115,109079,109080],{"__ignoreMap":39},[118,109081,109082,109084,109086],{"class":120,"line":121},[118,109083,107573],{"class":128},[118,109085,174],{"class":124},[118,109087,107578],{"class":128},[15,109089,109090,109091,109094],{},"真正渲染出图像。",[115,109092,109093],{},"image"," 是一个 NumPy 数组，不是文件。",[109,109096,109098],{"className":30371,"code":109097,"language":30373,"meta":39,"style":39},"Image.fromarray(image).save(output_path)\n",[115,109099,109100],{"__ignoreMap":39},[118,109101,109102],{"class":120,"line":121},[118,109103,109097],{"class":128},[15,109105,109106,109107,28378],{},"把数组转换成图片，并保存到 ",[115,109108,109109],{},"render_output.png",[109,109111,109113],{"className":30371,"code":109112,"language":30373,"meta":39,"style":39},"renderer.close()\n",[115,109114,109115],{"__ignoreMap":39},[118,109116,109117],{"class":120,"line":121},[118,109118,109112],{"class":128},[15,109120,109121],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[60,109123,102309],{"id":102308},[15,109125,109126,109127,109129,109130,28378],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[115,109128,109109],{},"，并输出图像数组形状，例如 ",[115,109131,109132],{},"(480, 640, 3)",[15,109134,109135],{},"如果图片里看不到方块，先检查：",[72,109137,109138,109141,109144],{},[75,109139,109140],{},"方块是否掉到相机视野外。",[75,109142,109143],{},"camera 位置是否合理。",[75,109145,109146,109147,109150],{},"是否在 ",[115,109148,109149],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[60,109152,102341],{"id":102340},[15,109154,109155],{},"运行 viewer:",[109,109157,109159],{"className":23827,"code":109158,"language":23829,"meta":39,"style":39},"python ch5_viewer.py\n",[115,109160,109161],{"__ignoreMap":39},[118,109162,109163,109165],{"class":120,"line":121},[118,109164,30373],{"class":1967},[118,109166,108289],{"class":233},[15,109168,109169],{},"运行 renderer:",[109,109171,109173],{"className":23827,"code":109172,"language":23829,"meta":39,"style":39},"python ch5_renderer.py\n",[115,109174,109175],{"__ignoreMap":39},[118,109176,109177,109179],{"class":120,"line":121},[118,109178,30373],{"class":1967},[118,109180,108618],{"class":233},[15,109182,109183],{},"如果在服务器上运行:",[109,109185,109187],{"className":23827,"code":109186,"language":23829,"meta":39,"style":39},"MUJOCO_GL=egl python ch5_renderer.py\n",[115,109188,109189],{"__ignoreMap":39},[118,109190,109191,109193,109195,109197,109200],{"class":120,"line":121},[118,109192,107807],{"class":128},[118,109194,174],{"class":124},[118,109196,107797],{"class":233},[118,109198,109199],{"class":1967}," python",[118,109201,108618],{"class":233},[15,109203,107775],{},[109,109205,109207],{"className":23827,"code":109206,"language":23829,"meta":39,"style":39},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[115,109208,109209],{"__ignoreMap":39},[118,109210,109211,109213,109215,109217,109219],{"class":120,"line":121},[118,109212,107807],{"class":128},[118,109214,174],{"class":124},[118,109216,107801],{"class":233},[118,109218,109199],{"class":1967},[118,109220,108618],{"class":233},[15,109222,109223],{},"再做几个练习：",[72,109225,109226,109233,109236,109242],{},[75,109227,109228,109229,109232],{},"把 renderer 分辨率改成 ",[115,109230,109231],{},"height=240, width=320","，观察输出 shape。",[75,109234,109235],{},"把方块颜色改成蓝色，重新保存图片。",[75,109237,109238,109239,109241],{},"把相机 ",[115,109240,104139],{}," 改远一点，观察画面中物体是否变小。",[75,109243,109244,109245,102407,109248,109251],{},"把 viewer 示例中的 ",[115,109246,109247],{},"data.time \u003C 5.0",[115,109249,109250],{},"data.time \u003C 20.0","，观察更长时间。",[60,109253,102446],{"id":102445},[89,109255,109257],{"id":109256},"viewer-窗口打不开","viewer 窗口打不开",[15,109259,109260],{},"安装:",[109,109262,109264],{"className":23827,"code":109263,"language":23829,"meta":39,"style":39},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[115,109265,109266],{"__ignoreMap":39},[118,109267,109268,109270,109272,109274,109276,109278,109280,109282,109284,109286,109288],{"class":120,"line":121},[118,109269,24581],{"class":1967},[118,109271,26308],{"class":233},[118,109273,23839],{"class":233},[118,109275,26393],{"class":177},[118,109277,102499],{"class":233},[118,109279,100827],{"class":233},[118,109281,102504],{"class":233},[118,109283,100840],{"class":233},[118,109285,100846],{"class":233},[118,109287,100837],{"class":233},[118,109289,109290],{"class":233}," libXinerama\n",[89,109292,109294],{"id":109293},"glfwerror",[115,109295,109296],{},"GLFWError",[15,109298,109299],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[89,109301,109303],{"id":109302},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[15,109305,109306,109307,82532,109309,109311],{},"尝试 ",[115,109308,101030],{},[115,109310,101033],{},"。可能存在版本差异。",[89,109313,109314],{"id":109314},"保存图片是黑的",[15,109316,102568],{},[72,109318,109319,109322,109325,109335],{},[75,109320,109321],{},"XML 里是否有 light。",[75,109323,109324],{},"相机是否对着模型。",[75,109326,109327,109328,109331,109332,28378],{},"是否先 ",[115,109329,109330],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[115,109333,109334],{},"renderer.render()",[75,109336,109337],{},"物体是否已经掉出视野。",[89,109339,109340],{"id":109340},"远程服务器没有显示器",[15,109342,109343],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[109,109345,109346],{"className":23827,"code":109186,"language":23829,"meta":39,"style":39},[115,109347,109348],{"__ignoreMap":39},[118,109349,109350,109352,109354,109356,109358],{"class":120,"line":121},[118,109351,107807],{"class":128},[118,109353,174],{"class":124},[118,109355,107797],{"class":233},[118,109357,109199],{"class":1967},[118,109359,108618],{"class":233},[15,109361,109362],{},"如果 EGL 不可用，再尝试：",[109,109364,109365],{"className":23827,"code":109206,"language":23829,"meta":39,"style":39},[115,109366,109367],{"__ignoreMap":39},[118,109368,109369,109371,109373,109375,109377],{"class":120,"line":121},[118,109370,107807],{"class":128},[118,109372,174],{"class":124},[118,109374,107801],{"class":233},[118,109376,109199],{"class":1967},[118,109378,108618],{"class":233},[60,109380,102600],{"id":102599},[15,109382,109383],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[72,109385,109386,109389,109392],{},[75,109387,109388],{},"先用 viewer 看模型和控制是否正常。",[75,109390,109391],{},"再用 renderer 保存图片或构造视觉观测。",[75,109393,109394],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5131,109396,109397],{},"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":39,"searchDepth":40,"depth":40,"links":109399},[109400,109401,109402,109407,109412,109413,109414,109421],{"id":100639,"depth":40,"text":100640},{"id":100762,"depth":40,"text":100763},{"id":101037,"depth":40,"text":101038,"children":109403},[109404,109405,109406],{"id":107904,"depth":1183,"text":107905},{"id":107934,"depth":1183,"text":107935},{"id":107969,"depth":1183,"text":107970},{"id":101245,"depth":40,"text":101246,"children":109408},[109409,109410,109411],{"id":101565,"depth":1183,"text":101565},{"id":108714,"depth":1183,"text":108715},{"id":108892,"depth":1183,"text":108893},{"id":102308,"depth":40,"text":102309},{"id":102340,"depth":40,"text":102341},{"id":102445,"depth":40,"text":102446,"children":109415},[109416,109417,109418,109419,109420],{"id":109256,"depth":1183,"text":109257},{"id":109293,"depth":1183,"text":109296},{"id":109302,"depth":1183,"text":109303},{"id":109314,"depth":1183,"text":109314},{"id":109340,"depth":1183,"text":109340},{"id":102599,"depth":40,"text":102600},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107512,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109428,"title":109429,"body":109430,"description":39,"extension":43,"meta":111341,"navigation":45,"path":111342,"seo":111343,"stem":111344,"__hash__":111345},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109431,"toc":111317},[109432,109435,109437,109440,109442,109461,109464,109470,109473,109475,109477,109501,109503,109517,109519,109560,109562,109573,109575,109578,109584,109587,109621,109624,109656,109659,109691,109695,109698,109738,109741,109747,109750,109756,109760,109763,109769,109772,109776,109779,109819,109821,109834,109837,109839,110421,110423,110435,110438,110449,110451,110454,110473,110485,110488,110509,110512,110515,110558,110561,110564,110584,110591,110593,110611,110626,110629,110635,110638,110644,110661,110668,110699,110710,110744,110755,110772,110781,110789,110794,110808,110811,110832,110838,110852,110857,110887,110897,110922,110930,110953,110956,110972,110975,110983,110989,111011,111024,111045,111054,111093,111104,111106,111109,111115,111118,111121,111127,111130,111150,111153,111155,111194,111196,111199,111207,111210,111213,111240,111243,111253,111259,111262,111268,111270,111276,111280,111283,111285,111288,111312,111315],[10,109433,109429],{"id":109434},"_6控制任务cartpole",[60,109436,100640],{"id":100639},[15,109438,109439],{},"本章搭建一个最小 Cartpole 控制任务。",[15,109441,104324],{},[72,109443,109444,109447,109449,109452,109455,109458],{},[75,109445,109446],{},"slide joint",[75,109448,106177],{},[75,109450,109451],{},"cart force actuator",[75,109453,109454],{},"状态观测",[75,109456,109457],{},"简单控制循环",[75,109459,109460],{},"reward 设计雏形",[15,109462,109463],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[109,109465,109468],{"className":109466,"code":109467,"language":5192,"meta":39},[5190],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[115,109469,109467],{"__ignoreMap":39},[15,109471,109472],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[60,109474,100763],{"id":100762},[15,109476,100766],{},[109,109478,109479],{"className":23827,"code":104381,"language":23829,"meta":39,"style":39},[115,109480,109481],{"__ignoreMap":39},[118,109482,109483,109485,109487,109489,109491,109493,109495,109497,109499],{"class":120,"line":121},[118,109484,24581],{"class":1967},[118,109486,26308],{"class":233},[118,109488,23839],{"class":233},[118,109490,26393],{"class":177},[118,109492,104396],{"class":233},[118,109494,100791],{"class":233},[118,109496,102494],{"class":233},[118,109498,100807],{"class":233},[118,109500,104405],{"class":233},[15,109502,102812],{},[109,109504,109505],{"className":23827,"code":100912,"language":23829,"meta":39,"style":39},[115,109506,109507],{"__ignoreMap":39},[118,109508,109509,109511,109513,109515],{"class":120,"line":121},[118,109510,23836],{"class":1967},[118,109512,23839],{"class":233},[118,109514,100923],{"class":233},[118,109516,100926],{"class":233},[15,109518,102829],{},[109,109520,109522],{"className":23827,"code":109521,"language":23829,"meta":39,"style":39},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[115,109523,109524,109541,109550],{"__ignoreMap":39},[118,109525,109526,109528,109530,109532,109535,109537,109539],{"class":120,"line":121},[118,109527,30323],{"class":1967},[118,109529,29169],{"class":233},[118,109531,25120],{"class":177},[118,109533,109534],{"class":233}," mujoco-cartpole",[118,109536,100968],{"class":233},[118,109538,100971],{"class":177},[118,109540,100974],{"class":177},[118,109542,109543,109545,109547],{"class":120,"line":40},[118,109544,30323],{"class":1967},[118,109546,100981],{"class":233},[118,109548,109549],{"class":233}," mujoco-cartpole\n",[118,109551,109552,109554,109556,109558],{"class":120,"line":1183},[118,109553,23836],{"class":1967},[118,109555,23839],{"class":233},[118,109557,100923],{"class":233},[118,109559,100926],{"class":233},[15,109561,100997],{},[72,109563,109564,109567,109570],{},[75,109565,109566],{},"本章不依赖 Gymnasium。",[75,109568,109569],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[75,109571,109572],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[60,109574,101038],{"id":101037},[15,109576,109577],{},"Cartpole 的模型结构:",[109,109579,109582],{"className":109580,"code":109581,"language":5192,"meta":39},[5190],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[115,109583,109581],{"__ignoreMap":39},[15,109585,109586],{},"小车通过 slide joint 左右移动:",[109,109588,109590],{"className":53060,"code":109589,"language":53062,"meta":39,"style":39},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[115,109591,109592],{"__ignoreMap":39},[118,109593,109594,109596,109598,109600,109602,109605,109607,109609,109612,109614,109616,109619],{"class":120,"line":121},[118,109595,1038],{"class":128},[118,109597,102949],{"class":51293},[118,109599,14925],{"class":1967},[118,109601,174],{"class":128},[118,109603,109604],{"class":233},"\"cart_x\"",[118,109606,53817],{"class":1967},[118,109608,174],{"class":128},[118,109610,109611],{"class":233},"\"slide\"",[118,109613,106021],{"class":1967},[118,109615,174],{"class":128},[118,109617,109618],{"class":233},"\"1 0 0\"",[118,109620,101137],{"class":128},[15,109622,109623],{},"杆子通过 hinge joint 旋转:",[109,109625,109627],{"className":53060,"code":109626,"language":53062,"meta":39,"style":39},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[115,109628,109629],{"__ignoreMap":39},[118,109630,109631,109633,109635,109637,109639,109642,109644,109646,109648,109650,109652,109654],{"class":120,"line":121},[118,109632,1038],{"class":128},[118,109634,102949],{"class":51293},[118,109636,14925],{"class":1967},[118,109638,174],{"class":128},[118,109640,109641],{"class":233},"\"pole_hinge\"",[118,109643,53817],{"class":1967},[118,109645,174],{"class":128},[118,109647,106012],{"class":233},[118,109649,106021],{"class":1967},[118,109651,174],{"class":128},[118,109653,106026],{"class":233},[118,109655,101137],{"class":128},[15,109657,109658],{},"控制力作用在小车 slide joint 上:",[109,109660,109662],{"className":53060,"code":109661,"language":53062,"meta":39,"style":39},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[115,109663,109664],{"__ignoreMap":39},[118,109665,109666,109668,109670,109672,109674,109677,109679,109681,109683,109685,109687,109689],{"class":120,"line":121},[118,109667,1038],{"class":128},[118,109669,106067],{"class":51293},[118,109671,14925],{"class":1967},[118,109673,174],{"class":128},[118,109675,109676],{"class":233},"\"cart_motor\"",[118,109678,106077],{"class":1967},[118,109680,174],{"class":128},[118,109682,109604],{"class":233},[118,109684,106084],{"class":1967},[118,109686,174],{"class":128},[118,109688,54309],{"class":233},[118,109690,101137],{"class":128},[89,109692,109694],{"id":109693},"cartpole-的状态是什么","Cartpole 的状态是什么",[15,109696,109697],{},"这个简化模型有两个关节：",[266,109699,109700,109711],{},[269,109701,109702],{},[272,109703,109704,109706,109708],{},[275,109705,102752],{"align":23741},[275,109707,23742],{"align":23741},[275,109709,109710],{"align":23741},"对应状态",[313,109712,109713,109726],{},[272,109714,109715,109720,109723],{},[318,109716,109717],{"align":23741},[115,109718,109719],{},"cart_x",[318,109721,109722],{"align":23741},"slide",[318,109724,109725],{"align":23741},"小车 x 位置",[272,109727,109728,109733,109735],{},[318,109729,109730],{"align":23741},[115,109731,109732],{},"pole_hinge",[318,109734,105833],{"align":23741},[318,109736,109737],{"align":23741},"杆子角度",[15,109739,109740],{},"所以：",[109,109742,109745],{"className":109743,"code":109744,"language":5192,"meta":39},[5190],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[115,109746,109744],{"__ignoreMap":39},[15,109748,109749],{},"把它们拼起来就是观测：",[109,109751,109754],{"className":109752,"code":109753,"language":5192,"meta":39},[5190],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[115,109755,109753],{"__ignoreMap":39},[89,109757,109759],{"id":109758},"action-是什么","action 是什么",[15,109761,109762],{},"本章只有一个 actuator：",[109,109764,109767],{"className":109765,"code":109766,"language":5192,"meta":39},[5190],"data.ctrl[0] = action\n",[115,109768,109766],{"__ignoreMap":39},[15,109770,109771],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[89,109773,109775],{"id":109774},"reward-是什么","reward 是什么",[15,109777,109778],{},"奖励函数：",[109,109780,109782],{"className":30371,"code":109781,"language":30373,"meta":39,"style":39},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[115,109783,109784],{"__ignoreMap":39},[118,109785,109786,109788,109791,109793,109795,109797,109800,109802,109805,109807,109809,109811,109814,109816],{"class":120,"line":121},[118,109787,17051],{"class":124},[118,109789,109790],{"class":177}," float",[118,109792,129],{"class":128},[118,109794,102396],{"class":177},[118,109796,52264],{"class":124},[118,109798,109799],{"class":177}," 0.1",[118,109801,6523],{"class":124},[118,109803,109804],{"class":128}," cart_x ",[118,109806,583],{"class":124},[118,109808,109804],{"class":128},[118,109810,660],{"class":124},[118,109812,109813],{"class":128}," pole_angle ",[118,109815,583],{"class":124},[118,109817,109818],{"class":128}," pole_angle)\n",[15,109820,106219],{},[72,109822,109823,109828,109831],{},[75,109824,109825,109826,28378],{},"基础奖励是 ",[115,109827,102396],{},[75,109829,109830],{},"小车离中心越远，扣分越多。",[75,109832,109833],{},"杆子角度越大，扣分越多。",[15,109835,109836],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[60,109838,101246],{"id":101245},[109,109840,109842],{"className":30371,"code":109841,"language":30373,"meta":39,"style":39},"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",[115,109843,109844,109850,109860,109864,109868,109876,109881,109885,109889,109893,109898,109902,109907,109912,109917,109921,109926,109931,109936,109940,109944,109948,109952,109956,109961,109965,109969,109973,109977,109981,109991,109998,110002,110006,110020,110034,110047,110077,110081,110085,110097,110109,110117,110121,110134,110138,110142,110151,110155,110171,110181,110194,110207,110211,110234,110252,110256,110268,110272,110276,110286,110296,110300,110316,110357,110361,110381,110397,110401,110405,110417],{"__ignoreMap":39},[118,109845,109846,109848],{"class":120,"line":121},[118,109847,30385],{"class":124},[118,109849,101294],{"class":128},[118,109851,109852,109854,109856,109858],{"class":120,"line":40},[118,109853,30385],{"class":124},[118,109855,31373],{"class":128},[118,109857,31376],{"class":124},[118,109859,31379],{"class":128},[118,109861,109862],{"class":120,"line":1183},[118,109863,2404],{"emptyLinePlaceholder":45},[118,109865,109866],{"class":120,"line":1198},[118,109867,2404],{"emptyLinePlaceholder":45},[118,109869,109870,109872,109874],{"class":120,"line":1204},[118,109871,101307],{"class":177},[118,109873,13569],{"class":124},[118,109875,101312],{"class":233},[118,109877,109878],{"class":120,"line":1218},[118,109879,109880],{"class":233},"\u003Cmujoco model=\"cartpole\">\n",[118,109882,109883],{"class":120,"line":1224},[118,109884,101322],{"class":233},[118,109886,109887],{"class":120,"line":1315},[118,109888,2404],{"emptyLinePlaceholder":45},[118,109890,109891],{"class":120,"line":1321},[118,109892,101331],{"class":233},[118,109894,109895],{"class":120,"line":1333},[118,109896,109897],{"class":233},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[118,109899,109900],{"class":120,"line":1616},[118,109901,2404],{"emptyLinePlaceholder":45},[118,109903,109904],{"class":120,"line":1621},[118,109905,109906],{"class":233},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[118,109908,109909],{"class":120,"line":1627},[118,109910,109911],{"class":233},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[118,109913,109914],{"class":120,"line":1632},[118,109915,109916],{"class":233},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[118,109918,109919],{"class":120,"line":1646},[118,109920,2404],{"emptyLinePlaceholder":45},[118,109922,109923],{"class":120,"line":1651},[118,109924,109925],{"class":233},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[118,109927,109928],{"class":120,"line":1657},[118,109929,109930],{"class":233},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[118,109932,109933],{"class":120,"line":1678},[118,109934,109935],{"class":233},"        \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",[118,109937,109938],{"class":120,"line":1683},[118,109939,106431],{"class":233},[118,109941,109942],{"class":120,"line":1697},[118,109943,101360],{"class":233},[118,109945,109946],{"class":120,"line":1702},[118,109947,101365],{"class":233},[118,109949,109950],{"class":120,"line":1731},[118,109951,2404],{"emptyLinePlaceholder":45},[118,109953,109954],{"class":120,"line":1736},[118,109955,106448],{"class":233},[118,109957,109958],{"class":120,"line":1753},[118,109959,109960],{"class":233},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[118,109962,109963],{"class":120,"line":1758},[118,109964,106458],{"class":233},[118,109966,109967],{"class":120,"line":1763},[118,109968,101370],{"class":233},[118,109970,109971],{"class":120,"line":1768},[118,109972,95691],{"class":233},[118,109974,109975],{"class":120,"line":1782},[118,109976,2404],{"emptyLinePlaceholder":45},[118,109978,109979],{"class":120,"line":1787},[118,109980,2404],{"emptyLinePlaceholder":45},[118,109982,109983,109985,109988],{"class":120,"line":2581},[118,109984,31940],{"class":124},[118,109986,109987],{"class":1967}," get_observation",[118,109989,109990],{"class":128},"(data: mujoco.MjData) -> np.ndarray:\n",[118,109992,109993,109995],{"class":120,"line":2595},[118,109994,4094],{"class":124},[118,109996,109997],{"class":128}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[118,109999,110000],{"class":120,"line":2603},[118,110001,2404],{"emptyLinePlaceholder":45},[118,110003,110004],{"class":120,"line":2608},[118,110005,2404],{"emptyLinePlaceholder":45},[118,110007,110008,110010,110013,110016,110018],{"class":120,"line":2614},[118,110009,31940],{"class":124},[118,110011,110012],{"class":1967}," compute_reward",[118,110014,110015],{"class":128},"(obs: np.ndarray) -> ",[118,110017,168],{"class":177},[118,110019,3743],{"class":128},[118,110021,110022,110025,110027,110030,110032],{"class":120,"line":2620},[118,110023,110024],{"class":128},"    cart_x ",[118,110026,174],{"class":124},[118,110028,110029],{"class":128}," obs[",[118,110031,320],{"class":177},[118,110033,33239],{"class":128},[118,110035,110036,110039,110041,110043,110045],{"class":120,"line":2625},[118,110037,110038],{"class":128},"    pole_angle ",[118,110040,174],{"class":124},[118,110042,110029],{"class":128},[118,110044,346],{"class":177},[118,110046,33239],{"class":128},[118,110048,110049,110051,110053,110055,110057,110059,110061,110063,110065,110067,110069,110071,110073,110075],{"class":120,"line":7953},[118,110050,4094],{"class":124},[118,110052,109790],{"class":177},[118,110054,129],{"class":128},[118,110056,102396],{"class":177},[118,110058,52264],{"class":124},[118,110060,109799],{"class":177},[118,110062,6523],{"class":124},[118,110064,109804],{"class":128},[118,110066,583],{"class":124},[118,110068,109804],{"class":128},[118,110070,660],{"class":124},[118,110072,109813],{"class":128},[118,110074,583],{"class":124},[118,110076,109818],{"class":128},[118,110078,110079],{"class":120,"line":7977},[118,110080,2404],{"emptyLinePlaceholder":45},[118,110082,110083],{"class":120,"line":7982},[118,110084,2404],{"emptyLinePlaceholder":45},[118,110086,110087,110089,110091,110093,110095],{"class":120,"line":7988},[118,110088,31940],{"class":124},[118,110090,1977],{"class":1967},[118,110092,101391],{"class":128},[118,110094,95679],{"class":177},[118,110096,3743],{"class":128},[118,110098,110099,110101,110103,110105,110107],{"class":120,"line":8015},[118,110100,101400],{"class":128},[118,110102,174],{"class":124},[118,110104,101405],{"class":128},[118,110106,101307],{"class":177},[118,110108,135],{"class":128},[118,110110,110111,110113,110115],{"class":120,"line":8020},[118,110112,101414],{"class":128},[118,110114,174],{"class":124},[118,110116,101419],{"class":128},[118,110118,110119],{"class":120,"line":8026},[118,110120,2404],{"emptyLinePlaceholder":45},[118,110122,110123,110125,110127,110129,110131],{"class":120,"line":8038},[118,110124,105062],{"class":128},[118,110126,346],{"class":177},[118,110128,4447],{"class":128},[118,110130,174],{"class":124},[118,110132,110133],{"class":177}," 0.1\n",[118,110135,110136],{"class":120,"line":8050},[118,110137,105075],{"class":128},[118,110139,110140],{"class":120,"line":8062},[118,110141,2404],{"emptyLinePlaceholder":45},[118,110143,110144,110147,110149],{"class":120,"line":9721},[118,110145,110146],{"class":128},"    total_reward ",[118,110148,174],{"class":124},[118,110150,104754],{"class":177},[118,110152,110153],{"class":120,"line":9746},[118,110154,2404],{"emptyLinePlaceholder":45},[118,110156,110157,110159,110161,110163,110165,110167,110169],{"class":120,"line":9769},[118,110158,3205],{"class":124},[118,110160,31609],{"class":128},[118,110162,26036],{"class":124},[118,110164,32436],{"class":177},[118,110166,129],{"class":128},[118,110168,6415],{"class":177},[118,110170,30779],{"class":128},[118,110172,110173,110176,110178],{"class":120,"line":9793},[118,110174,110175],{"class":128},"        obs ",[118,110177,174],{"class":124},[118,110179,110180],{"class":128}," get_observation(data)\n",[118,110182,110183,110186,110188,110190,110192],{"class":120,"line":9798},[118,110184,110185],{"class":128},"        pole_angle ",[118,110187,174],{"class":124},[118,110189,110029],{"class":128},[118,110191,346],{"class":177},[118,110193,33239],{"class":128},[118,110195,110196,110199,110201,110203,110205],{"class":120,"line":9803},[118,110197,110198],{"class":128},"        pole_angular_velocity ",[118,110200,174],{"class":124},[118,110202,110029],{"class":128},[118,110204,200],{"class":177},[118,110206,33239],{"class":128},[118,110208,110209],{"class":120,"line":9808},[118,110210,2404],{"emptyLinePlaceholder":45},[118,110212,110213,110216,110218,110221,110223,110225,110227,110229,110231],{"class":120,"line":9817},[118,110214,110215],{"class":128},"        action ",[118,110217,174],{"class":124},[118,110219,110220],{"class":177}," 2.0",[118,110222,6523],{"class":124},[118,110224,109813],{"class":128},[118,110226,609],{"class":124},[118,110228,61860],{"class":177},[118,110230,6523],{"class":124},[118,110232,110233],{"class":128}," pole_angular_velocity\n",[118,110235,110236,110238,110240,110242,110244,110246,110248,110250],{"class":120,"line":9822},[118,110237,110215],{"class":128},[118,110239,174],{"class":124},[118,110241,107440],{"class":128},[118,110243,660],{"class":124},[118,110245,102396],{"class":177},[118,110247,12440],{"class":128},[118,110249,102396],{"class":177},[118,110251,135],{"class":128},[118,110253,110254],{"class":120,"line":9828},[118,110255,2404],{"emptyLinePlaceholder":45},[118,110257,110258,110260,110262,110264,110266],{"class":120,"line":9849},[118,110259,106610],{"class":128},[118,110261,320],{"class":177},[118,110263,4447],{"class":128},[118,110265,174],{"class":124},[118,110267,107463],{"class":128},[118,110269,110270],{"class":120,"line":9855},[118,110271,101509],{"class":128},[118,110273,110274],{"class":120,"line":9869},[118,110275,2404],{"emptyLinePlaceholder":45},[118,110277,110278,110281,110283],{"class":120,"line":9875},[118,110279,110280],{"class":128},"        reward ",[118,110282,174],{"class":124},[118,110284,110285],{"class":128}," compute_reward(get_observation(data))\n",[118,110287,110288,110291,110293],{"class":120,"line":9902},[118,110289,110290],{"class":128},"        total_reward ",[118,110292,9482],{"class":124},[118,110294,110295],{"class":128}," reward\n",[118,110297,110298],{"class":120,"line":9911},[118,110299,2404],{"emptyLinePlaceholder":45},[118,110301,110302,110304,110306,110308,110310,110312,110314],{"class":120,"line":9917},[118,110303,2501],{"class":124},[118,110305,31609],{"class":128},[118,110307,456],{"class":124},[118,110309,5759],{"class":177},[118,110311,101552],{"class":124},[118,110313,4097],{"class":177},[118,110315,3743],{"class":128},[118,110317,110318,110320,110322,110325,110328,110331,110334,110336,110339,110342,110344,110346,110348,110350,110353,110355],{"class":120,"line":9925},[118,110319,34643],{"class":177},[118,110321,129],{"class":128},[118,110323,110324],{"class":233},"\"step:\"",[118,110326,110327],{"class":128},", step, ",[118,110329,110330],{"class":233},"\"obs:\"",[118,110332,110333],{"class":128},", np.round(obs, ",[118,110335,200],{"class":177},[118,110337,110338],{"class":128},"), ",[118,110340,110341],{"class":233},"\"action:\"",[118,110343,12440],{"class":128},[118,110345,32011],{"class":177},[118,110347,129],{"class":128},[118,110349,168],{"class":177},[118,110351,110352],{"class":128},"(action), ",[118,110354,200],{"class":177},[118,110356,30490],{"class":128},[118,110358,110359],{"class":120,"line":9930},[118,110360,2404],{"emptyLinePlaceholder":45},[118,110362,110363,110365,110367,110370,110372,110374,110377,110379],{"class":120,"line":16609},[118,110364,31292],{"class":177},[118,110366,129],{"class":128},[118,110368,110369],{"class":233},"\"total_reward:\"",[118,110371,12440],{"class":128},[118,110373,32011],{"class":177},[118,110375,110376],{"class":128},"(total_reward, ",[118,110378,200],{"class":177},[118,110380,30490],{"class":128},[118,110382,110383,110385,110387,110390,110393,110395],{"class":120,"line":16615},[118,110384,31292],{"class":177},[118,110386,129],{"class":128},[118,110388,110389],{"class":233},"\"final obs:\"",[118,110391,110392],{"class":128},", np.round(get_observation(data), ",[118,110394,200],{"class":177},[118,110396,30490],{"class":128},[118,110398,110399],{"class":120,"line":16638},[118,110400,2404],{"emptyLinePlaceholder":45},[118,110402,110403],{"class":120,"line":16644},[118,110404,2404],{"emptyLinePlaceholder":45},[118,110406,110407,110409,110411,110413,110415],{"class":120,"line":16667},[118,110408,1535],{"class":124},[118,110410,31213],{"class":177},[118,110412,101552],{"class":124},[118,110414,101555],{"class":233},[118,110416,3743],{"class":128},[118,110418,110419],{"class":120,"line":16681},[118,110420,101562],{"class":128},[15,110422,103563],{},[109,110424,110426],{"className":23827,"code":110425,"language":23829,"meta":39,"style":39},"touch ch6_cartpole.py\n",[115,110427,110428],{"__ignoreMap":39},[118,110429,110430,110432],{"class":120,"line":121},[118,110431,101276],{"class":1967},[118,110433,110434],{"class":233}," ch6_cartpole.py\n",[15,110436,110437],{},"运行：",[109,110439,110441],{"className":23827,"code":110440,"language":23829,"meta":39,"style":39},"python ch6_cartpole.py\n",[115,110442,110443],{"__ignoreMap":39},[118,110444,110445,110447],{"class":120,"line":121},[118,110446,30373],{"class":1967},[118,110448,110434],{"class":233},[89,110450,101565],{"id":101565},[15,110452,110453],{},"构造观测：",[109,110455,110457],{"className":30371,"code":110456,"language":30373,"meta":39,"style":39},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[115,110458,110459,110467],{"__ignoreMap":39},[118,110460,110461,110463,110465],{"class":120,"line":121},[118,110462,31940],{"class":124},[118,110464,109987],{"class":1967},[118,110466,109990],{"class":128},[118,110468,110469,110471],{"class":120,"line":40},[118,110470,4094],{"class":124},[118,110472,109997],{"class":128},[15,110474,110475,110478,110479,110481,110482,110484],{},[115,110476,110477],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[115,110480,104023],{}," 2 维，",[115,110483,104353],{}," 2 维，所以 obs 是 4 维。",[15,110486,110487],{},"设置初始角度：",[109,110489,110491],{"className":30371,"code":110490,"language":30373,"meta":39,"style":39},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[115,110492,110493,110505],{"__ignoreMap":39},[118,110494,110495,110497,110499,110501,110503],{"class":120,"line":121},[118,110496,104692],{"class":128},[118,110498,346],{"class":177},[118,110500,4447],{"class":128},[118,110502,174],{"class":124},[118,110504,110133],{"class":177},[118,110506,110507],{"class":120,"line":40},[118,110508,104536],{"class":128},[15,110510,110511],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[15,110513,110514],{},"简单反馈控制：",[109,110516,110518],{"className":30371,"code":110517,"language":30373,"meta":39,"style":39},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[115,110519,110520,110540],{"__ignoreMap":39},[118,110521,110522,110524,110526,110528,110530,110532,110534,110536,110538],{"class":120,"line":121},[118,110523,107435],{"class":128},[118,110525,174],{"class":124},[118,110527,110220],{"class":177},[118,110529,6523],{"class":124},[118,110531,109813],{"class":128},[118,110533,609],{"class":124},[118,110535,61860],{"class":177},[118,110537,6523],{"class":124},[118,110539,110233],{"class":128},[118,110541,110542,110544,110546,110548,110550,110552,110554,110556],{"class":120,"line":40},[118,110543,107435],{"class":128},[118,110545,174],{"class":124},[118,110547,107440],{"class":128},[118,110549,660],{"class":124},[118,110551,102396],{"class":177},[118,110553,12440],{"class":128},[118,110555,102396],{"class":177},[118,110557,135],{"class":128},[15,110559,110560],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[15,110562,110563],{},"限制动作：",[109,110565,110567],{"className":30371,"code":110566,"language":30373,"meta":39,"style":39},"np.clip(action, -1.0, 1.0)\n",[115,110568,110569],{"__ignoreMap":39},[118,110570,110571,110574,110576,110578,110580,110582],{"class":120,"line":121},[118,110572,110573],{"class":128},"np.clip(action, ",[118,110575,660],{"class":124},[118,110577,102396],{"class":177},[118,110579,12440],{"class":128},[118,110581,102396],{"class":177},[118,110583,135],{"class":128},[15,110585,110586,110587,110590],{},"因为 XML 里 ",[115,110588,110589],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[89,110592,101701],{"id":101701},[109,110594,110595],{"className":30371,"code":110456,"language":30373,"meta":39,"style":39},[115,110596,110597,110605],{"__ignoreMap":39},[118,110598,110599,110601,110603],{"class":120,"line":121},[118,110600,31940],{"class":124},[118,110602,109987],{"class":1967},[118,110604,109990],{"class":128},[118,110606,110607,110609],{"class":120,"line":40},[118,110608,4094],{"class":124},[118,110610,109997],{"class":128},[15,110612,110613,110614,110617,110618,110621,110622,110625],{},"这段定义了一个函数，用来获取当前观测。",[115,110615,110616],{},"data.qpos.copy()"," 是位置数组副本，",[115,110619,110620],{},"data.qvel.copy()"," 是速度数组副本。",[115,110623,110624],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[15,110627,110628],{},"在本章模型里：",[109,110630,110633],{"className":110631,"code":110632,"language":5192,"meta":39},[5190],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[115,110634,110632],{"__ignoreMap":39},[15,110636,110637],{},"所以返回的 obs 是：",[109,110639,110642],{"className":110640,"code":110641,"language":5192,"meta":39},[5190],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[115,110643,110641],{"__ignoreMap":39},[109,110645,110647],{"className":30371,"code":110646,"language":30373,"meta":39,"style":39},"def compute_reward(obs: np.ndarray) -> float:\n",[115,110648,110649],{"__ignoreMap":39},[118,110650,110651,110653,110655,110657,110659],{"class":120,"line":121},[118,110652,31940],{"class":124},[118,110654,110012],{"class":1967},[118,110656,110015],{"class":128},[118,110658,168],{"class":177},[118,110660,3743],{"class":128},[15,110662,110663,110664,110667],{},"这行定义奖励函数。输入是观测 ",[115,110665,110666],{},"obs","，输出是一个浮点数奖励。",[109,110669,110671],{"className":30371,"code":110670,"language":30373,"meta":39,"style":39},"cart_x = obs[0]\npole_angle = obs[1]\n",[115,110672,110673,110686],{"__ignoreMap":39},[118,110674,110675,110678,110680,110682,110684],{"class":120,"line":121},[118,110676,110677],{"class":128},"cart_x ",[118,110679,174],{"class":124},[118,110681,110029],{"class":128},[118,110683,320],{"class":177},[118,110685,33239],{"class":128},[118,110687,110688,110691,110693,110695,110697],{"class":120,"line":40},[118,110689,110690],{"class":128},"pole_angle ",[118,110692,174],{"class":124},[118,110694,110029],{"class":128},[118,110696,346],{"class":177},[118,110698,33239],{"class":128},[15,110700,110701,110702,110705,110706,110709],{},"数组索引从 0 开始。",[115,110703,110704],{},"obs[0]"," 是第一个元素，也就是小车位置。",[115,110707,110708],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[109,110711,110712],{"className":30371,"code":109781,"language":30373,"meta":39,"style":39},[115,110713,110714],{"__ignoreMap":39},[118,110715,110716,110718,110720,110722,110724,110726,110728,110730,110732,110734,110736,110738,110740,110742],{"class":120,"line":121},[118,110717,17051],{"class":124},[118,110719,109790],{"class":177},[118,110721,129],{"class":128},[118,110723,102396],{"class":177},[118,110725,52264],{"class":124},[118,110727,109799],{"class":177},[118,110729,6523],{"class":124},[118,110731,109804],{"class":128},[118,110733,583],{"class":124},[118,110735,109804],{"class":128},[118,110737,660],{"class":124},[118,110739,109813],{"class":128},[118,110741,583],{"class":124},[118,110743,109818],{"class":128},[15,110745,110746,110747,110750,110751,110754],{},"这行计算奖励。",[115,110748,110749],{},"cart_x * cart_x"," 是小车位置的平方，",[115,110752,110753],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[109,110756,110758],{"className":30371,"code":110757,"language":30373,"meta":39,"style":39},"data.qpos[1] = 0.1\n",[115,110759,110760],{"__ignoreMap":39},[118,110761,110762,110764,110766,110768,110770],{"class":120,"line":121},[118,110763,104692],{"class":128},[118,110765,346],{"class":177},[118,110767,4447],{"class":128},[118,110769,174],{"class":124},[118,110771,110133],{"class":177},[15,110773,110774,110775,110777,110778,110780],{},"手动设置杆子的初始角度。因为 ",[115,110776,105449],{}," 是小车位置，",[115,110779,105452],{}," 是杆子角度，所以这里改的是杆子。",[109,110782,110783],{"className":30371,"code":104536,"language":30373,"meta":39,"style":39},[115,110784,110785],{"__ignoreMap":39},[118,110786,110787],{"class":120,"line":121},[118,110788,104536],{"class":128},[15,110790,105495,110791,110793],{},[115,110792,104023],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[109,110795,110797],{"className":30371,"code":110796,"language":30373,"meta":39,"style":39},"total_reward = 0.0\n",[115,110798,110799],{"__ignoreMap":39},[118,110800,110801,110804,110806],{"class":120,"line":121},[118,110802,110803],{"class":128},"total_reward ",[118,110805,174],{"class":124},[118,110807,104754],{"class":177},[15,110809,110810],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[109,110812,110814],{"className":30371,"code":110813,"language":30373,"meta":39,"style":39},"for step in range(1000):\n",[115,110815,110816],{"__ignoreMap":39},[118,110817,110818,110820,110822,110824,110826,110828,110830],{"class":120,"line":121},[118,110819,3029],{"class":124},[118,110821,31609],{"class":128},[118,110823,26036],{"class":124},[118,110825,32436],{"class":177},[118,110827,129],{"class":128},[118,110829,6415],{"class":177},[118,110831,30779],{"class":128},[15,110833,110834,110835,110837],{},"循环 1000 步。",[115,110836,107127],{}," 是当前步数，从 0 到 999。",[109,110839,110841],{"className":30371,"code":110840,"language":30373,"meta":39,"style":39},"obs = get_observation(data)\n",[115,110842,110843],{"__ignoreMap":39},[118,110844,110845,110848,110850],{"class":120,"line":121},[118,110846,110847],{"class":128},"obs ",[118,110849,174],{"class":124},[118,110851,110180],{"class":128},[15,110853,110854,110855,28378],{},"读取当前状态，保存到 ",[115,110856,110666],{},[109,110858,110860],{"className":30371,"code":110859,"language":30373,"meta":39,"style":39},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[115,110861,110862,110874],{"__ignoreMap":39},[118,110863,110864,110866,110868,110870,110872],{"class":120,"line":121},[118,110865,110690],{"class":128},[118,110867,174],{"class":124},[118,110869,110029],{"class":128},[118,110871,346],{"class":177},[118,110873,33239],{"class":128},[118,110875,110876,110879,110881,110883,110885],{"class":120,"line":40},[118,110877,110878],{"class":128},"pole_angular_velocity ",[118,110880,174],{"class":124},[118,110882,110029],{"class":128},[118,110884,200],{"class":177},[118,110886,33239],{"class":128},[15,110888,110889,110890,110893,110894,28378],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[115,110891,110892],{},"obs[3]","？因为 obs 的顺序是 ",[115,110895,110896],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[109,110898,110900],{"className":30371,"code":110899,"language":30373,"meta":39,"style":39},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[115,110901,110902],{"__ignoreMap":39},[118,110903,110904,110906,110908,110910,110912,110914,110916,110918,110920],{"class":120,"line":121},[118,110905,107435],{"class":128},[118,110907,174],{"class":124},[118,110909,110220],{"class":177},[118,110911,6523],{"class":124},[118,110913,109813],{"class":128},[118,110915,609],{"class":124},[118,110917,61860],{"class":177},[118,110919,6523],{"class":124},[118,110921,110233],{"class":128},[15,110923,110924,110925,101011,110927,110929],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[115,110926,105253],{},[115,110928,35322],{}," 是人为设置的系数，不是固定公式。",[109,110931,110933],{"className":30371,"code":110932,"language":30373,"meta":39,"style":39},"action = np.clip(action, -1.0, 1.0)\n",[115,110934,110935],{"__ignoreMap":39},[118,110936,110937,110939,110941,110943,110945,110947,110949,110951],{"class":120,"line":121},[118,110938,107435],{"class":128},[118,110940,174],{"class":124},[118,110942,107440],{"class":128},[118,110944,660],{"class":124},[118,110946,102396],{"class":177},[118,110948,12440],{"class":128},[118,110950,102396],{"class":177},[118,110952,135],{"class":128},[15,110954,110955],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[109,110957,110958],{"className":30371,"code":109766,"language":30373,"meta":39,"style":39},[115,110959,110960],{"__ignoreMap":39},[118,110961,110962,110964,110966,110968,110970],{"class":120,"line":121},[118,110963,105864],{"class":128},[118,110965,320],{"class":177},[118,110967,4447],{"class":128},[118,110969,174],{"class":124},[118,110971,107463],{"class":128},[15,110973,110974],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[109,110976,110977],{"className":30371,"code":104498,"language":30373,"meta":39,"style":39},[115,110978,110979],{"__ignoreMap":39},[118,110980,110981],{"class":120,"line":121},[118,110982,104498],{"class":128},[15,110984,110985,110986,110988],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[115,110987,106119],{}," 计算小车和杆子的下一刻状态。",[109,110990,110992],{"className":30371,"code":110991,"language":30373,"meta":39,"style":39},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[115,110993,110994,111003],{"__ignoreMap":39},[118,110995,110996,110999,111001],{"class":120,"line":121},[118,110997,110998],{"class":128},"reward ",[118,111000,174],{"class":124},[118,111002,110285],{"class":128},[118,111004,111005,111007,111009],{"class":120,"line":40},[118,111006,110803],{"class":128},[118,111008,9482],{"class":124},[118,111010,110295],{"class":128},[15,111012,111013,111014,111016,111017,111020,111021,28378],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[115,111015,9482],{}," 是简写，",[115,111018,111019],{},"total_reward += reward"," 等价于 ",[115,111022,111023],{},"total_reward = total_reward + reward",[109,111025,111027],{"className":30371,"code":111026,"language":30373,"meta":39,"style":39},"if step % 100 == 0:\n",[115,111028,111029],{"__ignoreMap":39},[118,111030,111031,111033,111035,111037,111039,111041,111043],{"class":120,"line":121},[118,111032,1535],{"class":124},[118,111034,31609],{"class":128},[118,111036,456],{"class":124},[118,111038,5759],{"class":177},[118,111040,101552],{"class":124},[118,111042,4097],{"class":177},[118,111044,3743],{"class":128},[15,111046,111047,111049,111050,111053],{},[115,111048,456],{}," 是取余数。",[115,111051,111052],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[109,111055,111057],{"className":30371,"code":111056,"language":30373,"meta":39,"style":39},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[115,111058,111059],{"__ignoreMap":39},[118,111060,111061,111063,111065,111067,111069,111071,111073,111075,111077,111079,111081,111083,111085,111087,111089,111091],{"class":120,"line":121},[118,111062,30408],{"class":177},[118,111064,129],{"class":128},[118,111066,110324],{"class":233},[118,111068,110327],{"class":128},[118,111070,110330],{"class":233},[118,111072,110333],{"class":128},[118,111074,200],{"class":177},[118,111076,110338],{"class":128},[118,111078,110341],{"class":233},[118,111080,12440],{"class":128},[118,111082,32011],{"class":177},[118,111084,129],{"class":128},[118,111086,168],{"class":177},[118,111088,110352],{"class":128},[118,111090,200],{"class":177},[118,111092,30490],{"class":128},[15,111094,111095,111096,111099,111100,111103],{},"打印当前步数、观测和动作。",[115,111097,111098],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[115,111101,111102],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[60,111105,102309],{"id":102308},[15,111107,111108],{},"观测向量:",[109,111110,111113],{"className":111111,"code":111112,"language":5192,"meta":39},[5190],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[115,111114,111112],{"__ignoreMap":39},[15,111116,111117],{},"控制器是教学用的简单线性反馈，不保证最优。",[15,111119,111120],{},"每隔 100 步会打印一次：",[109,111122,111125],{"className":111123,"code":111124,"language":5192,"meta":39},[5190],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[115,111126,111124],{"__ignoreMap":39},[15,111128,111129],{},"重点观察：",[72,111131,111132,111138,111143],{},[75,111133,111134,111137],{},[115,111135,111136],{},"pole_angle"," 是否越来越大。",[75,111139,111140,111142],{},[115,111141,109719],{}," 是否跑得太远。",[75,111144,111145,111146,82532,111148,28378],{},"action 是否经常被 clip 到 ",[115,111147,103908],{},[115,111149,346],{},[15,111151,111152],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[60,111154,102341],{"id":102340},[72,111156,111157,111163,111166,111172,111182,111188,111191],{},[75,111158,111159,111160,28378],{},"把初始角度改为 ",[115,111161,111162],{},"data.qpos[1] = 0.3",[75,111164,111165],{},"重新运行，观察控制是否变差。",[75,111167,111168,111169,111171],{},"把 actuator ",[115,111170,107060],{}," 改小。",[75,111173,111174,111175,111178,111179,28378],{},"打印 ",[115,111176,111177],{},"model.nq, model.nv, model.nu","，应为 ",[115,111180,111181],{},"2 2 1",[75,111183,111184,111185,111187],{},"把 reward 里的 ",[115,111186,110753],{}," 系数改大，观察总奖励变化。",[75,111189,111190],{},"把控制器改成反号，观察杆子是否更容易倒。",[75,111192,111193],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[60,111195,102446],{"id":102445},[89,111197,111198],{"id":111198},"杆子方向和预期不一致",[15,111200,102389,111201,111203,111204,111206],{},[115,111202,106232],{}," 和 capsule 的 ",[115,111205,103169],{},"，必要时用 viewer 可视化确认。",[89,111208,111209],{"id":111209},"控制器越控越倒",[15,111211,111212],{},"说明反馈符号可能反了，尝试:",[109,111214,111216],{"className":30371,"code":111215,"language":30373,"meta":39,"style":39},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[115,111217,111218],{"__ignoreMap":39},[118,111219,111220,111222,111224,111226,111228,111230,111232,111234,111236,111238],{"class":120,"line":121},[118,111221,107435],{"class":128},[118,111223,174],{"class":124},[118,111225,52264],{"class":124},[118,111227,105253],{"class":177},[118,111229,6523],{"class":124},[118,111231,109813],{"class":128},[118,111233,660],{"class":124},[118,111235,61860],{"class":177},[118,111237,6523],{"class":124},[118,111239,110233],{"class":128},[89,111241,111242],{"id":111242},"小车飞走",[15,111244,111245,111246,111248,111249,111252],{},"降低 ",[115,111247,107060],{}," 或缩小 ",[115,111250,111251],{},"action"," 的 clip 范围。",[89,111254,111256,111258],{"id":111255},"obs3-为什么是杆子角速度",[115,111257,110892],{}," 为什么是杆子角速度",[15,111260,111261],{},"因为这个模型里：",[109,111263,111266],{"className":111264,"code":111265,"language":5192,"meta":39},[5190],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[115,111267,111265],{"__ignoreMap":39},[15,111269,109740],{},[109,111271,111274],{"className":111272,"code":111273,"language":5192,"meta":39},[5190],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[115,111275,111273],{"__ignoreMap":39},[89,111277,111279],{"id":111278},"reward-变成负数是否错误","reward 变成负数是否错误",[15,111281,111282],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[60,111284,102600],{"id":102599},[15,111286,111287],{},"一个控制任务通常包含：",[72,111289,111290,111293,111301,111306,111309],{},[75,111291,111292],{},"模型：Cartpole 的 body、joint、actuator。",[75,111294,111295,111296,341,111298,111300],{},"观测：从 ",[115,111297,104023],{},[115,111299,104353],{}," 里取状态。",[75,111302,111303,111304,28378],{},"动作：写入 ",[115,111305,101069],{},[75,111307,111308],{},"奖励：根据任务目标打分。",[75,111310,111311],{},"循环：obs -> action -> step -> reward。",[15,111313,111314],{},"这就是后面 Gymnasium 环境的基本骨架。",[5131,111316,104279],{},{"title":39,"searchDepth":40,"depth":40,"links":111318},[111319,111320,111321,111326,111330,111331,111332,111340],{"id":100639,"depth":40,"text":100640},{"id":100762,"depth":40,"text":100763},{"id":101037,"depth":40,"text":101038,"children":111322},[111323,111324,111325],{"id":109693,"depth":1183,"text":109694},{"id":109758,"depth":1183,"text":109759},{"id":109774,"depth":1183,"text":109775},{"id":101245,"depth":40,"text":101246,"children":111327},[111328,111329],{"id":101565,"depth":1183,"text":101565},{"id":101701,"depth":1183,"text":101701},{"id":102308,"depth":40,"text":102309},{"id":102340,"depth":40,"text":102341},{"id":102445,"depth":40,"text":102446,"children":111333},[111334,111335,111336,111337,111339],{"id":111198,"depth":1183,"text":111198},{"id":111209,"depth":1183,"text":111209},{"id":111242,"depth":1183,"text":111242},{"id":111255,"depth":1183,"text":111338},"obs[3] 为什么是杆子角速度",{"id":111278,"depth":1183,"text":111279},{"id":102599,"depth":40,"text":102600},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109429,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111347,"title":111348,"body":111349,"description":39,"extension":43,"meta":113363,"navigation":45,"path":113364,"seo":113365,"stem":113366,"__hash__":113367},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111350,"toc":113339},[111351,111354,111356,111359,111361,111378,111381,111384,111390,111393,111395,111397,111421,111423,111437,111439,111480,111482,111500,111502,111505,111511,111514,111542,111546,111552,111577,111580,111611,111618,111621,111624,111630,111633,111639,111642,111648,111652,111655,111680,111683,111685,112445,112447,112459,112461,112472,112474,112477,112494,112497,112499,112510,112513,112515,112561,112564,112577,112580,112662,112665,112667,112683,112693,112706,112709,112748,112758,112769,112779,112792,112795,112824,112827,112837,112840,112846,112863,112874,112876,112882,112899,112910,112931,112934,112946,112949,112970,112973,112981,112989,113006,113009,113078,113085,113093,113096,113109,113116,113118,113121,113127,113130,113133,113139,113145,113147,113187,113189,113195,113204,113207,113209,113229,113232,113235,113241,113245,113247,113274,113277,113280,113307,113313,113316,113319,113321,113324,113327,113333,113336],[10,111352,111348],{"id":111353},"_7控制任务reacher-机械臂到达目标",[60,111355,100640],{"id":100639},[15,111357,111358],{},"本章搭建一个二维两关节 reacher 任务。",[15,111360,104324],{},[72,111362,111363,111366,111369,111372,111375],{},[75,111364,111365],{},"两个 hinge joint",[75,111367,111368],{},"两个 motor actuator",[75,111370,111371],{},"site 作为末端点和目标点",[75,111373,111374],{},"根据末端和目标距离设计 reward",[75,111376,111377],{},"构造机械臂任务的基本形式",[15,111379,111380],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[15,111382,111383],{},"Reacher 任务可以理解为：",[109,111385,111388],{"className":111386,"code":111387,"language":5192,"meta":39},[5190],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[115,111389,111387],{"__ignoreMap":39},[15,111391,111392],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[60,111394,100763],{"id":100762},[15,111396,100766],{},[109,111398,111399],{"className":23827,"code":104381,"language":23829,"meta":39,"style":39},[115,111400,111401],{"__ignoreMap":39},[118,111402,111403,111405,111407,111409,111411,111413,111415,111417,111419],{"class":120,"line":121},[118,111404,24581],{"class":1967},[118,111406,26308],{"class":233},[118,111408,23839],{"class":233},[118,111410,26393],{"class":177},[118,111412,104396],{"class":233},[118,111414,100791],{"class":233},[118,111416,102494],{"class":233},[118,111418,100807],{"class":233},[118,111420,104405],{"class":233},[15,111422,102812],{},[109,111424,111425],{"className":23827,"code":100912,"language":23829,"meta":39,"style":39},[115,111426,111427],{"__ignoreMap":39},[118,111428,111429,111431,111433,111435],{"class":120,"line":121},[118,111430,23836],{"class":1967},[118,111432,23839],{"class":233},[118,111434,100923],{"class":233},[118,111436,100926],{"class":233},[15,111438,102829],{},[109,111440,111442],{"className":23827,"code":111441,"language":23829,"meta":39,"style":39},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[115,111443,111444,111461,111470],{"__ignoreMap":39},[118,111445,111446,111448,111450,111452,111455,111457,111459],{"class":120,"line":121},[118,111447,30323],{"class":1967},[118,111449,29169],{"class":233},[118,111451,25120],{"class":177},[118,111453,111454],{"class":233}," mujoco-reacher",[118,111456,100968],{"class":233},[118,111458,100971],{"class":177},[118,111460,100974],{"class":177},[118,111462,111463,111465,111467],{"class":120,"line":40},[118,111464,30323],{"class":1967},[118,111466,100981],{"class":233},[118,111468,111469],{"class":233}," mujoco-reacher\n",[118,111471,111472,111474,111476,111478],{"class":120,"line":1183},[118,111473,23836],{"class":1967},[118,111475,23839],{"class":233},[118,111477,100923],{"class":233},[118,111479,100926],{"class":233},[15,111481,100997],{},[72,111483,111484,111487,111490],{},[75,111485,111486],{},"本章使用低维状态，不使用图像输入。",[75,111488,111489],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[75,111491,111492,111493,341,111495,341,111497,111499],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[115,111494,104023],{},[115,111496,104353],{},[115,111498,103673],{}," 的方法一致。",[60,111501,101038],{"id":101037},[15,111503,111504],{},"Reacher 任务核心:",[109,111506,111509],{"className":111507,"code":111508,"language":5192,"meta":39},[5190],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[115,111510,111508],{"__ignoreMap":39},[15,111512,111513],{},"读取 site 世界坐标:",[109,111515,111517],{"className":30371,"code":111516,"language":30373,"meta":39,"style":39},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[115,111518,111519,111532],{"__ignoreMap":39},[118,111520,111521,111523,111525,111527,111530],{"class":120,"line":121},[118,111522,103627],{"class":128},[118,111524,174],{"class":124},[118,111526,103398],{"class":128},[118,111528,111529],{"class":233},"\"tip\"",[118,111531,135],{"class":128},[118,111533,111534,111537,111539],{"class":120,"line":40},[118,111535,111536],{"class":128},"tip_pos ",[118,111538,174],{"class":124},[118,111540,111541],{"class":128}," data.site_xpos[site_id]\n",[89,111543,111545],{"id":111544},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[15,111547,111548,111549,111551],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[115,111550,104023],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[109,111553,111555],{"className":30371,"code":111554,"language":30373,"meta":39,"style":39},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[115,111556,111557,111567],{"__ignoreMap":39},[118,111558,111559,111562,111564],{"class":120,"line":121},[118,111560,111561],{"class":128},"tip ",[118,111563,174],{"class":124},[118,111565,111566],{"class":128}," data.site_xpos[tip_site_id]\n",[118,111568,111569,111572,111574],{"class":120,"line":40},[118,111570,111571],{"class":128},"target ",[118,111573,174],{"class":124},[118,111575,111576],{"class":128}," data.site_xpos[target_site_id]\n",[15,111578,111579],{},"这样 reward 就很容易写：",[109,111581,111583],{"className":30371,"code":111582,"language":30373,"meta":39,"style":39},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[115,111584,111585,111600],{"__ignoreMap":39},[118,111586,111587,111590,111592,111595,111597],{"class":120,"line":121},[118,111588,111589],{"class":128},"dist ",[118,111591,174],{"class":124},[118,111593,111594],{"class":128}," np.linalg.norm(tip ",[118,111596,660],{"class":124},[118,111598,111599],{"class":128}," target)\n",[118,111601,111602,111604,111606,111608],{"class":120,"line":40},[118,111603,110998],{"class":128},[118,111605,174],{"class":124},[118,111607,52264],{"class":124},[118,111609,111610],{"class":128},"dist\n",[15,111612,111613,111614,111617],{},"距离越小，",[115,111615,111616],{},"-dist"," 越接近 0，奖励越高。",[89,111619,111620],{"id":111620},"两关节机械臂的状态",[15,111622,111623],{},"这个模型有两个 hinge joint：",[109,111625,111628],{"className":111626,"code":111627,"language":5192,"meta":39},[5190],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[115,111629,111627],{"__ignoreMap":39},[15,111631,111632],{},"再加上末端和目标位置：",[109,111634,111637],{"className":111635,"code":111636,"language":5192,"meta":39},[5190],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[115,111638,111636],{"__ignoreMap":39},[15,111640,111641],{},"总维度：",[109,111643,111646],{"className":111644,"code":111645,"language":5192,"meta":39},[5190],"2 + 2 + 3 + 3 = 10\n",[115,111647,111645],{"__ignoreMap":39},[89,111649,111651],{"id":111650},"为什么-gravity-是-0","为什么 gravity 是 0",[15,111653,111654],{},"本章把重力设为：",[109,111656,111658],{"className":53060,"code":111657,"language":53062,"meta":39,"style":39},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[115,111659,111660],{"__ignoreMap":39},[118,111661,111662,111664,111666,111668,111670,111672,111674,111676,111678],{"class":120,"line":121},[118,111663,1038],{"class":128},[118,111665,69159],{"class":51293},[118,111667,101187],{"class":1967},[118,111669,174],{"class":128},[118,111671,101192],{"class":233},[118,111673,101195],{"class":1967},[118,111675,174],{"class":128},[118,111677,103764],{"class":233},[118,111679,101137],{"class":128},[15,111681,111682],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[60,111684,101246],{"id":101245},[109,111686,111688],{"className":30371,"code":111687,"language":30373,"meta":39,"style":39},"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",[115,111689,111690,111696,111706,111710,111714,111722,111727,111732,111736,111740,111745,111750,111754,111759,111764,111769,111773,111778,111783,111788,111793,111797,111801,111805,111809,111813,111818,111823,111827,111831,111835,111839,111843,111858,111867,111879,111902,111909,111913,111917,111927,111941,111955,111962,111966,111970,111984,111996,112008,112021,112036,112053,112057,112061,112073,112085,112093,112101,112105,112121,112126,112139,112152,112167,112171,112206,112238,112242,112246,112255,112259,112275,112285,112296,112312,112328,112344,112360,112364,112382,112402,112421,112425,112429,112441],{"__ignoreMap":39},[118,111691,111692,111694],{"class":120,"line":121},[118,111693,30385],{"class":124},[118,111695,101294],{"class":128},[118,111697,111698,111700,111702,111704],{"class":120,"line":40},[118,111699,30385],{"class":124},[118,111701,31373],{"class":128},[118,111703,31376],{"class":124},[118,111705,31379],{"class":128},[118,111707,111708],{"class":120,"line":1183},[118,111709,2404],{"emptyLinePlaceholder":45},[118,111711,111712],{"class":120,"line":1198},[118,111713,2404],{"emptyLinePlaceholder":45},[118,111715,111716,111718,111720],{"class":120,"line":1204},[118,111717,101307],{"class":177},[118,111719,13569],{"class":124},[118,111721,101312],{"class":233},[118,111723,111724],{"class":120,"line":1218},[118,111725,111726],{"class":233},"\u003Cmujoco model=\"two_link_reacher\">\n",[118,111728,111729],{"class":120,"line":1224},[118,111730,111731],{"class":233},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[118,111733,111734],{"class":120,"line":1315},[118,111735,2404],{"emptyLinePlaceholder":45},[118,111737,111738],{"class":120,"line":1321},[118,111739,101331],{"class":233},[118,111741,111742],{"class":120,"line":1333},[118,111743,111744],{"class":233},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[118,111746,111747],{"class":120,"line":1616},[118,111748,111749],{"class":233},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[118,111751,111752],{"class":120,"line":1621},[118,111753,2404],{"emptyLinePlaceholder":45},[118,111755,111756],{"class":120,"line":1627},[118,111757,111758],{"class":233},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[118,111760,111761],{"class":120,"line":1632},[118,111762,111763],{"class":233},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[118,111765,111766],{"class":120,"line":1646},[118,111767,111768],{"class":233},"      \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",[118,111770,111771],{"class":120,"line":1651},[118,111772,2404],{"emptyLinePlaceholder":45},[118,111774,111775],{"class":120,"line":1657},[118,111776,111777],{"class":233},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[118,111779,111780],{"class":120,"line":1678},[118,111781,111782],{"class":233},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[118,111784,111785],{"class":120,"line":1683},[118,111786,111787],{"class":233},"        \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",[118,111789,111790],{"class":120,"line":1697},[118,111791,111792],{"class":233},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[118,111794,111795],{"class":120,"line":1702},[118,111796,106431],{"class":233},[118,111798,111799],{"class":120,"line":1731},[118,111800,101360],{"class":233},[118,111802,111803],{"class":120,"line":1736},[118,111804,101365],{"class":233},[118,111806,111807],{"class":120,"line":1753},[118,111808,2404],{"emptyLinePlaceholder":45},[118,111810,111811],{"class":120,"line":1758},[118,111812,106448],{"class":233},[118,111814,111815],{"class":120,"line":1763},[118,111816,111817],{"class":233},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[118,111819,111820],{"class":120,"line":1768},[118,111821,111822],{"class":233},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[118,111824,111825],{"class":120,"line":1782},[118,111826,106458],{"class":233},[118,111828,111829],{"class":120,"line":1787},[118,111830,101370],{"class":233},[118,111832,111833],{"class":120,"line":2581},[118,111834,95691],{"class":233},[118,111836,111837],{"class":120,"line":2595},[118,111838,2404],{"emptyLinePlaceholder":45},[118,111840,111841],{"class":120,"line":2603},[118,111842,2404],{"emptyLinePlaceholder":45},[118,111844,111845,111847,111850,111853,111855],{"class":120,"line":2608},[118,111846,31940],{"class":124},[118,111848,111849],{"class":1967}," site_position",[118,111851,111852],{"class":128},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[118,111854,1303],{"class":177},[118,111856,111857],{"class":128},") -> np.ndarray:\n",[118,111859,111860,111862,111864],{"class":120,"line":2614},[118,111861,103393],{"class":128},[118,111863,174],{"class":124},[118,111865,111866],{"class":128}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[118,111868,111869,111871,111873,111875,111877],{"class":120,"line":2620},[118,111870,3105],{"class":124},[118,111872,103442],{"class":128},[118,111874,1038],{"class":124},[118,111876,4097],{"class":177},[118,111878,3743],{"class":128},[118,111880,111881,111883,111885,111887,111889,111892,111894,111896,111898,111900],{"class":120,"line":2625},[118,111882,103425],{"class":124},[118,111884,103428],{"class":177},[118,111886,129],{"class":128},[118,111888,181],{"class":124},[118,111890,111891],{"class":233},"\"site not found: ",[118,111893,1024],{"class":177},[118,111895,79803],{"class":128},[118,111897,1074],{"class":177},[118,111899,379],{"class":233},[118,111901,135],{"class":128},[118,111903,111904,111906],{"class":120,"line":7953},[118,111905,4094],{"class":124},[118,111907,111908],{"class":128}," data.site_xpos[site_id].copy()\n",[118,111910,111911],{"class":120,"line":7977},[118,111912,2404],{"emptyLinePlaceholder":45},[118,111914,111915],{"class":120,"line":7982},[118,111916,2404],{"emptyLinePlaceholder":45},[118,111918,111919,111921,111924],{"class":120,"line":7988},[118,111920,31940],{"class":124},[118,111922,111923],{"class":1967}," get_obs",[118,111925,111926],{"class":128},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[118,111928,111929,111932,111934,111937,111939],{"class":120,"line":8015},[118,111930,111931],{"class":128},"    tip ",[118,111933,174],{"class":124},[118,111935,111936],{"class":128}," site_position(model, data, ",[118,111938,111529],{"class":233},[118,111940,135],{"class":128},[118,111942,111943,111946,111948,111950,111953],{"class":120,"line":8020},[118,111944,111945],{"class":128},"    target ",[118,111947,174],{"class":124},[118,111949,111936],{"class":128},[118,111951,111952],{"class":233},"\"target\"",[118,111954,135],{"class":128},[118,111956,111957,111959],{"class":120,"line":8026},[118,111958,4094],{"class":124},[118,111960,111961],{"class":128}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[118,111963,111964],{"class":120,"line":8038},[118,111965,2404],{"emptyLinePlaceholder":45},[118,111967,111968],{"class":120,"line":8050},[118,111969,2404],{"emptyLinePlaceholder":45},[118,111971,111972,111974,111977,111980,111982],{"class":120,"line":8062},[118,111973,31940],{"class":124},[118,111975,111976],{"class":1967}," reward",[118,111978,111979],{"class":128},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[118,111981,168],{"class":177},[118,111983,3743],{"class":128},[118,111985,111986,111988,111990,111992,111994],{"class":120,"line":9721},[118,111987,111931],{"class":128},[118,111989,174],{"class":124},[118,111991,111936],{"class":128},[118,111993,111529],{"class":233},[118,111995,135],{"class":128},[118,111997,111998,112000,112002,112004,112006],{"class":120,"line":9746},[118,111999,111945],{"class":128},[118,112001,174],{"class":124},[118,112003,111936],{"class":128},[118,112005,111952],{"class":233},[118,112007,135],{"class":128},[118,112009,112010,112013,112015,112017,112019],{"class":120,"line":9769},[118,112011,112012],{"class":128},"    dist ",[118,112014,174],{"class":124},[118,112016,111594],{"class":128},[118,112018,660],{"class":124},[118,112020,111599],{"class":128},[118,112022,112023,112026,112028,112031,112033],{"class":120,"line":9793},[118,112024,112025],{"class":128},"    control_cost ",[118,112027,174],{"class":124},[118,112029,112030],{"class":177}," 0.01",[118,112032,6523],{"class":124},[118,112034,112035],{"class":128}," np.sum(np.square(data.ctrl))\n",[118,112037,112038,112040,112042,112044,112046,112048,112050],{"class":120,"line":9798},[118,112039,4094],{"class":124},[118,112041,109790],{"class":177},[118,112043,129],{"class":128},[118,112045,660],{"class":124},[118,112047,111589],{"class":128},[118,112049,660],{"class":124},[118,112051,112052],{"class":128}," control_cost)\n",[118,112054,112055],{"class":120,"line":9803},[118,112056,2404],{"emptyLinePlaceholder":45},[118,112058,112059],{"class":120,"line":9808},[118,112060,2404],{"emptyLinePlaceholder":45},[118,112062,112063,112065,112067,112069,112071],{"class":120,"line":9817},[118,112064,31940],{"class":124},[118,112066,1977],{"class":1967},[118,112068,101391],{"class":128},[118,112070,95679],{"class":177},[118,112072,3743],{"class":128},[118,112074,112075,112077,112079,112081,112083],{"class":120,"line":9822},[118,112076,101400],{"class":128},[118,112078,174],{"class":124},[118,112080,101405],{"class":128},[118,112082,101307],{"class":177},[118,112084,135],{"class":128},[118,112086,112087,112089,112091],{"class":120,"line":9828},[118,112088,101414],{"class":128},[118,112090,174],{"class":124},[118,112092,101419],{"class":128},[118,112094,112095,112097,112099],{"class":120,"line":9849},[118,112096,110146],{"class":128},[118,112098,174],{"class":124},[118,112100,104754],{"class":177},[118,112102,112103],{"class":120,"line":9855},[118,112104,2404],{"emptyLinePlaceholder":45},[118,112106,112107,112109,112111,112113,112115,112117,112119],{"class":120,"line":9869},[118,112108,3205],{"class":124},[118,112110,31609],{"class":128},[118,112112,26036],{"class":124},[118,112114,32436],{"class":177},[118,112116,129],{"class":128},[118,112118,65067],{"class":177},[118,112120,30779],{"class":128},[118,112122,112123],{"class":120,"line":9875},[118,112124,112125],{"class":128},"        mujoco.mj_forward(model, data)\n",[118,112127,112128,112131,112133,112135,112137],{"class":120,"line":9902},[118,112129,112130],{"class":128},"        tip ",[118,112132,174],{"class":124},[118,112134,111936],{"class":128},[118,112136,111529],{"class":233},[118,112138,135],{"class":128},[118,112140,112141,112144,112146,112148,112150],{"class":120,"line":9911},[118,112142,112143],{"class":128},"        target ",[118,112145,174],{"class":124},[118,112147,111936],{"class":128},[118,112149,111952],{"class":233},[118,112151,135],{"class":128},[118,112153,112154,112157,112159,112162,112164],{"class":120,"line":9917},[118,112155,112156],{"class":128},"        error ",[118,112158,174],{"class":124},[118,112160,112161],{"class":128}," target ",[118,112163,660],{"class":124},[118,112165,112166],{"class":128}," tip\n",[118,112168,112169],{"class":120,"line":9925},[118,112170,2404],{"emptyLinePlaceholder":45},[118,112172,112173,112175,112177,112179,112181,112184,112186,112188,112191,112193,112196,112198,112200,112202,112204],{"class":120,"line":9930},[118,112174,106610],{"class":128},[118,112176,320],{"class":177},[118,112178,4447],{"class":128},[118,112180,174],{"class":124},[118,112182,112183],{"class":128}," np.clip(",[118,112185,105253],{"class":177},[118,112187,6523],{"class":124},[118,112189,112190],{"class":128}," error[",[118,112192,206],{"class":177},[118,112194,112195],{"class":128},"], ",[118,112197,660],{"class":124},[118,112199,102396],{"class":177},[118,112201,12440],{"class":128},[118,112203,102396],{"class":177},[118,112205,135],{"class":128},[118,112207,112208,112210,112212,112214,112216,112218,112220,112222,112224,112226,112228,112230,112232,112234,112236],{"class":120,"line":16609},[118,112209,106610],{"class":128},[118,112211,346],{"class":177},[118,112213,4447],{"class":128},[118,112215,174],{"class":124},[118,112217,112183],{"class":128},[118,112219,105253],{"class":177},[118,112221,6523],{"class":124},[118,112223,112190],{"class":128},[118,112225,320],{"class":177},[118,112227,112195],{"class":128},[118,112229,660],{"class":124},[118,112231,102396],{"class":177},[118,112233,12440],{"class":128},[118,112235,102396],{"class":177},[118,112237,135],{"class":128},[118,112239,112240],{"class":120,"line":16615},[118,112241,2404],{"emptyLinePlaceholder":45},[118,112243,112244],{"class":120,"line":16638},[118,112245,101509],{"class":128},[118,112247,112248,112250,112252],{"class":120,"line":16644},[118,112249,110290],{"class":128},[118,112251,9482],{"class":124},[118,112253,112254],{"class":128}," reward(model, data)\n",[118,112256,112257],{"class":120,"line":16667},[118,112258,2404],{"emptyLinePlaceholder":45},[118,112260,112261,112263,112265,112267,112269,112271,112273],{"class":120,"line":16681},[118,112262,2501],{"class":124},[118,112264,31609],{"class":128},[118,112266,456],{"class":124},[118,112268,5759],{"class":177},[118,112270,101552],{"class":124},[118,112272,4097],{"class":177},[118,112274,3743],{"class":128},[118,112276,112277,112280,112282],{"class":120,"line":16701},[118,112278,112279],{"class":128},"            obs ",[118,112281,174],{"class":124},[118,112283,112284],{"class":128}," get_obs(model, data)\n",[118,112286,112287,112289,112291,112293],{"class":120,"line":16707},[118,112288,34643],{"class":177},[118,112290,129],{"class":128},[118,112292,110324],{"class":233},[118,112294,112295],{"class":128},", step)\n",[118,112297,112298,112300,112302,112305,112308,112310],{"class":120,"line":16718},[118,112299,34643],{"class":177},[118,112301,129],{"class":128},[118,112303,112304],{"class":233},"\"  tip:\"",[118,112306,112307],{"class":128},", np.round(tip, ",[118,112309,200],{"class":177},[118,112311,30490],{"class":128},[118,112313,112314,112316,112318,112321,112324,112326],{"class":120,"line":16741},[118,112315,34643],{"class":177},[118,112317,129],{"class":128},[118,112319,112320],{"class":233},"\"  target:\"",[118,112322,112323],{"class":128},", np.round(target, ",[118,112325,200],{"class":177},[118,112327,30490],{"class":128},[118,112329,112330,112332,112334,112337,112340,112342],{"class":120,"line":16763},[118,112331,34643],{"class":177},[118,112333,129],{"class":128},[118,112335,112336],{"class":233},"\"  ctrl:\"",[118,112338,112339],{"class":128},", np.round(data.ctrl.copy(), ",[118,112341,200],{"class":177},[118,112343,30490],{"class":128},[118,112345,112346,112348,112350,112353,112356,112358],{"class":120,"line":16768},[118,112347,34643],{"class":177},[118,112349,129],{"class":128},[118,112351,112352],{"class":233},"\"  obs_dim:\"",[118,112354,112355],{"class":128},", obs.shape[",[118,112357,320],{"class":177},[118,112359,4661],{"class":128},[118,112361,112362],{"class":120,"line":16774},[118,112363,2404],{"emptyLinePlaceholder":45},[118,112365,112366,112368,112370,112372,112374,112376,112378,112380],{"class":120,"line":16788},[118,112367,31292],{"class":177},[118,112369,129],{"class":128},[118,112371,110369],{"class":233},[118,112373,12440],{"class":128},[118,112375,32011],{"class":177},[118,112377,110376],{"class":128},[118,112379,200],{"class":177},[118,112381,30490],{"class":128},[118,112383,112384,112386,112388,112391,112394,112396,112398,112400],{"class":120,"line":16801},[118,112385,31292],{"class":177},[118,112387,129],{"class":128},[118,112389,112390],{"class":233},"\"final tip:\"",[118,112392,112393],{"class":128},", np.round(site_position(model, data, ",[118,112395,111529],{"class":233},[118,112397,110338],{"class":128},[118,112399,200],{"class":177},[118,112401,30490],{"class":128},[118,112403,112404,112406,112408,112411,112413,112415,112417,112419],{"class":120,"line":16806},[118,112405,31292],{"class":177},[118,112407,129],{"class":128},[118,112409,112410],{"class":233},"\"target:\"",[118,112412,112393],{"class":128},[118,112414,111952],{"class":233},[118,112416,110338],{"class":128},[118,112418,200],{"class":177},[118,112420,30490],{"class":128},[118,112422,112423],{"class":120,"line":16820},[118,112424,2404],{"emptyLinePlaceholder":45},[118,112426,112427],{"class":120,"line":16825},[118,112428,2404],{"emptyLinePlaceholder":45},[118,112430,112431,112433,112435,112437,112439],{"class":120,"line":16831},[118,112432,1535],{"class":124},[118,112434,31213],{"class":177},[118,112436,101552],{"class":124},[118,112438,101555],{"class":233},[118,112440,3743],{"class":128},[118,112442,112443],{"class":120,"line":16836},[118,112444,101562],{"class":128},[15,112446,103563],{},[109,112448,112450],{"className":23827,"code":112449,"language":23829,"meta":39,"style":39},"touch ch7_reacher.py\n",[115,112451,112452],{"__ignoreMap":39},[118,112453,112454,112456],{"class":120,"line":121},[118,112455,101276],{"class":1967},[118,112457,112458],{"class":233}," ch7_reacher.py\n",[15,112460,110437],{},[109,112462,112464],{"className":23827,"code":112463,"language":23829,"meta":39,"style":39},"python ch7_reacher.py\n",[115,112465,112466],{"__ignoreMap":39},[118,112467,112468,112470],{"class":120,"line":121},[118,112469,30373],{"class":1967},[118,112471,112458],{"class":233},[89,112473,101565],{"id":101565},[15,112475,112476],{},"读取 site 坐标：",[109,112478,112480],{"className":30371,"code":112479,"language":30373,"meta":39,"style":39},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[115,112481,112482],{"__ignoreMap":39},[118,112483,112484,112486,112488,112490,112492],{"class":120,"line":121},[118,112485,31940],{"class":124},[118,112487,111849],{"class":1967},[118,112489,111852],{"class":128},[118,112491,1303],{"class":177},[118,112493,111857],{"class":128},[15,112495,112496],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[15,112498,110453],{},[109,112500,112502],{"className":30371,"code":112501,"language":30373,"meta":39,"style":39},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[115,112503,112504],{"__ignoreMap":39},[118,112505,112506,112508],{"class":120,"line":121},[118,112507,17051],{"class":124},[118,112509,111961],{"class":128},[15,112511,112512],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[15,112514,109778],{},[109,112516,112518],{"className":30371,"code":112517,"language":30373,"meta":39,"style":39},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[115,112519,112520,112532,112545],{"__ignoreMap":39},[118,112521,112522,112524,112526,112528,112530],{"class":120,"line":121},[118,112523,111589],{"class":128},[118,112525,174],{"class":124},[118,112527,111594],{"class":128},[118,112529,660],{"class":124},[118,112531,111599],{"class":128},[118,112533,112534,112537,112539,112541,112543],{"class":120,"line":40},[118,112535,112536],{"class":128},"control_cost ",[118,112538,174],{"class":124},[118,112540,112030],{"class":177},[118,112542,6523],{"class":124},[118,112544,112035],{"class":128},[118,112546,112547,112549,112551,112553,112555,112557,112559],{"class":120,"line":1183},[118,112548,17051],{"class":124},[118,112550,109790],{"class":177},[118,112552,129],{"class":128},[118,112554,660],{"class":124},[118,112556,111589],{"class":128},[118,112558,660],{"class":124},[118,112560,112052],{"class":128},[15,112562,112563],{},"奖励由两部分组成：",[72,112565,112566,112571],{},[75,112567,112568,112570],{},[115,112569,111616],{},"：末端离目标越远，奖励越低。",[75,112572,112573,112576],{},[115,112574,112575],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[15,112578,112579],{},"简单控制器：",[109,112581,112583],{"className":30371,"code":112582,"language":30373,"meta":39,"style":39},"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",[115,112584,112585,112598,112630],{"__ignoreMap":39},[118,112586,112587,112590,112592,112594,112596],{"class":120,"line":121},[118,112588,112589],{"class":128},"error ",[118,112591,174],{"class":124},[118,112593,112161],{"class":128},[118,112595,660],{"class":124},[118,112597,112166],{"class":128},[118,112599,112600,112602,112604,112606,112608,112610,112612,112614,112616,112618,112620,112622,112624,112626,112628],{"class":120,"line":40},[118,112601,105864],{"class":128},[118,112603,320],{"class":177},[118,112605,4447],{"class":128},[118,112607,174],{"class":124},[118,112609,112183],{"class":128},[118,112611,105253],{"class":177},[118,112613,6523],{"class":124},[118,112615,112190],{"class":128},[118,112617,206],{"class":177},[118,112619,112195],{"class":128},[118,112621,660],{"class":124},[118,112623,102396],{"class":177},[118,112625,12440],{"class":128},[118,112627,102396],{"class":177},[118,112629,135],{"class":128},[118,112631,112632,112634,112636,112638,112640,112642,112644,112646,112648,112650,112652,112654,112656,112658,112660],{"class":120,"line":1183},[118,112633,105864],{"class":128},[118,112635,346],{"class":177},[118,112637,4447],{"class":128},[118,112639,174],{"class":124},[118,112641,112183],{"class":128},[118,112643,105253],{"class":177},[118,112645,6523],{"class":124},[118,112647,112190],{"class":128},[118,112649,320],{"class":177},[118,112651,112195],{"class":128},[118,112653,660],{"class":124},[118,112655,102396],{"class":177},[118,112657,12440],{"class":128},[118,112659,102396],{"class":177},[118,112661,135],{"class":128},[15,112663,112664],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[89,112666,101701],{"id":101701},[109,112668,112669],{"className":30371,"code":112479,"language":30373,"meta":39,"style":39},[115,112670,112671],{"__ignoreMap":39},[118,112672,112673,112675,112677,112679,112681],{"class":120,"line":121},[118,112674,31940],{"class":124},[118,112676,111849],{"class":1967},[118,112678,111852],{"class":128},[118,112680,1303],{"class":177},[118,112682,111857],{"class":128},[15,112684,112685,112686,112688,112689,82532,112691,28378],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[115,112687,79803],{}," 是 site 的名字，比如 ",[115,112690,111529],{},[115,112692,111952],{},[109,112694,112696],{"className":30371,"code":112695,"language":30373,"meta":39,"style":39},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[115,112697,112698],{"__ignoreMap":39},[118,112699,112700,112702,112704],{"class":120,"line":121},[118,112701,103627],{"class":128},[118,112703,174],{"class":124},[118,112705,111866],{"class":128},[15,112707,112708],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[109,112710,112712],{"className":30371,"code":112711,"language":30373,"meta":39,"style":39},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[115,112713,112714,112726],{"__ignoreMap":39},[118,112715,112716,112718,112720,112722,112724],{"class":120,"line":121},[118,112717,1535],{"class":124},[118,112719,103442],{"class":128},[118,112721,1038],{"class":124},[118,112723,4097],{"class":177},[118,112725,3743],{"class":128},[118,112727,112728,112730,112732,112734,112736,112738,112740,112742,112744,112746],{"class":120,"line":40},[118,112729,103888],{"class":124},[118,112731,103428],{"class":177},[118,112733,129],{"class":128},[118,112735,181],{"class":124},[118,112737,111891],{"class":233},[118,112739,1024],{"class":177},[118,112741,79803],{"class":128},[118,112743,1074],{"class":177},[118,112745,379],{"class":233},[118,112747,135],{"class":128},[15,112749,112750,112751,112754,112755,112757],{},"如果 site 没找到，就主动报错。",[115,112752,112753],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[115,112756,79803],{}," 的值放进字符串里。",[109,112759,112761],{"className":30371,"code":112760,"language":30373,"meta":39,"style":39},"return data.site_xpos[site_id].copy()\n",[115,112762,112763],{"__ignoreMap":39},[118,112764,112765,112767],{"class":120,"line":121},[118,112766,17051],{"class":124},[118,112768,111908],{"class":128},[15,112770,112771,112772,112774,112775,112778],{},"返回这个 site 的世界坐标。",[115,112773,103673],{}," 里的每一行都是一个 site 的 ",[115,112776,112777],{},"(x, y, z)"," 坐标。",[109,112780,112782],{"className":30371,"code":112781,"language":30373,"meta":39,"style":39},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[115,112783,112784],{"__ignoreMap":39},[118,112785,112786,112788,112790],{"class":120,"line":121},[118,112787,31940],{"class":124},[118,112789,111923],{"class":1967},[118,112791,111926],{"class":128},[15,112793,112794],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[109,112796,112798],{"className":30371,"code":112797,"language":30373,"meta":39,"style":39},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[115,112799,112800,112812],{"__ignoreMap":39},[118,112801,112802,112804,112806,112808,112810],{"class":120,"line":121},[118,112803,111561],{"class":128},[118,112805,174],{"class":124},[118,112807,111936],{"class":128},[118,112809,111529],{"class":233},[118,112811,135],{"class":128},[118,112813,112814,112816,112818,112820,112822],{"class":120,"line":40},[118,112815,111571],{"class":128},[118,112817,174],{"class":124},[118,112819,111936],{"class":128},[118,112821,111952],{"class":233},[118,112823,135],{"class":128},[15,112825,112826],{},"分别读取末端点和目标点的世界坐标。",[109,112828,112829],{"className":30371,"code":112501,"language":30373,"meta":39,"style":39},[115,112830,112831],{"__ignoreMap":39},[118,112832,112833,112835],{"class":120,"line":121},[118,112834,17051],{"class":124},[118,112836,111961],{"class":128},[15,112838,112839],{},"把四部分拼成一个观测数组：",[109,112841,112844],{"className":112842,"code":112843,"language":5192,"meta":39},[5190],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[115,112845,112843],{"__ignoreMap":39},[109,112847,112849],{"className":30371,"code":112848,"language":30373,"meta":39,"style":39},"dist = np.linalg.norm(tip - target)\n",[115,112850,112851],{"__ignoreMap":39},[118,112852,112853,112855,112857,112859,112861],{"class":120,"line":121},[118,112854,111589],{"class":128},[118,112856,174],{"class":124},[118,112858,111594],{"class":128},[118,112860,660],{"class":124},[118,112862,111599],{"class":128},[15,112864,112865,112866,112869,112870,112873],{},"计算 tip 到 target 的距离。",[115,112867,112868],{},"tip - target"," 得到一个三维向量，",[115,112871,112872],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[15,112875,14638],{},[109,112877,112880],{"className":112878,"code":112879,"language":5192,"meta":39},[5190],"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",[115,112881,112879],{"__ignoreMap":39},[109,112883,112885],{"className":30371,"code":112884,"language":30373,"meta":39,"style":39},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[115,112886,112887],{"__ignoreMap":39},[118,112888,112889,112891,112893,112895,112897],{"class":120,"line":121},[118,112890,112536],{"class":128},[118,112892,174],{"class":124},[118,112894,112030],{"class":177},[118,112896,6523],{"class":124},[118,112898,112035],{"class":128},[15,112900,112901,112902,112905,112906,112909],{},"计算动作惩罚。",[115,112903,112904],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[115,112907,112908],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[109,112911,112913],{"className":30371,"code":112912,"language":30373,"meta":39,"style":39},"return float(-dist - control_cost)\n",[115,112914,112915],{"__ignoreMap":39},[118,112916,112917,112919,112921,112923,112925,112927,112929],{"class":120,"line":121},[118,112918,17051],{"class":124},[118,112920,109790],{"class":177},[118,112922,129],{"class":128},[118,112924,660],{"class":124},[118,112926,111589],{"class":128},[118,112928,660],{"class":124},[118,112930,112052],{"class":128},[15,112932,112933],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[109,112935,112936],{"className":30371,"code":110796,"language":30373,"meta":39,"style":39},[115,112937,112938],{"__ignoreMap":39},[118,112939,112940,112942,112944],{"class":120,"line":121},[118,112941,110803],{"class":128},[118,112943,174],{"class":124},[118,112945,104754],{"class":177},[15,112947,112948],{},"累计奖励变量，记录整个运行过程的总分。",[109,112950,112952],{"className":30371,"code":112951,"language":30373,"meta":39,"style":39},"for step in range(500):\n",[115,112953,112954],{"__ignoreMap":39},[118,112955,112956,112958,112960,112962,112964,112966,112968],{"class":120,"line":121},[118,112957,3029],{"class":124},[118,112959,31609],{"class":128},[118,112961,26036],{"class":124},[118,112963,32436],{"class":177},[118,112965,129],{"class":128},[118,112967,65067],{"class":177},[118,112969,30779],{"class":128},[15,112971,112972],{},"运行 500 个控制步。",[109,112974,112975],{"className":30371,"code":104536,"language":30373,"meta":39,"style":39},[115,112976,112977],{"__ignoreMap":39},[118,112978,112979],{"class":120,"line":121},[118,112980,104536],{"class":128},[15,112982,112983,112984,101011,112986,112988],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[115,112985,103224],{},[115,112987,103227],{}," 是当前状态下的坐标。",[109,112990,112992],{"className":30371,"code":112991,"language":30373,"meta":39,"style":39},"error = target - tip\n",[115,112993,112994],{"__ignoreMap":39},[118,112995,112996,112998,113000,113002,113004],{"class":120,"line":121},[118,112997,112589],{"class":128},[118,112999,174],{"class":124},[118,113001,112161],{"class":128},[118,113003,660],{"class":124},[118,113005,112166],{"class":128},[15,113007,113008],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[109,113010,113012],{"className":30371,"code":113011,"language":30373,"meta":39,"style":39},"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",[115,113013,113014,113046],{"__ignoreMap":39},[118,113015,113016,113018,113020,113022,113024,113026,113028,113030,113032,113034,113036,113038,113040,113042,113044],{"class":120,"line":121},[118,113017,105864],{"class":128},[118,113019,320],{"class":177},[118,113021,4447],{"class":128},[118,113023,174],{"class":124},[118,113025,112183],{"class":128},[118,113027,105253],{"class":177},[118,113029,6523],{"class":124},[118,113031,112190],{"class":128},[118,113033,206],{"class":177},[118,113035,112195],{"class":128},[118,113037,660],{"class":124},[118,113039,102396],{"class":177},[118,113041,12440],{"class":128},[118,113043,102396],{"class":177},[118,113045,135],{"class":128},[118,113047,113048,113050,113052,113054,113056,113058,113060,113062,113064,113066,113068,113070,113072,113074,113076],{"class":120,"line":40},[118,113049,105864],{"class":128},[118,113051,346],{"class":177},[118,113053,4447],{"class":128},[118,113055,174],{"class":124},[118,113057,112183],{"class":128},[118,113059,105253],{"class":177},[118,113061,6523],{"class":124},[118,113063,112190],{"class":128},[118,113065,320],{"class":177},[118,113067,112195],{"class":128},[118,113069,660],{"class":124},[118,113071,102396],{"class":177},[118,113073,12440],{"class":128},[118,113075,102396],{"class":177},[118,113077,135],{"class":128},[15,113079,113080,113081,113084],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[115,113082,113083],{},"error -> ctrl -> step"," 的流程。",[109,113086,113087],{"className":30371,"code":104498,"language":30373,"meta":39,"style":39},[115,113088,113089],{"__ignoreMap":39},[118,113090,113091],{"class":120,"line":121},[118,113092,104498],{"class":128},[15,113094,113095],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[109,113097,113099],{"className":30371,"code":113098,"language":30373,"meta":39,"style":39},"obs = get_obs(model, data)\n",[115,113100,113101],{"__ignoreMap":39},[118,113102,113103,113105,113107],{"class":120,"line":121},[118,113104,110847],{"class":128},[118,113106,174],{"class":124},[118,113108,112284],{"class":128},[15,113110,113111,113112,113115],{},"读取最新观测。后面打印 ",[115,113113,113114],{},"obs.shape[0]","，用来确认观测维度是 10。",[60,113117,102309],{"id":102308},[15,113119,113120],{},"观测维度为:",[109,113122,113125],{"className":113123,"code":113124,"language":5192,"meta":39},[5190],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[115,113126,113124],{"__ignoreMap":39},[15,113128,113129],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[15,113131,113132],{},"程序每 100 步打印：",[109,113134,113137],{"className":113135,"code":113136,"language":5192,"meta":39},[5190],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[115,113138,113136],{"__ignoreMap":39},[15,113140,113141,113142,113144],{},"如果控制有效，你应该看到最终 ",[115,113143,103224],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[60,113146,102341],{"id":102340},[72,113148,113149,113152,113155,113161,113167,113174,113184],{},[75,113150,113151],{},"修改目标点位置。",[75,113153,113154],{},"重新运行，观察最终 tip 是否变化。",[75,113156,113157,113158,113160],{},"把 gravity 改成 ",[115,113159,102582],{},"，观察控制是否变差。",[75,113162,111174,113163,111178,113165,28378],{},[115,113164,102151],{},[115,113166,206],{},[75,113168,102404,113169,102407,113171,113173],{},[115,113170,110589],{},[115,113172,107300],{},"，观察机械臂是否更难移动。",[75,113175,102404,113176,82523,113178,102407,113180,113183],{},[115,113177,103227],{},[115,113179,104139],{},[115,113181,113182],{},"0.2 0 0.6","，观察 reward 和 final tip。",[75,113185,113186],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[60,113188,102446],{"id":102445},[89,113190,113192],{"id":113191},"site-not-found",[115,113193,113194],{},"site not found",[15,113196,113197,113198,101011,113201,28378],{},"检查 XML 中是否有 ",[115,113199,113200],{},"site name=\"tip\"",[115,113202,113203],{},"site name=\"target\"",[89,113205,113206],{"id":113206},"机械臂完全不动",[15,113208,102516],{},[72,113210,113211,113216,113219,113224],{},[75,113212,113213,113215],{},[115,113214,102151],{}," 是否为 2",[75,113217,113218],{},"actuator 是否引用正确 joint",[75,113220,113221,113223],{},[115,113222,101069],{}," 是否被赋值",[75,113225,113226,113227],{},"是否执行了 ",[115,113228,100678],{},[89,113230,113231],{"id":113231},"控制效果不好",[15,113233,113234],{},"正常。本章重点不是控制器最优，而是任务结构:",[109,113236,113239],{"className":113237,"code":113238,"language":5192,"meta":39},[5190],"obs → action → mj_step → reward → next_obs\n",[115,113240,113238],{"__ignoreMap":39},[89,113242,113244],{"id":113243},"tip-坐标不变化","tip 坐标不变化",[15,113246,102568],{},[72,113248,113249,113254,113262,113271],{},[75,113250,113251,113252,28378],{},"是否每步调用了 ",[115,113253,100678],{},[75,113255,113256,113257,101011,113259,28378],{},"是否写入了 ",[115,113258,106119],{},[115,113260,113261],{},"data.ctrl[1]",[75,113263,113264,113265,341,113268,28378],{},"actuator 是否正确引用 ",[115,113266,113267],{},"joint1",[115,113269,113270],{},"joint2",[75,113272,113273],{},"控制输入是否太小。",[89,113275,113276],{"id":113276},"目标点不会动",[15,113278,113279],{},"本章的 target 是固定 site：",[109,113281,113283],{"className":53060,"code":113282,"language":53062,"meta":39,"style":39},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[115,113284,113285],{"__ignoreMap":39},[118,113286,113287,113289,113291,113293,113295,113297,113299,113301,113304],{"class":120,"line":121},[118,113288,1038],{"class":128},[118,113290,103203],{"class":51293},[118,113292,14925],{"class":1967},[118,113294,174],{"class":128},[118,113296,111952],{"class":233},[118,113298,101099],{"class":1967},[118,113300,174],{"class":128},[118,113302,113303],{"class":233},"\"0.5 0 0.4\"",[118,113305,113306],{"class":128}," ...\u002F>\n",[15,113308,113309,113310,113312],{},"它直接挂在 ",[115,113311,101834],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[89,113314,113315],{"id":113315},"机械臂不像真实机械臂",[15,113317,113318],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[60,113320,102600],{"id":102599},[15,113322,113323],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[15,113325,113326],{},"核心公式：",[109,113328,113331],{"className":113329,"code":113330,"language":5192,"meta":39},[5190],"distance = ||tip - target||\nreward = -distance - action_cost\n",[115,113332,113330],{"__ignoreMap":39},[15,113334,113335],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5131,113337,113338],{},"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":39,"searchDepth":40,"depth":40,"links":113340},[113341,113342,113343,113348,113352,113353,113354,113362],{"id":100639,"depth":40,"text":100640},{"id":100762,"depth":40,"text":100763},{"id":101037,"depth":40,"text":101038,"children":113344},[113345,113346,113347],{"id":111544,"depth":1183,"text":111545},{"id":111620,"depth":1183,"text":111620},{"id":111650,"depth":1183,"text":111651},{"id":101245,"depth":40,"text":101246,"children":113349},[113350,113351],{"id":101565,"depth":1183,"text":101565},{"id":101701,"depth":1183,"text":101701},{"id":102308,"depth":40,"text":102309},{"id":102340,"depth":40,"text":102341},{"id":102445,"depth":40,"text":102446,"children":113355},[113356,113357,113358,113359,113360,113361],{"id":113191,"depth":1183,"text":113194},{"id":113206,"depth":1183,"text":113206},{"id":113231,"depth":1183,"text":113231},{"id":113243,"depth":1183,"text":113244},{"id":113276,"depth":1183,"text":113276},{"id":113315,"depth":1183,"text":113315},{"id":102599,"depth":40,"text":102600},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111348,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113369,"title":113370,"body":113371,"description":39,"extension":43,"meta":116833,"navigation":45,"path":116834,"seo":116835,"stem":116836,"__hash__":116837},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113372,"toc":116804},[113373,113376,113378,113381,113384,113409,113412,113418,113421,113427,113429,113431,113455,113457,113475,113477,113520,113522,113549,113551,113554,113606,113609,113615,113624,113627,113665,113668,113707,113710,113718,113725,113728,113734,113736,113790,113797,113842,113845,113849,113865,113875,113877,115138,115140,115152,115154,115165,115167,115170,115191,115194,115197,115230,115236,115239,115272,115275,115278,115319,115324,115338,115341,115354,115359,115382,115384,115399,115409,115424,115431,115451,115466,115484,115487,115504,115512,115528,115534,115566,115579,115611,115621,115656,115670,115716,115730,115772,115783,115796,115802,115835,115838,115865,115875,115915,115925,115942,115949,115967,115970,116011,116024,116039,116042,116065,116068,116080,116083,116102,116107,116128,116131,116146,116149,116183,116195,116210,116213,116238,116241,116260,116263,116295,116298,116322,116328,116358,116365,116378,116381,116383,116385,116391,116394,116397,116409,116412,116414,116468,116470,116474,116480,116489,116492,116499,116501,116524,116527,116531,116533,116551,116557,116559,116592,116595,116601,116605,116608,116628,116633,116637,116644,116664,116669,116673,116676,116696,116699,116785,116789,116792,116798,116801],[10,113374,113370],{"id":113375},"_8gymnasium-风格强化学习接口基础",[60,113377,100640],{"id":100639},[15,113379,113380],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[15,113382,113383],{},"你将实现:",[109,113385,113387],{"className":30371,"code":113386,"language":30373,"meta":39,"style":39},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[115,113388,113389,113399],{"__ignoreMap":39},[118,113390,113391,113394,113396],{"class":120,"line":121},[118,113392,113393],{"class":128},"obs, info ",[118,113395,174],{"class":124},[118,113397,113398],{"class":128}," env.reset()\n",[118,113400,113401,113404,113406],{"class":120,"line":40},[118,113402,113403],{"class":128},"obs, reward, terminated, truncated, info ",[118,113405,174],{"class":124},[118,113407,113408],{"class":128}," env.step(action)\n",[15,113410,113411],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[15,113413,113414,113415,113417],{},"前面章节的代码都是“脚本式”的：在 ",[115,113416,102288],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[15,113419,113420],{},"可以先记住 Gymnasium 环境的核心交互：",[109,113422,113425],{"className":113423,"code":113424,"language":5192,"meta":39},[5190],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[115,113426,113424],{"__ignoreMap":39},[60,113428,100763],{"id":100762},[15,113430,100766],{},[109,113432,113433],{"className":23827,"code":104381,"language":23829,"meta":39,"style":39},[115,113434,113435],{"__ignoreMap":39},[118,113436,113437,113439,113441,113443,113445,113447,113449,113451,113453],{"class":120,"line":121},[118,113438,24581],{"class":1967},[118,113440,26308],{"class":233},[118,113442,23839],{"class":233},[118,113444,26393],{"class":177},[118,113446,104396],{"class":233},[118,113448,100791],{"class":233},[118,113450,102494],{"class":233},[118,113452,100807],{"class":233},[118,113454,104405],{"class":233},[15,113456,102812],{},[109,113458,113460],{"className":23827,"code":113459,"language":23829,"meta":39,"style":39},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[115,113461,113462],{"__ignoreMap":39},[118,113463,113464,113466,113468,113470,113472],{"class":120,"line":121},[118,113465,23836],{"class":1967},[118,113467,23839],{"class":233},[118,113469,100923],{"class":233},[118,113471,107704],{"class":233},[118,113473,113474],{"class":233}," gymnasium\n",[15,113476,102829],{},[109,113478,113480],{"className":23827,"code":113479,"language":23829,"meta":39,"style":39},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[115,113481,113482,113499,113508],{"__ignoreMap":39},[118,113483,113484,113486,113488,113490,113493,113495,113497],{"class":120,"line":121},[118,113485,30323],{"class":1967},[118,113487,29169],{"class":233},[118,113489,25120],{"class":177},[118,113491,113492],{"class":233}," mujoco-gym-api",[118,113494,100968],{"class":233},[118,113496,100971],{"class":177},[118,113498,100974],{"class":177},[118,113500,113501,113503,113505],{"class":120,"line":40},[118,113502,30323],{"class":1967},[118,113504,100981],{"class":233},[118,113506,113507],{"class":233}," mujoco-gym-api\n",[118,113509,113510,113512,113514,113516,113518],{"class":120,"line":1183},[118,113511,23836],{"class":1967},[118,113513,23839],{"class":233},[118,113515,100923],{"class":233},[118,113517,107704],{"class":233},[118,113519,113474],{"class":233},[15,113521,100997],{},[72,113523,113524,113534,113537,113543],{},[75,113525,113526,113527,113530,113531,28378],{},"本章使用 ",[115,113528,113529],{},"gymnasium","，不是旧版 ",[115,113532,113533],{},"gym",[75,113535,113536],{},"Gymnasium API 与旧 Gym API 有差异。",[75,113538,113539,113540,28378],{},"旧 Gym 常见返回值是 4 个: ",[115,113541,113542],{},"obs, reward, done, info",[75,113544,113545,113546,28378],{},"Gymnasium 返回值是 5 个: ",[115,113547,113548],{},"obs, reward, terminated, truncated, info",[60,113550,101038],{"id":101037},[15,113552,113553],{},"强化学习环境接口包含:",[266,113555,113556,113565],{},[269,113557,113558],{},[272,113559,113560,113563],{},[275,113561,113562],{"align":23741},"方法",[275,113564,102689],{"align":23741},[313,113566,113567,113577,113587,113597],{},[272,113568,113569,113574],{},[318,113570,113571],{"align":23741},[115,113572,113573],{},"reset()",[318,113575,113576],{"align":23741},"重置环境",[272,113578,113579,113584],{},[318,113580,113581],{"align":23741},[115,113582,113583],{},"step(action)",[318,113585,113586],{"align":23741},"执行动作",[272,113588,113589,113594],{},[318,113590,113591],{"align":23741},[115,113592,113593],{},"observation_space",[318,113595,113596],{"align":23741},"观测空间",[272,113598,113599,113604],{},[318,113600,113601],{"align":23741},[115,113602,113603],{},"action_space",[318,113605,23659],{"align":23741},[15,113607,113608],{},"一个最小环境需要完成:",[109,113610,113613],{"className":113611,"code":113612,"language":5192,"meta":39},[5190],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[115,113614,113612],{"__ignoreMap":39},[89,113616,113618,101011,113621,104631],{"id":113617},"terminated-和-truncated-的区别",[115,113619,113620],{},"terminated",[115,113622,113623],{},"truncated",[15,113625,113626],{},"Gymnasium 把“结束”拆成两个概念：",[266,113628,113629,113639],{},[269,113630,113631],{},[272,113632,113633,113635,113637],{},[275,113634,104567],{"align":23741},[275,113636,100693],{"align":23741},[275,113638,21192],{"align":23741},[313,113640,113641,113653],{},[272,113642,113643,113647,113650],{},[318,113644,113645],{"align":23741},[115,113646,113620],{},[318,113648,113649],{"align":23741},"任务自然结束",[318,113651,113652],{"align":23741},"机械臂到达目标、机器人摔倒",[272,113654,113655,113659,113662],{},[318,113656,113657],{"align":23741},[115,113658,113623],{},[318,113660,113661],{"align":23741},"因外部限制截断",[318,113663,113664],{"align":23741},"达到最大步数、时间限制",[15,113666,113667],{},"本章中：",[109,113669,113671],{"className":30371,"code":113670,"language":30373,"meta":39,"style":39},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[115,113672,113673,113688],{"__ignoreMap":39},[118,113674,113675,113678,113680,113683,113685],{"class":120,"line":121},[118,113676,113677],{"class":128},"terminated ",[118,113679,174],{"class":124},[118,113681,113682],{"class":128}," dist ",[118,113684,1038],{"class":124},[118,113686,113687],{"class":177}," 0.05\n",[118,113689,113690,113693,113695,113697,113700,113702,113704],{"class":120,"line":40},[118,113691,113692],{"class":128},"truncated ",[118,113694,174],{"class":124},[118,113696,38866],{"class":177},[118,113698,113699],{"class":128},".steps ",[118,113701,1714],{"class":124},[118,113703,38866],{"class":177},[118,113705,113706],{"class":128},".max_steps\n",[15,113708,113709],{},"也就是：",[72,113711,113712,113715],{},[75,113713,113714],{},"末端距离目标小于 0.05，任务成功结束。",[75,113716,113717],{},"步数超过上限，episode 被截断。",[89,113719,113721,101011,113723],{"id":113720},"observation_space-和-action_space",[115,113722,113593],{},[115,113724,113603],{},[15,113726,113727],{},"这两个对象告诉算法：",[109,113729,113732],{"className":113730,"code":113731,"language":5192,"meta":39},[5190],"观测长什么样\n动作允许多大\n",[115,113733,113731],{"__ignoreMap":39},[15,113735,14638],{},[109,113737,113739],{"className":30371,"code":113738,"language":30373,"meta":39,"style":39},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[115,113740,113741],{"__ignoreMap":39},[118,113742,113743,113745,113748,113750,113753,113756,113759,113761,113763,113766,113768,113770,113772,113774,113776,113778,113780,113783,113785,113787],{"class":120,"line":121},[118,113744,30816],{"class":177},[118,113746,113747],{"class":128},".action_space ",[118,113749,174],{"class":124},[118,113751,113752],{"class":128}," spaces.Box(",[118,113754,113755],{"class":5221},"low",[118,113757,113758],{"class":124},"=-",[118,113760,102396],{"class":177},[118,113762,12440],{"class":128},[118,113764,113765],{"class":5221},"high",[118,113767,174],{"class":124},[118,113769,102396],{"class":177},[118,113771,12440],{"class":128},[118,113773,95956],{"class":5221},[118,113775,174],{"class":124},[118,113777,129],{"class":128},[118,113779,206],{"class":177},[118,113781,113782],{"class":128},",), ",[118,113784,93493],{"class":5221},[118,113786,174],{"class":124},[118,113788,113789],{"class":128},"np.float32)\n",[15,113791,113792,113793,113796],{},"表示动作是 2 维数组，每个值都在 ",[115,113794,113795],{},"[-1, 1]"," 范围内。",[109,113798,113800],{"className":30371,"code":113799,"language":30373,"meta":39,"style":39},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[115,113801,113802],{"__ignoreMap":39},[118,113803,113804,113806,113809,113811,113813,113815,113817,113820,113822,113824,113826,113828,113830,113832,113834,113836,113838,113840],{"class":120,"line":121},[118,113805,30816],{"class":177},[118,113807,113808],{"class":128},".observation_space ",[118,113810,174],{"class":124},[118,113812,113752],{"class":128},[118,113814,113755],{"class":5221},[118,113816,113758],{"class":124},[118,113818,113819],{"class":128},"np.inf, ",[118,113821,113765],{"class":5221},[118,113823,174],{"class":124},[118,113825,113819],{"class":128},[118,113827,95956],{"class":5221},[118,113829,174],{"class":124},[118,113831,129],{"class":128},[118,113833,574],{"class":177},[118,113835,113782],{"class":128},[118,113837,93493],{"class":5221},[118,113839,174],{"class":124},[118,113841,113789],{"class":128},[15,113843,113844],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[89,113846,113848],{"id":113847},"frame_skip-是什么","frame_skip 是什么",[109,113850,113852],{"className":30371,"code":113851,"language":30373,"meta":39,"style":39},"self.frame_skip = 5\n",[115,113853,113854],{"__ignoreMap":39},[118,113855,113856,113858,113861,113863],{"class":120,"line":121},[118,113857,30816],{"class":177},[118,113859,113860],{"class":128},".frame_skip ",[118,113862,174],{"class":124},[118,113864,54420],{"class":177},[15,113866,113867,113868,113871,113872,113874],{},"表示外部调用一次 ",[115,113869,113870],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[115,113873,101208],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[60,113876,101246],{"id":101245},[109,113878,113880],{"className":30371,"code":113879,"language":30373,"meta":39,"style":39},"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",[115,113881,113882,113894,113900,113910,113921,113925,113929,113937,113942,113946,113950,113954,113958,113962,113966,113970,113975,113979,113983,113987,113992,113996,114000,114004,114008,114012,114016,114020,114024,114028,114032,114036,114040,114044,114062,114077,114081,114094,114104,114119,114136,114140,114161,114180,114205,114219,114223,114233,114245,114255,114259,114301,114339,114343,114353,114369,114384,114403,114410,114414,114427,114442,114457,114470,114489,114505,114509,114550,114565,114580,114584,114623,114634,114647,114651,114661,114670,114674,114684,114699,114717,114721,114732,114749,114762,114766,114776,114780,114791,114802,114806,114820,114834,114850,114854,114867,114884,114899,114906,114910,114914,114926,114936,114954,114966,114978,114982,114990,115006,115015,115024,115032,115074,115087,115092,115096,115114,115118,115122,115134],{"__ignoreMap":39},[118,113883,113884,113886,113889,113891],{"class":120,"line":121},[118,113885,30385],{"class":124},[118,113887,113888],{"class":128}," gymnasium ",[118,113890,31376],{"class":124},[118,113892,113893],{"class":128}," gym\n",[118,113895,113896,113898],{"class":120,"line":40},[118,113897,30385],{"class":124},[118,113899,101294],{"class":128},[118,113901,113902,113904,113906,113908],{"class":120,"line":1183},[118,113903,30385],{"class":124},[118,113905,31373],{"class":128},[118,113907,31376],{"class":124},[118,113909,31379],{"class":128},[118,113911,113912,113914,113916,113918],{"class":120,"line":1198},[118,113913,30730],{"class":124},[118,113915,113888],{"class":128},[118,113917,30385],{"class":124},[118,113919,113920],{"class":128}," spaces\n",[118,113922,113923],{"class":120,"line":1204},[118,113924,2404],{"emptyLinePlaceholder":45},[118,113926,113927],{"class":120,"line":1218},[118,113928,2404],{"emptyLinePlaceholder":45},[118,113930,113931,113933,113935],{"class":120,"line":1224},[118,113932,101307],{"class":177},[118,113934,13569],{"class":124},[118,113936,101312],{"class":233},[118,113938,113939],{"class":120,"line":1315},[118,113940,113941],{"class":233},"\u003Cmujoco model=\"gym_reacher\">\n",[118,113943,113944],{"class":120,"line":1321},[118,113945,111731],{"class":233},[118,113947,113948],{"class":120,"line":1333},[118,113949,2404],{"emptyLinePlaceholder":45},[118,113951,113952],{"class":120,"line":1616},[118,113953,101331],{"class":233},[118,113955,113956],{"class":120,"line":1621},[118,113957,111749],{"class":233},[118,113959,113960],{"class":120,"line":1627},[118,113961,2404],{"emptyLinePlaceholder":45},[118,113963,113964],{"class":120,"line":1632},[118,113965,111758],{"class":233},[118,113967,113968],{"class":120,"line":1646},[118,113969,111763],{"class":233},[118,113971,113972],{"class":120,"line":1651},[118,113973,113974],{"class":233},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[118,113976,113977],{"class":120,"line":1657},[118,113978,2404],{"emptyLinePlaceholder":45},[118,113980,113981],{"class":120,"line":1678},[118,113982,111777],{"class":233},[118,113984,113985],{"class":120,"line":1683},[118,113986,111782],{"class":233},[118,113988,113989],{"class":120,"line":1697},[118,113990,113991],{"class":233},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[118,113993,113994],{"class":120,"line":1702},[118,113995,111792],{"class":233},[118,113997,113998],{"class":120,"line":1731},[118,113999,106431],{"class":233},[118,114001,114002],{"class":120,"line":1736},[118,114003,101360],{"class":233},[118,114005,114006],{"class":120,"line":1753},[118,114007,101365],{"class":233},[118,114009,114010],{"class":120,"line":1758},[118,114011,2404],{"emptyLinePlaceholder":45},[118,114013,114014],{"class":120,"line":1763},[118,114015,106448],{"class":233},[118,114017,114018],{"class":120,"line":1768},[118,114019,111817],{"class":233},[118,114021,114022],{"class":120,"line":1782},[118,114023,111822],{"class":233},[118,114025,114026],{"class":120,"line":1787},[118,114027,106458],{"class":233},[118,114029,114030],{"class":120,"line":2581},[118,114031,101370],{"class":233},[118,114033,114034],{"class":120,"line":2595},[118,114035,95691],{"class":233},[118,114037,114038],{"class":120,"line":2603},[118,114039,2404],{"emptyLinePlaceholder":45},[118,114041,114042],{"class":120,"line":2608},[118,114043,2404],{"emptyLinePlaceholder":45},[118,114045,114046,114048,114051,114053,114055,114057,114060],{"class":120,"line":2614},[118,114047,14699],{"class":124},[118,114049,114050],{"class":1967}," ReacherEnv",[118,114052,129],{"class":128},[118,114054,113533],{"class":1967},[118,114056,686],{"class":128},[118,114058,114059],{"class":1967},"Env",[118,114061,30779],{"class":128},[118,114063,114064,114067,114069,114071,114074],{"class":120,"line":2620},[118,114065,114066],{"class":128},"    metadata ",[118,114068,174],{"class":124},[118,114070,4452],{"class":128},[118,114072,114073],{"class":233},"\"render_modes\"",[118,114075,114076],{"class":128},": []}\n",[118,114078,114079],{"class":120,"line":2625},[118,114080,2404],{"emptyLinePlaceholder":45},[118,114082,114083,114085,114087,114090,114092],{"class":120,"line":7953},[118,114084,30794],{"class":124},[118,114086,30797],{"class":177},[118,114088,114089],{"class":128},"(self) -> ",[118,114091,95679],{"class":177},[118,114093,3743],{"class":128},[118,114095,114096,114098,114100,114102],{"class":120,"line":7977},[118,114097,30810],{"class":177},[118,114099,17266],{"class":128},[118,114101,30822],{"class":177},[118,114103,1980],{"class":128},[118,114105,114106,114108,114111,114113,114115,114117],{"class":120,"line":7982},[118,114107,30838],{"class":177},[118,114109,114110],{"class":128},".model ",[118,114112,174],{"class":124},[118,114114,101405],{"class":128},[118,114116,101307],{"class":177},[118,114118,135],{"class":128},[118,114120,114121,114123,114126,114128,114131,114133],{"class":120,"line":7988},[118,114122,30838],{"class":177},[118,114124,114125],{"class":128},".data ",[118,114127,174],{"class":124},[118,114129,114130],{"class":128}," mujoco.MjData(",[118,114132,30816],{"class":177},[118,114134,114135],{"class":128},".model)\n",[118,114137,114138],{"class":120,"line":8015},[118,114139,2404],{"emptyLinePlaceholder":45},[118,114141,114142,114144,114147,114149,114152,114154,114157,114159],{"class":120,"line":8020},[118,114143,30838],{"class":177},[118,114145,114146],{"class":128},".tip_site_id ",[118,114148,174],{"class":124},[118,114150,114151],{"class":128}," mujoco.mj_name2id(",[118,114153,30816],{"class":177},[118,114155,114156],{"class":128},".model, mujoco.mjtObj.mjOBJ_SITE, ",[118,114158,111529],{"class":233},[118,114160,135],{"class":128},[118,114162,114163,114165,114168,114170,114172,114174,114176,114178],{"class":120,"line":8026},[118,114164,30838],{"class":177},[118,114166,114167],{"class":128},".target_site_id ",[118,114169,174],{"class":124},[118,114171,114151],{"class":128},[118,114173,30816],{"class":177},[118,114175,114156],{"class":128},[118,114177,111952],{"class":233},[118,114179,135],{"class":128},[118,114181,114182,114184,114186,114188,114190,114192,114195,114197,114199,114201,114203],{"class":120,"line":8038},[118,114183,2501],{"class":124},[118,114185,38866],{"class":177},[118,114187,114146],{"class":128},[118,114189,1038],{"class":124},[118,114191,4097],{"class":177},[118,114193,114194],{"class":124}," or",[118,114196,38866],{"class":177},[118,114198,114167],{"class":128},[118,114200,1038],{"class":124},[118,114202,4097],{"class":177},[118,114204,3743],{"class":128},[118,114206,114207,114210,114212,114214,114217],{"class":120,"line":8050},[118,114208,114209],{"class":124},"            raise",[118,114211,103428],{"class":177},[118,114213,129],{"class":128},[118,114215,114216],{"class":233},"\"required sites not found\"",[118,114218,135],{"class":128},[118,114220,114221],{"class":120,"line":8062},[118,114222,2404],{"emptyLinePlaceholder":45},[118,114224,114225,114227,114229,114231],{"class":120,"line":9721},[118,114226,30838],{"class":177},[118,114228,113860],{"class":128},[118,114230,174],{"class":124},[118,114232,54420],{"class":177},[118,114234,114235,114237,114240,114242],{"class":120,"line":9746},[118,114236,30838],{"class":177},[118,114238,114239],{"class":128},".max_steps ",[118,114241,174],{"class":124},[118,114243,114244],{"class":177}," 200\n",[118,114246,114247,114249,114251,114253],{"class":120,"line":9769},[118,114248,30838],{"class":177},[118,114250,113699],{"class":128},[118,114252,174],{"class":124},[118,114254,47326],{"class":177},[118,114256,114257],{"class":120,"line":9793},[118,114258,2404],{"emptyLinePlaceholder":45},[118,114260,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287,114289,114291,114293,114295,114297,114299],{"class":120,"line":9798},[118,114262,30838],{"class":177},[118,114264,113747],{"class":128},[118,114266,174],{"class":124},[118,114268,113752],{"class":128},[118,114270,113755],{"class":5221},[118,114272,113758],{"class":124},[118,114274,102396],{"class":177},[118,114276,12440],{"class":128},[118,114278,113765],{"class":5221},[118,114280,174],{"class":124},[118,114282,102396],{"class":177},[118,114284,12440],{"class":128},[118,114286,95956],{"class":5221},[118,114288,174],{"class":124},[118,114290,129],{"class":128},[118,114292,206],{"class":177},[118,114294,113782],{"class":128},[118,114296,93493],{"class":5221},[118,114298,174],{"class":124},[118,114300,113789],{"class":128},[118,114302,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321,114323,114325,114327,114329,114331,114333,114335,114337],{"class":120,"line":9803},[118,114304,30838],{"class":177},[118,114306,113808],{"class":128},[118,114308,174],{"class":124},[118,114310,113752],{"class":128},[118,114312,113755],{"class":5221},[118,114314,113758],{"class":124},[118,114316,113819],{"class":128},[118,114318,113765],{"class":5221},[118,114320,174],{"class":124},[118,114322,113819],{"class":128},[118,114324,95956],{"class":5221},[118,114326,174],{"class":124},[118,114328,129],{"class":128},[118,114330,574],{"class":177},[118,114332,113782],{"class":128},[118,114334,93493],{"class":5221},[118,114336,174],{"class":124},[118,114338,113789],{"class":128},[118,114340,114341],{"class":120,"line":9808},[118,114342,2404],{"emptyLinePlaceholder":45},[118,114344,114345,114347,114350],{"class":120,"line":9817},[118,114346,30794],{"class":124},[118,114348,114349],{"class":1967}," _get_obs",[118,114351,114352],{"class":128},"(self) -> np.ndarray:\n",[118,114354,114355,114357,114359,114361,114364,114366],{"class":120,"line":9822},[118,114356,112130],{"class":128},[118,114358,174],{"class":124},[118,114360,38866],{"class":177},[118,114362,114363],{"class":128},".data.site_xpos[",[118,114365,30816],{"class":177},[118,114367,114368],{"class":128},".tip_site_id].copy()\n",[118,114370,114371,114373,114375,114377,114379,114381],{"class":120,"line":9828},[118,114372,112143],{"class":128},[118,114374,174],{"class":124},[118,114376,38866],{"class":177},[118,114378,114363],{"class":128},[118,114380,30816],{"class":177},[118,114382,114383],{"class":128},".target_site_id].copy()\n",[118,114385,114386,114388,114390,114393,114395,114398,114400],{"class":120,"line":9849},[118,114387,110175],{"class":128},[118,114389,174],{"class":124},[118,114391,114392],{"class":128}," np.concatenate([",[118,114394,30816],{"class":177},[118,114396,114397],{"class":128},".data.qpos.copy(), ",[118,114399,30816],{"class":177},[118,114401,114402],{"class":128},".data.qvel.copy(), tip, target])\n",[118,114404,114405,114407],{"class":120,"line":9855},[118,114406,14757],{"class":124},[118,114408,114409],{"class":128}," obs.astype(np.float32)\n",[118,114411,114412],{"class":120,"line":9869},[118,114413,2404],{"emptyLinePlaceholder":45},[118,114415,114416,114418,114421,114423,114425],{"class":120,"line":9875},[118,114417,30794],{"class":124},[118,114419,114420],{"class":1967}," _get_reward",[118,114422,114089],{"class":128},[118,114424,168],{"class":177},[118,114426,3743],{"class":128},[118,114428,114429,114431,114433,114435,114437,114439],{"class":120,"line":9902},[118,114430,112130],{"class":128},[118,114432,174],{"class":124},[118,114434,38866],{"class":177},[118,114436,114363],{"class":128},[118,114438,30816],{"class":177},[118,114440,114441],{"class":128},".tip_site_id]\n",[118,114443,114444,114446,114448,114450,114452,114454],{"class":120,"line":9911},[118,114445,112143],{"class":128},[118,114447,174],{"class":124},[118,114449,38866],{"class":177},[118,114451,114363],{"class":128},[118,114453,30816],{"class":177},[118,114455,114456],{"class":128},".target_site_id]\n",[118,114458,114459,114462,114464,114466,114468],{"class":120,"line":9917},[118,114460,114461],{"class":128},"        dist ",[118,114463,174],{"class":124},[118,114465,111594],{"class":128},[118,114467,660],{"class":124},[118,114469,111599],{"class":128},[118,114471,114472,114475,114477,114479,114481,114484,114486],{"class":120,"line":9925},[118,114473,114474],{"class":128},"        control_cost ",[118,114476,174],{"class":124},[118,114478,112030],{"class":177},[118,114480,6523],{"class":124},[118,114482,114483],{"class":128}," np.sum(np.square(",[118,114485,30816],{"class":177},[118,114487,114488],{"class":128},".data.ctrl))\n",[118,114490,114491,114493,114495,114497,114499,114501,114503],{"class":120,"line":9930},[118,114492,14757],{"class":124},[118,114494,109790],{"class":177},[118,114496,129],{"class":128},[118,114498,660],{"class":124},[118,114500,111589],{"class":128},[118,114502,660],{"class":124},[118,114504,112052],{"class":128},[118,114506,114507],{"class":120,"line":16609},[118,114508,2404],{"emptyLinePlaceholder":45},[118,114510,114511,114513,114516,114519,114521,114524,114526,114528,114530,114532,114534,114537,114540,114542,114544,114546,114548],{"class":120,"line":16615},[118,114512,30794],{"class":124},[118,114514,114515],{"class":1967}," reset",[118,114517,114518],{"class":128},"(self, ",[118,114520,583],{"class":124},[118,114522,114523],{"class":128},", seed: ",[118,114525,132],{"class":177},[118,114527,25114],{"class":124},[118,114529,38926],{"class":177},[118,114531,13569],{"class":124},[118,114533,38926],{"class":177},[118,114535,114536],{"class":128},", options: ",[118,114538,114539],{"class":177},"dict",[118,114541,25114],{"class":124},[118,114543,38926],{"class":177},[118,114545,13569],{"class":124},[118,114547,38926],{"class":177},[118,114549,30779],{"class":128},[118,114551,114552,114554,114557,114560,114562],{"class":120,"line":16638},[118,114553,30810],{"class":177},[118,114555,114556],{"class":128},"().reset(",[118,114558,114559],{"class":5221},"seed",[118,114561,174],{"class":124},[118,114563,114564],{"class":128},"seed)\n",[118,114566,114567,114570,114572,114575,114577],{"class":120,"line":16644},[118,114568,114569],{"class":128},"        mujoco.mj_resetData(",[118,114571,30816],{"class":177},[118,114573,114574],{"class":128},".model, ",[118,114576,30816],{"class":177},[118,114578,114579],{"class":128},".data)\n",[118,114581,114582],{"class":120,"line":16667},[118,114583,2404],{"emptyLinePlaceholder":45},[118,114585,114586,114588,114591,114593,114595,114598,114600,114602,114604,114606,114608,114610,114612,114614,114616,114618,114620],{"class":120,"line":16681},[118,114587,30838],{"class":177},[118,114589,114590],{"class":128},".data.qpos[:] ",[118,114592,174],{"class":124},[118,114594,38866],{"class":177},[118,114596,114597],{"class":128},".np_random.uniform(",[118,114599,113755],{"class":5221},[118,114601,113758],{"class":124},[118,114603,86203],{"class":177},[118,114605,12440],{"class":128},[118,114607,113765],{"class":5221},[118,114609,174],{"class":124},[118,114611,86203],{"class":177},[118,114613,12440],{"class":128},[118,114615,31489],{"class":5221},[118,114617,174],{"class":124},[118,114619,30816],{"class":177},[118,114621,114622],{"class":128},".model.nq)\n",[118,114624,114625,114627,114630,114632],{"class":120,"line":16701},[118,114626,30838],{"class":177},[118,114628,114629],{"class":128},".data.qvel[:] ",[118,114631,174],{"class":124},[118,114633,104754],{"class":177},[118,114635,114636,114639,114641,114643,114645],{"class":120,"line":16707},[118,114637,114638],{"class":128},"        mujoco.mj_forward(",[118,114640,30816],{"class":177},[118,114642,114574],{"class":128},[118,114644,30816],{"class":177},[118,114646,114579],{"class":128},[118,114648,114649],{"class":120,"line":16718},[118,114650,2404],{"emptyLinePlaceholder":45},[118,114652,114653,114655,114657,114659],{"class":120,"line":16741},[118,114654,30838],{"class":177},[118,114656,113699],{"class":128},[118,114658,174],{"class":124},[118,114660,47326],{"class":177},[118,114662,114663,114665,114667],{"class":120,"line":16763},[118,114664,14757],{"class":124},[118,114666,38866],{"class":177},[118,114668,114669],{"class":128},"._get_obs(), {}\n",[118,114671,114672],{"class":120,"line":16768},[118,114673,2404],{"emptyLinePlaceholder":45},[118,114675,114676,114678,114681],{"class":120,"line":16774},[118,114677,30794],{"class":124},[118,114679,114680],{"class":1967}," step",[118,114682,114683],{"class":128},"(self, action):\n",[118,114685,114686,114688,114690,114693,114695,114697],{"class":120,"line":16788},[118,114687,110215],{"class":128},[118,114689,174],{"class":124},[118,114691,114692],{"class":128}," np.asarray(action, ",[118,114694,93493],{"class":5221},[118,114696,174],{"class":124},[118,114698,113789],{"class":128},[118,114700,114701,114703,114705,114707,114709,114712,114714],{"class":120,"line":16801},[118,114702,110215],{"class":128},[118,114704,174],{"class":124},[118,114706,107440],{"class":128},[118,114708,30816],{"class":177},[118,114710,114711],{"class":128},".action_space.low, ",[118,114713,30816],{"class":177},[118,114715,114716],{"class":128},".action_space.high)\n",[118,114718,114719],{"class":120,"line":16806},[118,114720,2404],{"emptyLinePlaceholder":45},[118,114722,114723,114725,114728,114730],{"class":120,"line":16820},[118,114724,30838],{"class":177},[118,114726,114727],{"class":128},".data.ctrl[:] ",[118,114729,174],{"class":124},[118,114731,107463],{"class":128},[118,114733,114734,114736,114738,114740,114742,114744,114746],{"class":120,"line":16825},[118,114735,3407],{"class":124},[118,114737,101494],{"class":128},[118,114739,26036],{"class":124},[118,114741,32436],{"class":177},[118,114743,129],{"class":128},[118,114745,30816],{"class":177},[118,114747,114748],{"class":128},".frame_skip):\n",[118,114750,114751,114754,114756,114758,114760],{"class":120,"line":16831},[118,114752,114753],{"class":128},"            mujoco.mj_step(",[118,114755,30816],{"class":177},[118,114757,114574],{"class":128},[118,114759,30816],{"class":177},[118,114761,114579],{"class":128},[118,114763,114764],{"class":120,"line":16836},[118,114765,2404],{"emptyLinePlaceholder":45},[118,114767,114768,114770,114772,114774],{"class":120,"line":16850},[118,114769,30838],{"class":177},[118,114771,113699],{"class":128},[118,114773,9482],{"class":124},[118,114775,55692],{"class":177},[118,114777,114778],{"class":120,"line":16855},[118,114779,2404],{"emptyLinePlaceholder":45},[118,114781,114782,114784,114786,114788],{"class":120,"line":16860},[118,114783,110175],{"class":128},[118,114785,174],{"class":124},[118,114787,38866],{"class":177},[118,114789,114790],{"class":128},"._get_obs()\n",[118,114792,114793,114795,114797,114799],{"class":120,"line":16874},[118,114794,110280],{"class":128},[118,114796,174],{"class":124},[118,114798,38866],{"class":177},[118,114800,114801],{"class":128},"._get_reward()\n",[118,114803,114804],{"class":120,"line":16886},[118,114805,2404],{"emptyLinePlaceholder":45},[118,114807,114808,114810,114812,114814,114816,114818],{"class":120,"line":16891},[118,114809,112130],{"class":128},[118,114811,174],{"class":124},[118,114813,38866],{"class":177},[118,114815,114363],{"class":128},[118,114817,30816],{"class":177},[118,114819,114441],{"class":128},[118,114821,114822,114824,114826,114828,114830,114832],{"class":120,"line":16904},[118,114823,112143],{"class":128},[118,114825,174],{"class":124},[118,114827,38866],{"class":177},[118,114829,114363],{"class":128},[118,114831,30816],{"class":177},[118,114833,114456],{"class":128},[118,114835,114836,114838,114840,114842,114845,114847],{"class":120,"line":16909},[118,114837,114461],{"class":128},[118,114839,174],{"class":124},[118,114841,109790],{"class":177},[118,114843,114844],{"class":128},"(np.linalg.norm(tip ",[118,114846,660],{"class":124},[118,114848,114849],{"class":128}," target))\n",[118,114851,114852],{"class":120,"line":16914},[118,114853,2404],{"emptyLinePlaceholder":45},[118,114855,114856,114859,114861,114863,114865],{"class":120,"line":16919},[118,114857,114858],{"class":128},"        terminated ",[118,114860,174],{"class":124},[118,114862,113682],{"class":128},[118,114864,1038],{"class":124},[118,114866,113687],{"class":177},[118,114868,114869,114872,114874,114876,114878,114880,114882],{"class":120,"line":16932},[118,114870,114871],{"class":128},"        truncated ",[118,114873,174],{"class":124},[118,114875,38866],{"class":177},[118,114877,113699],{"class":128},[118,114879,1714],{"class":124},[118,114881,38866],{"class":177},[118,114883,113706],{"class":128},[118,114885,114886,114889,114891,114893,114896],{"class":120,"line":16937},[118,114887,114888],{"class":128},"        info ",[118,114890,174],{"class":124},[118,114892,4452],{"class":128},[118,114894,114895],{"class":233},"\"distance\"",[118,114897,114898],{"class":128},": dist}\n",[118,114900,114901,114903],{"class":120,"line":32626},[118,114902,14757],{"class":124},[118,114904,114905],{"class":128}," obs, reward, terminated, truncated, info\n",[118,114907,114908],{"class":120,"line":32632},[118,114909,2404],{"emptyLinePlaceholder":45},[118,114911,114912],{"class":120,"line":32638},[118,114913,2404],{"emptyLinePlaceholder":45},[118,114915,114916,114918,114920,114922,114924],{"class":120,"line":32644},[118,114917,31940],{"class":124},[118,114919,1977],{"class":1967},[118,114921,101391],{"class":128},[118,114923,95679],{"class":177},[118,114925,3743],{"class":128},[118,114927,114928,114931,114933],{"class":120,"line":32650},[118,114929,114930],{"class":128},"    env ",[118,114932,174],{"class":124},[118,114934,114935],{"class":128}," ReacherEnv()\n",[118,114937,114938,114941,114943,114946,114948,114950,114952],{"class":120,"line":32661},[118,114939,114940],{"class":128},"    obs, info ",[118,114942,174],{"class":124},[118,114944,114945],{"class":128}," env.reset(",[118,114947,114559],{"class":5221},[118,114949,174],{"class":124},[118,114951,320],{"class":177},[118,114953,135],{"class":128},[118,114955,114956,114958,114960,114963],{"class":120,"line":32667},[118,114957,31292],{"class":177},[118,114959,129],{"class":128},[118,114961,114962],{"class":233},"\"initial obs shape:\"",[118,114964,114965],{"class":128},", obs.shape)\n",[118,114967,114968,114970,114972,114975],{"class":120,"line":32687},[118,114969,31292],{"class":177},[118,114971,129],{"class":128},[118,114973,114974],{"class":233},"\"initial info:\"",[118,114976,114977],{"class":128},", info)\n",[118,114979,114980],{"class":120,"line":32693},[118,114981,2404],{"emptyLinePlaceholder":45},[118,114983,114984,114986,114988],{"class":120,"line":32704},[118,114985,110146],{"class":128},[118,114987,174],{"class":124},[118,114989,104754],{"class":177},[118,114991,114992,114994,114996,114998,115000,115002,115004],{"class":120,"line":32710},[118,114993,3205],{"class":124},[118,114995,31609],{"class":128},[118,114997,26036],{"class":124},[118,114999,32436],{"class":177},[118,115001,129],{"class":128},[118,115003,828],{"class":177},[118,115005,30779],{"class":128},[118,115007,115008,115010,115012],{"class":120,"line":32716},[118,115009,110215],{"class":128},[118,115011,174],{"class":124},[118,115013,115014],{"class":128}," env.action_space.sample()\n",[118,115016,115017,115020,115022],{"class":120,"line":32722},[118,115018,115019],{"class":128},"        obs, reward, terminated, truncated, info ",[118,115021,174],{"class":124},[118,115023,113408],{"class":128},[118,115025,115026,115028,115030],{"class":120,"line":32728},[118,115027,110290],{"class":128},[118,115029,9482],{"class":124},[118,115031,110295],{"class":128},[118,115033,115034,115036,115038,115040,115042,115045,115047,115049,115052,115054,115056,115059,115061,115063,115066,115068,115070,115072],{"class":120,"line":32734},[118,115035,32444],{"class":177},[118,115037,129],{"class":128},[118,115039,110324],{"class":233},[118,115041,110327],{"class":128},[118,115043,115044],{"class":233},"\"reward:\"",[118,115046,12440],{"class":128},[118,115048,32011],{"class":177},[118,115050,115051],{"class":128},"(reward, ",[118,115053,200],{"class":177},[118,115055,110338],{"class":128},[118,115057,115058],{"class":233},"\"distance:\"",[118,115060,12440],{"class":128},[118,115062,32011],{"class":177},[118,115064,115065],{"class":128},"(info[",[118,115067,114895],{"class":233},[118,115069,112195],{"class":128},[118,115071,200],{"class":177},[118,115073,30490],{"class":128},[118,115075,115076,115078,115081,115084],{"class":120,"line":32740},[118,115077,2501],{"class":124},[118,115079,115080],{"class":128}," terminated ",[118,115082,115083],{"class":124},"or",[118,115085,115086],{"class":128}," truncated:\n",[118,115088,115089],{"class":120,"line":32746},[118,115090,115091],{"class":124},"            break\n",[118,115093,115094],{"class":120,"line":32766},[118,115095,2404],{"emptyLinePlaceholder":45},[118,115097,115098,115100,115102,115104,115106,115108,115110,115112],{"class":120,"line":32772},[118,115099,31292],{"class":177},[118,115101,129],{"class":128},[118,115103,110369],{"class":233},[118,115105,12440],{"class":128},[118,115107,32011],{"class":177},[118,115109,110376],{"class":128},[118,115111,200],{"class":177},[118,115113,30490],{"class":128},[118,115115,115116],{"class":120,"line":32788},[118,115117,2404],{"emptyLinePlaceholder":45},[118,115119,115120],{"class":120,"line":32794},[118,115121,2404],{"emptyLinePlaceholder":45},[118,115123,115124,115126,115128,115130,115132],{"class":120,"line":32808},[118,115125,1535],{"class":124},[118,115127,31213],{"class":177},[118,115129,101552],{"class":124},[118,115131,101555],{"class":233},[118,115133,3743],{"class":128},[118,115135,115136],{"class":120,"line":32814},[118,115137,101562],{"class":128},[15,115139,103563],{},[109,115141,115143],{"className":23827,"code":115142,"language":23829,"meta":39,"style":39},"touch ch8_gym_env.py\n",[115,115144,115145],{"__ignoreMap":39},[118,115146,115147,115149],{"class":120,"line":121},[118,115148,101276],{"class":1967},[118,115150,115151],{"class":233}," ch8_gym_env.py\n",[15,115153,110437],{},[109,115155,115157],{"className":23827,"code":115156,"language":23829,"meta":39,"style":39},"python ch8_gym_env.py\n",[115,115158,115159],{"__ignoreMap":39},[118,115160,115161,115163],{"class":120,"line":121},[118,115162,30373],{"class":1967},[118,115164,115151],{"class":233},[89,115166,101565],{"id":101565},[15,115168,115169],{},"继承 Gymnasium 环境：",[109,115171,115173],{"className":30371,"code":115172,"language":30373,"meta":39,"style":39},"class ReacherEnv(gym.Env):\n",[115,115174,115175],{"__ignoreMap":39},[118,115176,115177,115179,115181,115183,115185,115187,115189],{"class":120,"line":121},[118,115178,14699],{"class":124},[118,115180,114050],{"class":1967},[118,115182,129],{"class":128},[118,115184,113533],{"class":1967},[118,115186,686],{"class":128},[118,115188,114059],{"class":1967},[118,115190,30779],{"class":128},[15,115192,115193],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[15,115195,115196],{},"初始化模型：",[109,115198,115200],{"className":30371,"code":115199,"language":30373,"meta":39,"style":39},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[115,115201,115202,115216],{"__ignoreMap":39},[118,115203,115204,115206,115208,115210,115212,115214],{"class":120,"line":121},[118,115205,30816],{"class":177},[118,115207,114110],{"class":128},[118,115209,174],{"class":124},[118,115211,101405],{"class":128},[118,115213,101307],{"class":177},[118,115215,135],{"class":128},[118,115217,115218,115220,115222,115224,115226,115228],{"class":120,"line":40},[118,115219,30816],{"class":177},[118,115221,114125],{"class":128},[118,115223,174],{"class":124},[118,115225,114130],{"class":128},[118,115227,30816],{"class":177},[118,115229,114135],{"class":128},[15,115231,115232,115233,115235],{},"这和前面章节一样，只是现在放到了类的 ",[115,115234,30822],{}," 里。",[15,115237,115238],{},"缓存 site ID：",[109,115240,115242],{"className":30371,"code":115241,"language":30373,"meta":39,"style":39},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[115,115243,115244,115258],{"__ignoreMap":39},[118,115245,115246,115248,115250,115252,115254,115256],{"class":120,"line":121},[118,115247,30816],{"class":177},[118,115249,114146],{"class":128},[118,115251,174],{"class":124},[118,115253,114151],{"class":128},[118,115255,89547],{"class":177},[118,115257,135],{"class":128},[118,115259,115260,115262,115264,115266,115268,115270],{"class":120,"line":40},[118,115261,30816],{"class":177},[118,115263,114167],{"class":128},[118,115265,174],{"class":124},[118,115267,114151],{"class":128},[118,115269,89547],{"class":177},[118,115271,135],{"class":128},[15,115273,115274],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[15,115276,115277],{},"reset：",[109,115279,115281],{"className":30371,"code":115280,"language":30373,"meta":39,"style":39},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[115,115282,115283],{"__ignoreMap":39},[118,115284,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303,115305,115307,115309,115311,115313,115315,115317],{"class":120,"line":121},[118,115286,31940],{"class":124},[118,115288,114515],{"class":1967},[118,115290,114518],{"class":128},[118,115292,583],{"class":124},[118,115294,114523],{"class":128},[118,115296,132],{"class":177},[118,115298,25114],{"class":124},[118,115300,38926],{"class":177},[118,115302,13569],{"class":124},[118,115304,38926],{"class":177},[118,115306,114536],{"class":128},[118,115308,114539],{"class":177},[118,115310,25114],{"class":124},[118,115312,38926],{"class":177},[118,115314,13569],{"class":124},[118,115316,38926],{"class":177},[118,115318,30779],{"class":128},[15,115320,115321,115323],{},[115,115322,70049],{}," 做四件事：",[72,115325,115326,115329,115332,115335],{},[75,115327,115328],{},"设置随机种子。",[75,115330,115331],{},"重置 MuJoCo data。",[75,115333,115334],{},"随机初始化关节角。",[75,115336,115337],{},"返回初始观测和 info。",[15,115339,115340],{},"step：",[109,115342,115344],{"className":30371,"code":115343,"language":30373,"meta":39,"style":39},"def step(self, action):\n",[115,115345,115346],{"__ignoreMap":39},[118,115347,115348,115350,115352],{"class":120,"line":121},[118,115349,31940],{"class":124},[118,115351,114680],{"class":1967},[118,115353,114683],{"class":128},[15,115355,115356,115358],{},[115,115357,107127],{}," 做六件事：",[72,115360,115361,115364,115370,115373,115376,115379],{},[75,115362,115363],{},"检查并裁剪 action。",[75,115365,115366,115367,28378],{},"写入 ",[115,115368,115369],{},"self.data.ctrl",[75,115371,115372],{},"连续推进若干个 MuJoCo 物理步。",[75,115374,115375],{},"计算新观测。",[75,115377,115378],{},"计算奖励和结束条件。",[75,115380,115381],{},"返回 Gymnasium 标准五元组。",[89,115383,101701],{"id":101701},[109,115385,115387],{"className":30371,"code":115386,"language":30373,"meta":39,"style":39},"import gymnasium as gym\n",[115,115388,115389],{"__ignoreMap":39},[118,115390,115391,115393,115395,115397],{"class":120,"line":121},[118,115392,30385],{"class":124},[118,115394,113888],{"class":128},[118,115396,31376],{"class":124},[118,115398,113893],{"class":128},[15,115400,115401,115402,115404,115405,115408],{},"导入 Gymnasium，并起别名 ",[115,115403,113533],{},"。后面写 ",[115,115406,115407],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[109,115410,115412],{"className":30371,"code":115411,"language":30373,"meta":39,"style":39},"from gymnasium import spaces\n",[115,115413,115414],{"__ignoreMap":39},[118,115415,115416,115418,115420,115422],{"class":120,"line":121},[118,115417,30730],{"class":124},[118,115419,113888],{"class":128},[118,115421,30385],{"class":124},[118,115423,113920],{"class":128},[15,115425,115426,115427,115430],{},"导入空间定义工具。",[115,115428,115429],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[109,115432,115433],{"className":30371,"code":115172,"language":30373,"meta":39,"style":39},[115,115434,115435],{"__ignoreMap":39},[118,115436,115437,115439,115441,115443,115445,115447,115449],{"class":120,"line":121},[118,115438,14699],{"class":124},[118,115440,114050],{"class":1967},[118,115442,129],{"class":128},[118,115444,113533],{"class":1967},[118,115446,686],{"class":128},[118,115448,114059],{"class":1967},[118,115450,30779],{"class":128},[15,115452,115453,115454,115457,115458,115460,115461,101011,115463,115465],{},"定义一个类，名字叫 ",[115,115455,115456],{},"ReacherEnv","。括号里的 ",[115,115459,115407],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[115,115462,70049],{},[115,115464,107127],{}," 这两个核心方法。",[109,115467,115469],{"className":30371,"code":115468,"language":30373,"meta":39,"style":39},"metadata = {\"render_modes\": []}\n",[115,115470,115471],{"__ignoreMap":39},[118,115472,115473,115476,115478,115480,115482],{"class":120,"line":121},[118,115474,115475],{"class":128},"metadata ",[118,115477,174],{"class":124},[118,115479,4452],{"class":128},[118,115481,114073],{"class":233},[118,115483,114076],{"class":128},[15,115485,115486],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[109,115488,115490],{"className":30371,"code":115489,"language":30373,"meta":39,"style":39},"def __init__(self) -> None:\n",[115,115491,115492],{"__ignoreMap":39},[118,115493,115494,115496,115498,115500,115502],{"class":120,"line":121},[118,115495,31940],{"class":124},[118,115497,30797],{"class":177},[118,115499,114089],{"class":128},[118,115501,95679],{"class":177},[118,115503,3743],{"class":128},[15,115505,115506,115508,115509,28378],{},[115,115507,30822],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[115,115510,115511],{},"env = ReacherEnv()",[109,115513,115515],{"className":30371,"code":115514,"language":30373,"meta":39,"style":39},"super().__init__()\n",[115,115516,115517],{"__ignoreMap":39},[118,115518,115519,115522,115524,115526],{"class":120,"line":121},[118,115520,115521],{"class":177},"super",[118,115523,17266],{"class":128},[118,115525,30822],{"class":177},[118,115527,1980],{"class":128},[15,115529,115530,115531,115533],{},"调用父类 ",[115,115532,115407],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[109,115535,115536],{"className":30371,"code":115199,"language":30373,"meta":39,"style":39},[115,115537,115538,115552],{"__ignoreMap":39},[118,115539,115540,115542,115544,115546,115548,115550],{"class":120,"line":121},[118,115541,30816],{"class":177},[118,115543,114110],{"class":128},[118,115545,174],{"class":124},[118,115547,101405],{"class":128},[118,115549,101307],{"class":177},[118,115551,135],{"class":128},[118,115553,115554,115556,115558,115560,115562,115564],{"class":120,"line":40},[118,115555,30816],{"class":177},[118,115557,114125],{"class":128},[118,115559,174],{"class":124},[118,115561,114130],{"class":128},[118,115563,30816],{"class":177},[118,115565,114135],{"class":128},[15,115567,115568,115569,115571,115572,101011,115575,115578],{},"把 MuJoCo 模型和状态保存到 ",[115,115570,30816],{}," 上。",[115,115573,115574],{},"self.model",[115,115576,115577],{},"self.data"," 表示这个环境对象自己的模型和状态。",[109,115580,115581],{"className":30371,"code":115241,"language":30373,"meta":39,"style":39},[115,115582,115583,115597],{"__ignoreMap":39},[118,115584,115585,115587,115589,115591,115593,115595],{"class":120,"line":121},[118,115586,30816],{"class":177},[118,115588,114146],{"class":128},[118,115590,174],{"class":124},[118,115592,114151],{"class":128},[118,115594,89547],{"class":177},[118,115596,135],{"class":128},[118,115598,115599,115601,115603,115605,115607,115609],{"class":120,"line":40},[118,115600,30816],{"class":177},[118,115602,114167],{"class":128},[118,115604,174],{"class":124},[118,115606,114151],{"class":128},[118,115608,89547],{"class":177},[118,115610,135],{"class":128},[15,115612,115613,115614,101011,115617,115620],{},"提前查好 tip 和 target 的 site ID。这样 ",[115,115615,115616],{},"_get_obs",[115,115618,115619],{},"_get_reward"," 里就不用每次按名字查找。",[109,115622,115624],{"className":30371,"code":115623,"language":30373,"meta":39,"style":39},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[115,115625,115626,115636,115646],{"__ignoreMap":39},[118,115627,115628,115630,115632,115634],{"class":120,"line":121},[118,115629,30816],{"class":177},[118,115631,113860],{"class":128},[118,115633,174],{"class":124},[118,115635,54420],{"class":177},[118,115637,115638,115640,115642,115644],{"class":120,"line":40},[118,115639,30816],{"class":177},[118,115641,114239],{"class":128},[118,115643,174],{"class":124},[118,115645,114244],{"class":177},[118,115647,115648,115650,115652,115654],{"class":120,"line":1183},[118,115649,30816],{"class":177},[118,115651,113699],{"class":128},[118,115653,174],{"class":124},[118,115655,47326],{"class":177},[15,115657,115658,115661,115662,115665,115666,115669],{},[115,115659,115660],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[115,115663,115664],{},"max_steps"," 是一个 episode 最多运行多少步。",[115,115667,115668],{},"steps"," 记录当前 episode 已经走了多少步。",[109,115671,115672],{"className":30371,"code":113738,"language":30373,"meta":39,"style":39},[115,115673,115674],{"__ignoreMap":39},[118,115675,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702,115704,115706,115708,115710,115712,115714],{"class":120,"line":121},[118,115677,30816],{"class":177},[118,115679,113747],{"class":128},[118,115681,174],{"class":124},[118,115683,113752],{"class":128},[118,115685,113755],{"class":5221},[118,115687,113758],{"class":124},[118,115689,102396],{"class":177},[118,115691,12440],{"class":128},[118,115693,113765],{"class":5221},[118,115695,174],{"class":124},[118,115697,102396],{"class":177},[118,115699,12440],{"class":128},[118,115701,95956],{"class":5221},[118,115703,174],{"class":124},[118,115705,129],{"class":128},[118,115707,206],{"class":177},[118,115709,113782],{"class":128},[118,115711,93493],{"class":5221},[118,115713,174],{"class":124},[118,115715,113789],{"class":128},[15,115717,115718,115719,115722,115723,101011,115726,115729],{},"定义动作空间。",[115,115720,115721],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[115,115724,115725],{},"low=-1.0",[115,115727,115728],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[109,115731,115732],{"className":30371,"code":113799,"language":30373,"meta":39,"style":39},[115,115733,115734],{"__ignoreMap":39},[118,115735,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770],{"class":120,"line":121},[118,115737,30816],{"class":177},[118,115739,113808],{"class":128},[118,115741,174],{"class":124},[118,115743,113752],{"class":128},[118,115745,113755],{"class":5221},[118,115747,113758],{"class":124},[118,115749,113819],{"class":128},[118,115751,113765],{"class":5221},[118,115753,174],{"class":124},[118,115755,113819],{"class":128},[118,115757,95956],{"class":5221},[118,115759,174],{"class":124},[118,115761,129],{"class":128},[118,115763,574],{"class":177},[118,115765,113782],{"class":128},[118,115767,93493],{"class":5221},[118,115769,174],{"class":124},[118,115771,113789],{"class":128},[15,115773,115774,115775,115778,115779,115782],{},"定义观测空间。",[115,115776,115777],{},"shape=(10,)"," 表示观测是 10 个数。",[115,115780,115781],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[109,115784,115786],{"className":30371,"code":115785,"language":30373,"meta":39,"style":39},"def _get_obs(self) -> np.ndarray:\n",[115,115787,115788],{"__ignoreMap":39},[118,115789,115790,115792,115794],{"class":120,"line":121},[118,115791,31940],{"class":124},[118,115793,114349],{"class":1967},[118,115795,114352],{"class":128},[15,115797,115798,115799,115801],{},"定义内部函数，用来生成观测。函数名前面的 ",[115,115800,1120],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[109,115803,115805],{"className":30371,"code":115804,"language":30373,"meta":39,"style":39},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[115,115806,115807,115821],{"__ignoreMap":39},[118,115808,115809,115811,115813,115815,115817,115819],{"class":120,"line":121},[118,115810,111561],{"class":128},[118,115812,174],{"class":124},[118,115814,38866],{"class":177},[118,115816,114363],{"class":128},[118,115818,30816],{"class":177},[118,115820,114368],{"class":128},[118,115822,115823,115825,115827,115829,115831,115833],{"class":120,"line":40},[118,115824,111571],{"class":128},[118,115826,174],{"class":124},[118,115828,38866],{"class":177},[118,115830,114363],{"class":128},[118,115832,30816],{"class":177},[118,115834,114383],{"class":128},[15,115836,115837],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[109,115839,115841],{"className":30371,"code":115840,"language":30373,"meta":39,"style":39},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[115,115842,115843,115859],{"__ignoreMap":39},[118,115844,115845,115847,115849,115851,115853,115855,115857],{"class":120,"line":121},[118,115846,110847],{"class":128},[118,115848,174],{"class":124},[118,115850,114392],{"class":128},[118,115852,30816],{"class":177},[118,115854,114397],{"class":128},[118,115856,30816],{"class":177},[118,115858,114402],{"class":128},[118,115860,115861,115863],{"class":120,"line":40},[118,115862,17051],{"class":124},[118,115864,114409],{"class":128},[15,115866,115867,115868,115871,115872,115874],{},"拼接观测，并转换成 ",[115,115869,115870],{},"float32","。很多强化学习库默认使用 ",[115,115873,115870],{},"，所以这里主动转换。",[109,115876,115877],{"className":30371,"code":115280,"language":30373,"meta":39,"style":39},[115,115878,115879],{"__ignoreMap":39},[118,115880,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905,115907,115909,115911,115913],{"class":120,"line":121},[118,115882,31940],{"class":124},[118,115884,114515],{"class":1967},[118,115886,114518],{"class":128},[118,115888,583],{"class":124},[118,115890,114523],{"class":128},[118,115892,132],{"class":177},[118,115894,25114],{"class":124},[118,115896,38926],{"class":177},[118,115898,13569],{"class":124},[118,115900,38926],{"class":177},[118,115902,114536],{"class":128},[118,115904,114539],{"class":177},[118,115906,25114],{"class":124},[118,115908,38926],{"class":177},[118,115910,13569],{"class":124},[118,115912,38926],{"class":177},[118,115914,30779],{"class":128},[15,115916,115917,115918,115920,115921,115924],{},"定义 reset。",[115,115919,114559],{}," 用来控制随机数，保证实验可以复现。",[115,115922,115923],{},"options"," 用来接收额外配置，本章暂时不用。",[109,115926,115928],{"className":30371,"code":115927,"language":30373,"meta":39,"style":39},"super().reset(seed=seed)\n",[115,115929,115930],{"__ignoreMap":39},[118,115931,115932,115934,115936,115938,115940],{"class":120,"line":121},[118,115933,115521],{"class":177},[118,115935,114556],{"class":128},[118,115937,114559],{"class":5221},[118,115939,174],{"class":124},[118,115941,114564],{"class":128},[15,115943,115944,115945,115948],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[115,115946,115947],{},"self.np_random"," 生成可复现的随机数。",[109,115950,115952],{"className":30371,"code":115951,"language":30373,"meta":39,"style":39},"mujoco.mj_resetData(self.model, self.data)\n",[115,115953,115954],{"__ignoreMap":39},[118,115955,115956,115959,115961,115963,115965],{"class":120,"line":121},[118,115957,115958],{"class":128},"mujoco.mj_resetData(",[118,115960,30816],{"class":177},[118,115962,114574],{"class":128},[118,115964,30816],{"class":177},[118,115966,114579],{"class":128},[15,115968,115969],{},"把 MuJoCo 状态重置到默认状态。",[109,115971,115973],{"className":30371,"code":115972,"language":30373,"meta":39,"style":39},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[115,115974,115975],{"__ignoreMap":39},[118,115976,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997,115999,116001,116003,116005,116007,116009],{"class":120,"line":121},[118,115978,30816],{"class":177},[118,115980,114590],{"class":128},[118,115982,174],{"class":124},[118,115984,38866],{"class":177},[118,115986,114597],{"class":128},[118,115988,113755],{"class":5221},[118,115990,113758],{"class":124},[118,115992,86203],{"class":177},[118,115994,12440],{"class":128},[118,115996,113765],{"class":5221},[118,115998,174],{"class":124},[118,116000,86203],{"class":177},[118,116002,12440],{"class":128},[118,116004,31489],{"class":5221},[118,116006,174],{"class":124},[118,116008,30816],{"class":177},[118,116010,114622],{"class":128},[15,116012,115334,116013,116016,116017,116020,116021,116023],{},[115,116014,116015],{},"[:]"," 表示修改整个数组。",[115,116018,116019],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[115,116022,102143],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[109,116025,116027],{"className":30371,"code":116026,"language":30373,"meta":39,"style":39},"self.data.qvel[:] = 0.0\n",[115,116028,116029],{"__ignoreMap":39},[118,116030,116031,116033,116035,116037],{"class":120,"line":121},[118,116032,30816],{"class":177},[118,116034,114629],{"class":128},[118,116036,174],{"class":124},[118,116038,104754],{"class":177},[15,116040,116041],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[109,116043,116045],{"className":30371,"code":116044,"language":30373,"meta":39,"style":39},"self.steps = 0\nreturn self._get_obs(), {}\n",[115,116046,116047,116057],{"__ignoreMap":39},[118,116048,116049,116051,116053,116055],{"class":120,"line":121},[118,116050,30816],{"class":177},[118,116052,113699],{"class":128},[118,116054,174],{"class":124},[118,116056,47326],{"class":177},[118,116058,116059,116061,116063],{"class":120,"line":40},[118,116060,17051],{"class":124},[118,116062,38866],{"class":177},[118,116064,114669],{"class":128},[15,116066,116067],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[109,116069,116070],{"className":30371,"code":115343,"language":30373,"meta":39,"style":39},[115,116071,116072],{"__ignoreMap":39},[118,116073,116074,116076,116078],{"class":120,"line":121},[118,116075,31940],{"class":124},[118,116077,114680],{"class":1967},[118,116079,114683],{"class":128},[15,116081,116082],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[109,116084,116086],{"className":30371,"code":116085,"language":30373,"meta":39,"style":39},"action = np.asarray(action, dtype=np.float32)\n",[115,116087,116088],{"__ignoreMap":39},[118,116089,116090,116092,116094,116096,116098,116100],{"class":120,"line":121},[118,116091,107435],{"class":128},[118,116093,174],{"class":124},[118,116095,114692],{"class":128},[118,116097,93493],{"class":5221},[118,116099,174],{"class":124},[118,116101,113789],{"class":128},[15,116103,116104,116105,28378],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[115,116106,115870],{},[109,116108,116110],{"className":30371,"code":116109,"language":30373,"meta":39,"style":39},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[115,116111,116112],{"__ignoreMap":39},[118,116113,116114,116116,116118,116120,116122,116124,116126],{"class":120,"line":121},[118,116115,107435],{"class":128},[118,116117,174],{"class":124},[118,116119,107440],{"class":128},[118,116121,30816],{"class":177},[118,116123,114711],{"class":128},[118,116125,30816],{"class":177},[118,116127,114716],{"class":128},[15,116129,116130],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[109,116132,116134],{"className":30371,"code":116133,"language":30373,"meta":39,"style":39},"self.data.ctrl[:] = action\n",[115,116135,116136],{"__ignoreMap":39},[118,116137,116138,116140,116142,116144],{"class":120,"line":121},[118,116139,30816],{"class":177},[118,116141,114727],{"class":128},[118,116143,174],{"class":124},[118,116145,107463],{"class":128},[15,116147,116148],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[109,116150,116152],{"className":30371,"code":116151,"language":30373,"meta":39,"style":39},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[115,116153,116154,116170],{"__ignoreMap":39},[118,116155,116156,116158,116160,116162,116164,116166,116168],{"class":120,"line":121},[118,116157,3029],{"class":124},[118,116159,101494],{"class":128},[118,116161,26036],{"class":124},[118,116163,32436],{"class":177},[118,116165,129],{"class":128},[118,116167,30816],{"class":177},[118,116169,114748],{"class":128},[118,116171,116172,116175,116177,116179,116181],{"class":120,"line":40},[118,116173,116174],{"class":128},"    mujoco.mj_step(",[118,116176,30816],{"class":177},[118,116178,114574],{"class":128},[118,116180,30816],{"class":177},[118,116182,114579],{"class":128},[15,116184,116185,116186,116189,116190,116192,116193,28378],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[115,116187,116188],{},"frame_skip=5","，所以外部调用一次 ",[115,116191,113870],{},"，内部实际执行 5 次 ",[115,116194,101208],{},[109,116196,116198],{"className":30371,"code":116197,"language":30373,"meta":39,"style":39},"self.steps += 1\n",[115,116199,116200],{"__ignoreMap":39},[118,116201,116202,116204,116206,116208],{"class":120,"line":121},[118,116203,30816],{"class":177},[118,116205,113699],{"class":128},[118,116207,9482],{"class":124},[118,116209,55692],{"class":177},[15,116211,116212],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[109,116214,116216],{"className":30371,"code":116215,"language":30373,"meta":39,"style":39},"obs = self._get_obs()\nreward = self._get_reward()\n",[115,116217,116218,116228],{"__ignoreMap":39},[118,116219,116220,116222,116224,116226],{"class":120,"line":121},[118,116221,110847],{"class":128},[118,116223,174],{"class":124},[118,116225,38866],{"class":177},[118,116227,114790],{"class":128},[118,116229,116230,116232,116234,116236],{"class":120,"line":40},[118,116231,110998],{"class":128},[118,116233,174],{"class":124},[118,116235,38866],{"class":177},[118,116237,114801],{"class":128},[15,116239,116240],{},"计算新的观测和奖励。",[109,116242,116244],{"className":30371,"code":116243,"language":30373,"meta":39,"style":39},"dist = float(np.linalg.norm(tip - target))\n",[115,116245,116246],{"__ignoreMap":39},[118,116247,116248,116250,116252,116254,116256,116258],{"class":120,"line":121},[118,116249,111589],{"class":128},[118,116251,174],{"class":124},[118,116253,109790],{"class":177},[118,116255,114844],{"class":128},[118,116257,660],{"class":124},[118,116259,114849],{"class":128},[15,116261,116262],{},"计算末端到目标的距离，并转换成 Python float。",[109,116264,116265],{"className":30371,"code":113670,"language":30373,"meta":39,"style":39},[115,116266,116267,116279],{"__ignoreMap":39},[118,116268,116269,116271,116273,116275,116277],{"class":120,"line":121},[118,116270,113677],{"class":128},[118,116272,174],{"class":124},[118,116274,113682],{"class":128},[118,116276,1038],{"class":124},[118,116278,113687],{"class":177},[118,116280,116281,116283,116285,116287,116289,116291,116293],{"class":120,"line":40},[118,116282,113692],{"class":128},[118,116284,174],{"class":124},[118,116286,38866],{"class":177},[118,116288,113699],{"class":128},[118,116290,1714],{"class":124},[118,116292,38866],{"class":177},[118,116294,113706],{"class":128},[15,116296,116297],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[109,116299,116301],{"className":30371,"code":116300,"language":30373,"meta":39,"style":39},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[115,116302,116303,116316],{"__ignoreMap":39},[118,116304,116305,116308,116310,116312,116314],{"class":120,"line":121},[118,116306,116307],{"class":128},"info ",[118,116309,174],{"class":124},[118,116311,4452],{"class":128},[118,116313,114895],{"class":233},[118,116315,114898],{"class":128},[118,116317,116318,116320],{"class":120,"line":40},[118,116319,17051],{"class":124},[118,116321,114905],{"class":128},[15,116323,116324,116327],{},[115,116325,116326],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[109,116329,116331],{"className":30371,"code":116330,"language":30373,"meta":39,"style":39},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[115,116332,116333,116342],{"__ignoreMap":39},[118,116334,116335,116338,116340],{"class":120,"line":121},[118,116336,116337],{"class":128},"env ",[118,116339,174],{"class":124},[118,116341,114935],{"class":128},[118,116343,116344,116346,116348,116350,116352,116354,116356],{"class":120,"line":40},[118,116345,113393],{"class":128},[118,116347,174],{"class":124},[118,116349,114945],{"class":128},[118,116351,114559],{"class":5221},[118,116353,174],{"class":124},[118,116355,320],{"class":177},[118,116357,135],{"class":128},[15,116359,116360,116361,116364],{},"创建环境并重置。",[115,116362,116363],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[109,116366,116368],{"className":30371,"code":116367,"language":30373,"meta":39,"style":39},"action = env.action_space.sample()\n",[115,116369,116370],{"__ignoreMap":39},[118,116371,116372,116374,116376],{"class":120,"line":121},[118,116373,107435],{"class":128},[118,116375,174],{"class":124},[118,116377,115014],{"class":128},[15,116379,116380],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[60,116382,102309],{"id":102308},[15,116384,105477],{},[109,116386,116389],{"className":116387,"code":116388,"language":5192,"meta":39},[5190],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[115,116390,116388],{"__ignoreMap":39},[15,116392,116393],{},"这个环境已经具备强化学习环境的基本结构。",[15,116395,116396],{},"主函数里使用随机动作：",[109,116398,116399],{"className":30371,"code":116367,"language":30373,"meta":39,"style":39},[115,116400,116401],{"__ignoreMap":39},[118,116402,116403,116405,116407],{"class":120,"line":121},[118,116404,107435],{"class":128},[118,116406,174],{"class":124},[118,116408,115014],{"class":128},[15,116410,116411],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[60,116413,102341],{"id":102340},[72,116415,116416,116419,116425,116434,116443,116452,116458],{},[75,116417,116418],{},"运行程序。",[75,116420,116421,116422,28378],{},"确认 ",[115,116423,116424],{},"obs.shape == (10,)",[75,116426,111174,116427,116430,116431,28378],{},[115,116428,116429],{},"env.action_space","，应类似 ",[115,116432,116433],{},"Box(-1.0, 1.0, (2,), float32)",[75,116435,105578,116436,116439,116440,28378],{},[115,116437,116438],{},"self.max_steps = 10","，确认环境会更快 ",[115,116441,116442],{},"truncated=True",[75,116444,102404,116445,102407,116448,116451],{},[115,116446,116447],{},"terminated = dist \u003C 0.05",[115,116449,116450],{},"dist \u003C 0.2","，观察是否更容易结束。",[75,116453,102404,116454,116457],{},[115,116455,116456],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[75,116459,116460,116461,116463,116464,116467],{},"在 ",[115,116462,116326],{}," 里加入 ",[115,116465,116466],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[60,116469,102446],{"id":102445},[89,116471,116473],{"id":116472},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[15,116475,116476,116477,116479],{},"Gymnasium 的 ",[115,116478,107127],{}," 返回 5 个值:",[109,116481,116483],{"className":30371,"code":116482,"language":30373,"meta":39,"style":39},"obs, reward, terminated, truncated, info\n",[115,116484,116485],{"__ignoreMap":39},[118,116486,116487],{"class":120,"line":121},[118,116488,116482],{"class":128},[15,116490,116491],{},"不是旧 Gym 的 4 个值。",[89,116493,116495,116498],{"id":116494},"datactrl-action-维度错误",[115,116496,116497],{},"data.ctrl[:] = action"," 维度错误",[15,116500,102516],{},[109,116502,116504],{"className":30371,"code":116503,"language":30373,"meta":39,"style":39},"print(self.model.nu)\nprint(action.shape)\n",[115,116505,116506,116517],{"__ignoreMap":39},[118,116507,116508,116510,116512,116514],{"class":120,"line":121},[118,116509,30408],{"class":177},[118,116511,129],{"class":128},[118,116513,30816],{"class":177},[118,116515,116516],{"class":128},".model.nu)\n",[118,116518,116519,116521],{"class":120,"line":40},[118,116520,30408],{"class":177},[118,116522,116523],{"class":128},"(action.shape)\n",[15,116525,116526],{},"两者必须匹配。",[89,116528,116530],{"id":116529},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[15,116532,102455],{},[109,116534,116536],{"className":30371,"code":116535,"language":30373,"meta":39,"style":39},"mujoco.mj_forward(self.model, self.data)\n",[115,116537,116538],{"__ignoreMap":39},[118,116539,116540,116543,116545,116547,116549],{"class":120,"line":121},[118,116541,116542],{"class":128},"mujoco.mj_forward(",[118,116544,30816],{"class":177},[118,116546,114574],{"class":128},[118,116548,30816],{"class":177},[118,116550,114579],{"class":128},[89,116552,116554,116556],{"id":116553},"observation_space-维度和-obs-不一致",[115,116555,113593],{}," 维度和 obs 不一致",[15,116558,102568],{},[109,116560,116562],{"className":30371,"code":116561,"language":30373,"meta":39,"style":39},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[115,116563,116564,116574,116581],{"__ignoreMap":39},[118,116565,116566,116568,116570,116572],{"class":120,"line":121},[118,116567,110847],{"class":128},[118,116569,174],{"class":124},[118,116571,38866],{"class":177},[118,116573,114790],{"class":128},[118,116575,116576,116578],{"class":120,"line":40},[118,116577,30408],{"class":177},[118,116579,116580],{"class":128},"(obs.shape)\n",[118,116582,116583,116585,116587,116589],{"class":120,"line":1183},[118,116584,30408],{"class":177},[118,116586,129],{"class":128},[118,116588,30816],{"class":177},[118,116590,116591],{"class":128},".observation_space.shape)\n",[15,116593,116594],{},"两者必须一致。本章观测是：",[109,116596,116599],{"className":116597,"code":116598,"language":5192,"meta":39},[5190],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[115,116600,116598],{"__ignoreMap":39},[89,116602,116604],{"id":116603},"action-超过范围","action 超过范围",[15,116606,116607],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[109,116609,116610],{"className":30371,"code":116109,"language":30373,"meta":39,"style":39},[115,116611,116612],{"__ignoreMap":39},[118,116613,116614,116616,116618,116620,116622,116624,116626],{"class":120,"line":121},[118,116615,107435],{"class":128},[118,116617,174],{"class":124},[118,116619,107440],{"class":128},[118,116621,30816],{"class":177},[118,116623,114711],{"class":128},[118,116625,30816],{"class":177},[118,116627,114716],{"class":128},[15,116629,116630,116631,28378],{},"这能避免无效动作直接写入 ",[115,116632,101069],{},[89,116634,116636],{"id":116635},"忘记返回-info","忘记返回 info",[15,116638,116476,116639,101011,116641,116643],{},[115,116640,70049],{},[115,116642,107127],{}," 都会返回 info：",[109,116645,116646],{"className":30371,"code":113386,"language":30373,"meta":39,"style":39},[115,116647,116648,116656],{"__ignoreMap":39},[118,116649,116650,116652,116654],{"class":120,"line":121},[118,116651,113393],{"class":128},[118,116653,174],{"class":124},[118,116655,113398],{"class":128},[118,116657,116658,116660,116662],{"class":120,"line":40},[118,116659,113403],{"class":128},[118,116661,174],{"class":124},[118,116663,113408],{"class":128},[15,116665,116666,116667,28378],{},"即使暂时没有额外信息，也返回 ",[115,116668,32452],{},[60,116670,116672],{"id":116671},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[15,116674,116675],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[72,116677,116678,116681,116684,116687,116690,116693],{},[75,116679,116680],{},"更稳定的 reward。",[75,116682,116683],{},"合理的 episode 长度。",[75,116685,116686],{},"可重复的随机目标采样。",[75,116688,116689],{},"render 接口。",[75,116691,116692],{},"环境注册代码。",[75,116694,116695],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[15,116697,116698],{},"如果只是自己写训练循环，最小形式是：",[109,116700,116702],{"className":30371,"code":116701,"language":30373,"meta":39,"style":39},"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",[115,116703,116704,116712,116728,116732,116748,116757,116766,116776],{"__ignoreMap":39},[118,116705,116706,116708,116710],{"class":120,"line":121},[118,116707,116337],{"class":128},[118,116709,174],{"class":124},[118,116711,114935],{"class":128},[118,116713,116714,116716,116718,116720,116722,116724,116726],{"class":120,"line":40},[118,116715,113393],{"class":128},[118,116717,174],{"class":124},[118,116719,114945],{"class":128},[118,116721,114559],{"class":5221},[118,116723,174],{"class":124},[118,116725,320],{"class":177},[118,116727,135],{"class":128},[118,116729,116730],{"class":120,"line":1183},[118,116731,2404],{"emptyLinePlaceholder":45},[118,116733,116734,116736,116738,116740,116742,116744,116746],{"class":120,"line":1198},[118,116735,3029],{"class":124},[118,116737,101494],{"class":128},[118,116739,26036],{"class":124},[118,116741,32436],{"class":177},[118,116743,129],{"class":128},[118,116745,6415],{"class":177},[118,116747,30779],{"class":128},[118,116749,116750,116753,116755],{"class":120,"line":1204},[118,116751,116752],{"class":128},"    action ",[118,116754,174],{"class":124},[118,116756,115014],{"class":128},[118,116758,116759,116762,116764],{"class":120,"line":1218},[118,116760,116761],{"class":128},"    obs, reward, terminated, truncated, info ",[118,116763,174],{"class":124},[118,116765,113408],{"class":128},[118,116767,116768,116770,116772,116774],{"class":120,"line":1224},[118,116769,3105],{"class":124},[118,116771,115080],{"class":128},[118,116773,115083],{"class":124},[118,116775,115086],{"class":128},[118,116777,116778,116781,116783],{"class":120,"line":1315},[118,116779,116780],{"class":128},"        obs, info ",[118,116782,174],{"class":124},[118,116784,113398],{"class":128},[60,116786,116788],{"id":116787},"_9本章小结","9.本章小结",[15,116790,116791],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[109,116793,116796],{"className":116794,"code":116795,"language":5192,"meta":39},[5190],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[115,116797,116795],{"__ignoreMap":39},[15,116799,116800],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5131,116802,116803],{},"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":39,"searchDepth":40,"depth":40,"links":116805},[116806,116807,116808,116815,116819,116820,116821,116831,116832],{"id":100639,"depth":40,"text":100640},{"id":100762,"depth":40,"text":100763},{"id":101037,"depth":40,"text":101038,"children":116809},[116810,116812,116814],{"id":113617,"depth":1183,"text":116811},"terminated 和 truncated 的区别",{"id":113720,"depth":1183,"text":116813},"observation_space 和 action_space",{"id":113847,"depth":1183,"text":113848},{"id":101245,"depth":40,"text":101246,"children":116816},[116817,116818],{"id":101565,"depth":1183,"text":101565},{"id":101701,"depth":1183,"text":101701},{"id":102308,"depth":40,"text":102309},{"id":102340,"depth":40,"text":102341},{"id":102445,"depth":40,"text":102446,"children":116822},[116823,116824,116826,116827,116829,116830],{"id":116472,"depth":1183,"text":116473},{"id":116494,"depth":1183,"text":116825},"data.ctrl[:] = action 维度错误",{"id":116529,"depth":1183,"text":116530},{"id":116553,"depth":1183,"text":116828},"observation_space 维度和 obs 不一致",{"id":116603,"depth":1183,"text":116604},{"id":116635,"depth":1183,"text":116636},{"id":116671,"depth":40,"text":116672},{"id":116787,"depth":40,"text":116788},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113370,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116839,"title":116840,"body":116841,"description":117264,"extension":43,"meta":117265,"navigation":45,"path":117266,"seo":117267,"stem":117268,"__hash__":117269},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116842,"toc":117254},[116843,116847,116850,116853,116873,116879,116885,116895,116898,116901,116921,116924,116928,116931,116937,116940,116954,116957,116960,117034,117037,117043,117046,117069,117072,117122,117125,117131,117134,117137,117140,117159,117162,117168,117171,117174,117177,117197,117200,117203,117206,117251],[10,116844,116846],{"id":116845},"mujoco-学习","MuJoCo 学习",[15,116848,116849],{},"初版",[15,116851,116852],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[72,116854,116855,116858,116861,116870],{},[75,116856,116857],{},"MuJoCo 模型文件在描述什么。",[75,116859,116860],{},"Python 代码怎样读取和推进仿真。",[75,116862,116863,341,116865,341,116867,116869],{},[115,116864,104023],{},[115,116866,104353],{},[115,116868,104356],{}," 这些数组为什么重要。",[75,116871,116872],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[15,116874,116875,116876,116878],{},"默认环境为 Fedora 44、Python >= 3.10、",[115,116877,101020],{}," 官方 Python bindings。",[15,116880,116881,116882,116884],{},"注意：本文禁止使用 ",[115,116883,101005],{},"。所有示例均使用：",[109,116886,116887],{"className":30371,"code":101571,"language":30373,"meta":39,"style":39},[115,116888,116889],{"__ignoreMap":39},[118,116890,116891,116893],{"class":120,"line":121},[118,116892,30385],{"class":124},[118,116894,101294],{"class":128},[60,116896,116897],{"id":116897},"适合谁阅读",[15,116899,116900],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[72,116902,116903,116906,116909,116912],{},[75,116904,116905],{},"没学过 MuJoCo，只会一点 Python。",[75,116907,116908],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[75,116910,116911],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[75,116913,116914,116915,116917,116918,116920],{},"以前接触过 ",[115,116916,101005],{},"，现在想迁移到官方 ",[115,116919,101014],{}," Python bindings。",[15,116922,116923],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[60,116925,116927],{"id":116926},"mujoco-到底是什么","MuJoCo 到底是什么",[15,116929,116930],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[109,116932,116935],{"className":116933,"code":116934,"language":5192,"meta":39},[5190],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[115,116936,116934],{"__ignoreMap":39},[15,116938,116939],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[72,116941,116942,116945,116948,116951],{},[75,116943,116944],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[75,116946,116947],{},"快速测试控制算法，不必一开始就上真实机器人。",[75,116949,116950],{},"生成强化学习环境。",[75,116952,116953],{},"采集状态、动作、图像、奖励等训练数据。",[60,116955,116956],{"id":116956},"学习前的心智模型",[15,116958,116959],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[266,116961,116962,116974],{},[269,116963,116964],{},[272,116965,116966,116969,116972],{},[275,116967,116968],{"align":23741},"部分",[275,116970,116971],{"align":23741},"负责什么",[275,116973,21192],{"align":23741},[313,116975,116976,116987,116999,117011,117023],{},[272,116977,116978,116981,116984],{},[318,116979,116980],{"align":23741},"MJCF XML",[318,116982,116983],{"align":23741},"定义世界和机器人结构",[318,116985,116986],{"align":23741},"地面、盒子、关节、电机、摄像头",[272,116988,116989,116993,116996],{},[318,116990,116991],{"align":23741},[115,116992,100702],{},[318,116994,116995],{"align":23741},"编译后的静态模型",[318,116997,116998],{"align":23741},"有几个关节、有几个电机、时间步长是多少",[272,117000,117001,117005,117008],{},[318,117002,117003],{"align":23741},[115,117004,100712],{},[318,117006,117007],{"align":23741},"运行中的动态状态",[318,117009,117010],{"align":23741},"当前时间、位置、速度、电机输入",[272,117012,117013,117017,117020],{},[318,117014,117015],{"align":23741},[115,117016,101208],{},[318,117018,117019],{"align":23741},"推进一步物理仿真",[318,117021,117022],{"align":23741},"根据重力、力、碰撞更新状态",[272,117024,117025,117028,117031],{},[318,117026,117027],{"align":23741},"Viewer \u002F Renderer",[318,117029,117030],{"align":23741},"把仿真显示出来",[318,117032,117033],{"align":23741},"打开窗口或保存图片",[15,117035,117036],{},"一句话总结：",[109,117038,117041],{"className":117039,"code":117040,"language":5192,"meta":39},[5190],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[115,117042,117040],{"__ignoreMap":39},[15,117044,117045],{},"参考来源：",[1135,117047,117048,117055,117062],{},[75,117049,117050,117051],{},"MuJoCo Python 官方文档：",[21,117052,117053],{"href":117053,"rel":117054},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25],[75,117056,117057,117058],{},"MuJoCo XML Reference：",[21,117059,117060],{"href":117060,"rel":117061},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25],[75,117063,117064,117065],{},"MuJoCo Overview：",[21,117066,117067],{"href":117067,"rel":117068},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25],[60,117070,117071],{"id":117071},"章节目录",[72,117073,117074,117080,117086,117092,117098,117104,117110,117116],{},[75,117075,117076],{},[21,117077,117079],{"href":117078},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[75,117081,117082],{},[21,117083,117085],{"href":117084},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[75,117087,117088],{},[21,117089,117091],{"href":117090},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[75,117093,117094],{},[21,117095,117097],{"href":117096},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[75,117099,117100],{},[21,117101,117103],{"href":117102},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[75,117105,117106],{},[21,117107,117109],{"href":117108},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[75,117111,117112],{},[21,117113,117115],{"href":117114},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[75,117117,117118],{},[21,117119,117121],{"href":117120},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[60,117123,117124],{"id":117124},"推荐学习路线",[109,117126,117129],{"className":117127,"code":117128,"language":5192,"meta":39},[5190],"环境安装\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",[115,117130,117128],{"__ignoreMap":39},[15,117132,117133],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[60,117135,117136],{"id":117136},"建议的目录结构",[15,117138,117139],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[109,117141,117143],{"className":23827,"code":117142,"language":23829,"meta":39,"style":39},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[115,117144,117145,117153],{"__ignoreMap":39},[118,117146,117147,117149,117151],{"class":120,"line":121},[118,117148,101259],{"class":1967},[118,117150,29209],{"class":177},[118,117152,101264],{"class":233},[118,117154,117155,117157],{"class":120,"line":40},[118,117156,101269],{"class":177},[118,117158,101264],{"class":233},[15,117160,117161],{},"每一章的代码都单独保存：",[109,117163,117166],{"className":117164,"code":117165,"language":5192,"meta":39},[5190],"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",[115,117167,117165],{"__ignoreMap":39},[15,117169,117170],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[60,117172,117173],{"id":117173},"学习方法",[15,117175,117176],{},"每章建议按这个顺序操作：",[72,117178,117179,117182,117185,117188,117191,117194],{},[75,117180,117181],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[75,117183,117184],{},"复制最小可运行代码，保存成指定文件。",[75,117186,117187],{},"运行代码，确认没有报错。",[75,117189,117190],{},"对照“运行结果说明”理解输出。",[75,117192,117193],{},"做“验证步骤”，主动改一两个参数。",[75,117195,117196],{},"遇到报错先看“常见错误与解决方案”。",[15,117198,117199],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[60,117201,117202],{"id":117202},"全局排错顺序",[15,117204,117205],{},"遇到问题时，按下面顺序查：",[72,117207,117208,117214,117220,117225,117228,117231,117238,117248],{},[75,117209,117210,117211],{},"Python 环境是否激活：",[115,117212,117213],{},"which python",[75,117215,117216,117217],{},"MuJoCo 是否能导入：",[115,117218,117219],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[75,117221,117222,117223],{},"是否误装了 ",[115,117224,101005],{},[75,117226,117227],{},"XML 标签是否闭合、属性是否拼写正确",[75,117229,117230],{},"actuator 引用的 joint 名字是否存在",[75,117232,117233,117235,117236],{},[115,117234,101069],{}," 的长度是否等于 ",[115,117237,102151],{},[75,117239,105578,117240,82532,117242,117244,117245],{},[115,117241,104023],{},[115,117243,104353],{}," 后是否调用了 ",[115,117246,117247],{},"mujoco.mj_forward",[75,117249,117250],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5131,117252,117253],{},"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":39,"searchDepth":40,"depth":40,"links":117255},[117256,117257,117258,117259,117260,117261,117262,117263],{"id":116897,"depth":40,"text":116897},{"id":116926,"depth":40,"text":116927},{"id":116956,"depth":40,"text":116956},{"id":117071,"depth":40,"text":117071},{"id":117124,"depth":40,"text":117124},{"id":117136,"depth":40,"text":117136},{"id":117173,"depth":40,"text":117173},{"id":117202,"depth":40,"text":117202},"仿真搭建。",{"category":23383},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116840,"description":117264},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117271,"title":117272,"body":117273,"description":42,"extension":43,"meta":117728,"navigation":45,"path":117729,"seo":117730,"stem":117731,"__hash__":117732},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117274,"toc":117726},[117275,117278,117281,117287,117723],[10,117276,117272],{"id":117277},"_1-最常用的基本操作更新",[15,117279,117280],{},"装linux系统教程：",[15,117282,117283],{},[21,117284,117285],{"href":117285,"rel":117286},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25],[109,117288,117292],{"className":117289,"code":117290,"language":117291,"meta":39,"style":39},"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",[115,117293,117294,117299,117304,117313,117318,117327,117332,117352,117357,117368,117373,117382,117387,117415,117420,117439,117444,117463,117467,117472,117488,117492,117497,117527,117531,117536,117552,117556,117561,117576,117580,117585,117601,117605,117610,117622,117634,117638,117643,117660,117664,117669,117687,117691,117696,117705,117709,117714],{"__ignoreMap":39},[118,117295,117296],{"class":120,"line":121},[118,117297,117298],{"class":187},"#更新相关的知识\n",[118,117300,117301],{"class":120,"line":40},[118,117302,117303],{"class":187},"# 更新软件包列表（从服务器获取最新软件信息）\n",[118,117305,117306,117308,117311],{"class":120,"line":1183},[118,117307,24581],{"class":1967},[118,117309,117310],{"class":233}," apt",[118,117312,26235],{"class":233},[118,117314,117315],{"class":120,"line":1198},[118,117316,117317],{"class":187},"# 升级所有可更新的软件包（不删除旧包）\n",[118,117319,117320,117322,117324],{"class":120,"line":1204},[118,117321,24581],{"class":1967},[118,117323,117310],{"class":233},[118,117325,117326],{"class":233}," upgrade\n",[118,117328,117329],{"class":120,"line":1218},[118,117330,117331],{"class":187},"#更新和升级软件包\n",[118,117333,117334,117336,117338,117341,117343,117345,117347,117350],{"class":120,"line":1224},[118,117335,24581],{"class":1967},[118,117337,117310],{"class":233},[118,117339,117340],{"class":233}," update",[118,117342,26183],{"class":128},[118,117344,24581],{"class":1967},[118,117346,117310],{"class":233},[118,117348,117349],{"class":233}," upgrade",[118,117351,100974],{"class":177},[118,117353,117354],{"class":120,"line":1315},[118,117355,117356],{"class":187},"#列出可更新的软件包及版本信息\n",[118,117358,117359,117362,117365],{"class":120,"line":1321},[118,117360,117361],{"class":1967},"apt",[118,117363,117364],{"class":233}," list",[118,117366,117367],{"class":177}," --upgradable\n",[118,117369,117370],{"class":120,"line":1333},[118,117371,117372],{"class":187},"#彻底升级（处理依赖关系，可能删除旧包）\n",[118,117374,117375,117377,117379],{"class":120,"line":1616},[118,117376,24581],{"class":1967},[118,117378,117310],{"class":233},[118,117380,117381],{"class":233}," full-upgrade\n",[118,117383,117384],{"class":120,"line":1621},[118,117385,117386],{"class":187},"#设置指定版本\n",[118,117388,117389,117391,117393,117395,117397,117400,117402,117404,117406,117408,117411,117413],{"class":120,"line":1627},[118,117390,24581],{"class":1967},[118,117392,117310],{"class":233},[118,117394,23839],{"class":233},[118,117396,28895],{"class":124},[118,117398,117399],{"class":233},"package_nam",[118,117401,203],{"class":128},[118,117403,1088],{"class":124},[118,117405,174],{"class":233},[118,117407,1038],{"class":124},[118,117409,117410],{"class":233},"version_numbe",[118,117412,798],{"class":128},[118,117414,51300],{"class":124},[118,117416,117417],{"class":120,"line":1632},[118,117418,117419],{"class":187},"#只安装软件包不升级\n",[118,117421,117422,117424,117426,117428,117430,117432,117434,117436],{"class":120,"line":1646},[118,117423,24581],{"class":1967},[118,117425,117310],{"class":233},[118,117427,23839],{"class":233},[118,117429,28895],{"class":124},[118,117431,117399],{"class":233},[118,117433,203],{"class":128},[118,117435,1088],{"class":124},[118,117437,117438],{"class":177}," --no-upgrade\n",[118,117440,117441],{"class":120,"line":1651},[118,117442,117443],{"class":187},"#只升级，不存在就不安装\n",[118,117445,117446,117448,117450,117452,117454,117456,117458,117460],{"class":120,"line":1657},[118,117447,24581],{"class":1967},[118,117449,117310],{"class":233},[118,117451,23839],{"class":233},[118,117453,28895],{"class":124},[118,117455,117399],{"class":233},[118,117457,203],{"class":128},[118,117459,1088],{"class":124},[118,117461,117462],{"class":177}," --only-upgrade\n",[118,117464,117465],{"class":120,"line":1678},[118,117466,2404],{"emptyLinePlaceholder":45},[118,117468,117469],{"class":120,"line":1683},[118,117470,117471],{"class":187},"#安装指定的软件命令\n",[118,117473,117474,117476,117478,117480,117482,117484,117486],{"class":120,"line":1697},[118,117475,24581],{"class":1967},[118,117477,117310],{"class":233},[118,117479,23839],{"class":233},[118,117481,28895],{"class":124},[118,117483,117399],{"class":233},[118,117485,203],{"class":128},[118,117487,51300],{"class":124},[118,117489,117490],{"class":120,"line":1702},[118,117491,2404],{"emptyLinePlaceholder":45},[118,117493,117494],{"class":120,"line":1731},[118,117495,117496],{"class":187},"#安装多个软件包\n",[118,117498,117499,117501,117503,117505,117507,117510,117513,117515,117517,117520,117522,117524],{"class":120,"line":1736},[118,117500,24581],{"class":1967},[118,117502,117310],{"class":233},[118,117504,23839],{"class":233},[118,117506,28895],{"class":124},[118,117508,117509],{"class":233},"package_",[118,117511,117512],{"class":124},"1>",[118,117514,28895],{"class":124},[118,117516,117509],{"class":233},[118,117518,117519],{"class":124},"2>",[118,117521,28895],{"class":124},[118,117523,117509],{"class":233},[118,117525,117526],{"class":124},"3>\n",[118,117528,117529],{"class":120,"line":1753},[118,117530,2404],{"emptyLinePlaceholder":45},[118,117532,117533],{"class":120,"line":1758},[118,117534,117535],{"class":187},"#更新指定的软件命令\n",[118,117537,117538,117540,117542,117544,117546,117548,117550],{"class":120,"line":1763},[118,117539,24581],{"class":1967},[118,117541,117310],{"class":233},[118,117543,117340],{"class":233},[118,117545,28895],{"class":124},[118,117547,117399],{"class":233},[118,117549,203],{"class":128},[118,117551,51300],{"class":124},[118,117553,117554],{"class":120,"line":1768},[118,117555,2404],{"emptyLinePlaceholder":45},[118,117557,117558],{"class":120,"line":1782},[118,117559,117560],{"class":187},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[118,117562,117563,117565,117568,117570,117572,117574],{"class":120,"line":1787},[118,117564,117361],{"class":1967},[118,117566,117567],{"class":233}," show",[118,117569,28895],{"class":124},[118,117571,117399],{"class":233},[118,117573,203],{"class":128},[118,117575,51300],{"class":124},[118,117577,117578],{"class":120,"line":2581},[118,117579,2404],{"emptyLinePlaceholder":45},[118,117581,117582],{"class":120,"line":2595},[118,117583,117584],{"class":187},"#删除软件包命令\n",[118,117586,117587,117589,117591,117593,117595,117597,117599],{"class":120,"line":2603},[118,117588,24581],{"class":1967},[118,117590,117310],{"class":233},[118,117592,26072],{"class":233},[118,117594,28895],{"class":124},[118,117596,117399],{"class":233},[118,117598,203],{"class":128},[118,117600,51300],{"class":124},[118,117602,117603],{"class":120,"line":2608},[118,117604,2404],{"emptyLinePlaceholder":45},[118,117606,117607],{"class":120,"line":2614},[118,117608,117609],{"class":187},"# 清理旧版本和缓存（释放磁盘空间）\n",[118,117611,117612,117614,117616,117619],{"class":120,"line":2620},[118,117613,24581],{"class":1967},[118,117615,117310],{"class":233},[118,117617,117618],{"class":233}," autoremove",[118,117620,117621],{"class":187},"  # 删除不再需要的依赖和库文件\n",[118,117623,117624,117626,117628,117631],{"class":120,"line":2625},[118,117625,24581],{"class":1967},[118,117627,117310],{"class":233},[118,117629,117630],{"class":233}," clean",[118,117632,117633],{"class":187},"       # 清理下载的缓存包\n",[118,117635,117636],{"class":120,"line":7953},[118,117637,2404],{"emptyLinePlaceholder":45},[118,117639,117640],{"class":120,"line":7977},[118,117641,117642],{"class":187},"#移除软件包及配置文件\n",[118,117644,117645,117647,117649,117652,117654,117656,117658],{"class":120,"line":7982},[118,117646,24581],{"class":1967},[118,117648,117310],{"class":233},[118,117650,117651],{"class":233}," purge",[118,117653,28895],{"class":124},[118,117655,117399],{"class":233},[118,117657,203],{"class":128},[118,117659,51300],{"class":124},[118,117661,117662],{"class":120,"line":7988},[118,117663,2404],{"emptyLinePlaceholder":45},[118,117665,117666],{"class":120,"line":8015},[118,117667,117668],{"class":187},"#查找软件包命令\n",[118,117670,117671,117673,117675,117678,117680,117683,117685],{"class":120,"line":8020},[118,117672,24581],{"class":1967},[118,117674,117310],{"class":233},[118,117676,117677],{"class":233}," search",[118,117679,28895],{"class":124},[118,117681,117682],{"class":233},"keywor",[118,117684,442],{"class":128},[118,117686,51300],{"class":124},[118,117688,117689],{"class":120,"line":8026},[118,117690,2404],{"emptyLinePlaceholder":45},[118,117692,117693],{"class":120,"line":8038},[118,117694,117695],{"class":187},"#列出所有已安装的包\n",[118,117697,117698,117700,117702],{"class":120,"line":8050},[118,117699,117361],{"class":1967},[118,117701,117364],{"class":233},[118,117703,117704],{"class":177}," --installed\n",[118,117706,117707],{"class":120,"line":8062},[118,117708,2404],{"emptyLinePlaceholder":45},[118,117710,117711],{"class":120,"line":9721},[118,117712,117713],{"class":187},"#列出所有已安装的包的版本信息\n",[118,117715,117716,117718,117720],{"class":120,"line":9746},[118,117717,117361],{"class":1967},[118,117719,117364],{"class":233},[118,117721,117722],{"class":177}," --all-versions\n",[5131,117724,117725],{},"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":39,"searchDepth":40,"depth":40,"links":117727},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117272,"description":42},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117734,"title":117735,"body":117736,"description":42,"extension":43,"meta":118477,"navigation":45,"path":118478,"seo":118479,"stem":118480,"__hash__":118481},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117737,"toc":118464},[117738,117741,117745,117748,117754,117758,117762,117768,117773,117778,117783,117788,117793,117796,117799,117802,117805,117809,117812,117817,117820,117825,117828,117833,117840,117843,117846,117849,117852,117855,117866,117870,117874,117879,117884,117888,117893,117897,117902,117906,117910,117915,117918,117963,117968,117972,117976,117981,117987,117992,118002,118007,118017,118022,118027,118054,118058,118061,118066,118069,118094,118098,118103,118106,118111,118116,118136,118141,118144,118159,118163,118216,118219,118224,118228,118231,118246,118249,118252,118257,118261,118265,118268,118272,118276,118279,118284,118289,118293,118300,118308,118311,118318,118323,118328,118331,118336,118343,118348,118355,118359,118361,118366,118370,118373,118376,118381,118384,118389,118392,118397,118402,118407,118411,118416,118420,118461],[10,117739,117735],{"id":117740},"_2-linux装机教程",[60,117742,117744],{"id":117743},"_21-实体机","2.1 实体机",[15,117746,117747],{},"使用清华源：（Ubuntu24.04）",[15,117749,117750],{},[21,117751,117752],{"href":117752,"rel":117753},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25],[60,117755,117757],{"id":117756},"_22-普通虚拟机","2.2 普通虚拟机",[89,117759,117761],{"id":117760},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[15,117763,117764],{},[21,117765,117766],{"href":117766,"rel":117767},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25],[15,117769,117770],{},[1466,117771],{"alt":39,"src":117772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[15,117774,117775],{},[1466,117776],{"alt":39,"src":117777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[15,117779,117780],{},[1466,117781],{"alt":39,"src":117782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[15,117784,117785],{},[1466,117786],{"alt":39,"src":117787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[15,117789,117790],{},[1466,117791],{"alt":39,"src":117792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[15,117794,117795],{},"内存4G（4096MB）；",[15,117797,117798],{},"CPU给4个核；",[15,117800,117801],{},"硬盘动态分配60G；",[15,117803,117804],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[89,117806,117808],{"id":117807},"_222-安装ubuntu","2.2.2 安装Ubuntu",[15,117810,117811],{},"按照1.1的步骤下载Ubuntu",[15,117813,117814],{},[1466,117815],{"alt":39,"src":117816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[15,117818,117819],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[15,117821,117822],{},[1466,117823],{"alt":39,"src":117824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[15,117826,117827],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[15,117829,117830],{},[1466,117831],{"alt":39,"src":117832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[15,117834,117835,117836,117839],{},"选择“正常安装”(找不到都用Alt+F7)， ",[278,117837,117838],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[15,117841,117842],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[15,117844,117845],{},"将改动写入磁盘吗 继续",[15,117847,117848],{},"选择东八区（shanghai，大致在地图上点一下），继续",[15,117850,117851],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[15,117853,117854],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[15,117856,117857,117858,117861,117862,117865],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[278,117859,117860],{},"除了"," 选不发送系统信息与不升级之外， ",[278,117863,117864],{},"其它"," 都跳过或前进）",[89,117867,117869],{"id":117868},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22003,117871,117873],{"id":117872},"_2231-全屏","2.2.3.1 全屏",[15,117875,117876],{},[1466,117877],{"alt":39,"src":117878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[15,117880,117881],{},[1466,117882],{"alt":39,"src":117883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22003,117885,117887],{"id":117886},"_2232-文件交换","2.2.3.2 文件交换",[15,117889,117890],{},[1466,117891],{"alt":39,"src":117892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22003,117894,117896],{"id":117895},"_2233-新建文本文档","2.2.3.3 新建文本文档",[15,117898,117899],{},[1466,117900],{"alt":39,"src":117901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[60,117903,117905],{"id":117904},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[89,117907,117909],{"id":117908},"_231-简介与优缺点","2.3.1 简介与优缺点",[72,117911,117912],{},[75,117913,117914],{},"什么情况下推荐？",[15,117916,117917],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[72,117919,117920],{"start":40},[75,117921,117922,117923],{},"优缺点：",[72,117924,117925,117955],{},[75,117926,117927,117928],{},"优点：",[72,117929,117930,117933,117940,117943,117946,117949,117952],{},[75,117931,117932],{},"WSL2是最好的Linux发行版;(bushi)",[75,117934,117935,117936,117939],{},"性能损耗极低。且比在Windows上跑深度性能 ",[278,117937,117938],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[75,117941,117942],{},"非常方便调用USB设备，可以USB直通;",[75,117944,117945],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[75,117947,117948],{},"非常方便Win与WSL2互相传文件等协同操作;",[75,117950,117951],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[75,117953,117954],{},"非常方便使用Windows的VScode远程开发;",[75,117956,117957,117958],{},"缺点：",[72,117959,117960],{},[75,117961,117962],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[15,117964,117965],{},[1466,117966],{"alt":39,"src":117967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[89,117969,117971],{"id":117970},"_232-安装教程","2.3.2 安装教程",[22003,117973,117975],{"id":117974},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[72,117977,117978],{},[75,117979,117980],{},"方法一(图形界面)",[15,117982,117983,117984,24623],{},"用Win+R输入",[115,117985,117986],{},"appwiz.cpl",[15,117988,117989],{},[1466,117990],{"alt":39,"src":117991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[15,117993,117994,117995,117998,117999,26466],{},"点击OK进入 ",[278,117996,117997],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[278,118000,118001],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[15,118003,118004],{},[1466,118005],{"alt":39,"src":118006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[15,118008,118009,118010,101011,118013,118016],{},"选择 ",[278,118011,118012],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[278,118014,118015],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[15,118018,118019],{},[1466,118020],{"alt":39,"src":118021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[72,118023,118024],{"start":40},[75,118025,118026],{},"方法二(命令行)",[109,118028,118032],{"className":118029,"code":118030,"language":118031,"meta":39,"style":39},"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",[115,118033,118034,118039,118044,118049],{"__ignoreMap":39},[118,118035,118036],{"class":120,"line":121},[118,118037,118038],{},"# 开启 Linux 子系统\n",[118,118040,118041],{"class":120,"line":40},[118,118042,118043],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[118,118045,118046],{"class":120,"line":1183},[118,118047,118048],{},"# 开启虚拟机平台\n",[118,118050,118051],{"class":120,"line":1198},[118,118052,118053],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22003,118055,118057],{"id":118056},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[15,118059,118060],{},"用管理员权限打开powershell",[15,118062,118063],{},[1466,118064],{"alt":39,"src":118065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[15,118067,118068],{},"升级WSL并设置默认版本为WSL2",[109,118070,118072],{"className":118029,"code":118071,"language":118031,"meta":39,"style":39},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[115,118073,118074,118079,118084,118089],{"__ignoreMap":39},[118,118075,118076],{"class":120,"line":121},[118,118077,118078],{},"# 更新 wsl\n",[118,118080,118081],{"class":120,"line":40},[118,118082,118083],{},"wsl --update\n",[118,118085,118086],{"class":120,"line":1183},[118,118087,118088],{},"# 将 wsl 版本设置为 wsl2\n",[118,118090,118091],{"class":120,"line":1198},[118,118092,118093],{},"wsl --set-default-version 2\n",[22003,118095,118097],{"id":118096},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[72,118099,118100],{},[75,118101,118102],{},"方式一(商店下载)",[15,118104,118105],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[15,118107,118108],{},[1466,118109],{"alt":39,"src":118110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[72,118112,118113],{"start":40},[75,118114,118115],{},"方式二(命令行安装)",[109,118117,118119],{"className":118029,"code":118118,"language":118031,"meta":39,"style":39},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[115,118120,118121,118126,118131],{"__ignoreMap":39},[118,118122,118123],{"class":120,"line":121},[118,118124,118125],{},"# 列出可安装的 Linux 版本\n",[118,118127,118128],{"class":120,"line":40},[118,118129,118130],{},"#（需要科学手段）\n",[118,118132,118133],{"class":120,"line":1183},[118,118134,118135],{},"wsl --list --online\n",[15,118137,118138],{},[1466,118139],{"alt":39,"src":118140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[15,118142,118143],{},"选择对应发行版并安装",[109,118145,118147],{"className":118029,"code":118146,"language":118031,"meta":39,"style":39},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[115,118148,118149,118154],{"__ignoreMap":39},[118,118150,118151],{"class":120,"line":121},[118,118152,118153],{},"# Ubuntu安装完毕后需要重启系统\n",[118,118155,118156],{"class":120,"line":40},[118,118157,118158],{},"wsl --install -d Ubuntu-24.04\n",[22003,118160,118162],{"id":118161},"_2324-查看系统状态","2.3.2.4 查看系统状态",[109,118164,118166],{"className":118029,"code":118165,"language":118031,"meta":39,"style":39},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[115,118167,118168,118173,118178,118183,118188,118192,118196,118201,118206,118211],{"__ignoreMap":39},[118,118169,118170],{"class":120,"line":121},[118,118171,118172],{},"# 查看 wsl\n",[118,118174,118175],{"class":120,"line":40},[118,118176,118177],{},"wsl -l\n",[118,118179,118180],{"class":120,"line":1183},[118,118181,118182],{},"# 查看 wsl 运行版本或模式\n",[118,118184,118185],{"class":120,"line":1198},[118,118186,118187],{},"wsl -l -v\n",[118,118189,118190],{"class":120,"line":1204},[118,118191,2404],{"emptyLinePlaceholder":45},[118,118193,118194],{"class":120,"line":1218},[118,118195,2404],{"emptyLinePlaceholder":45},[118,118197,118198],{"class":120,"line":1224},[118,118199,118200],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[118,118202,118203],{"class":120,"line":1315},[118,118204,118205],{},"wsl --set-version \u003Cdistro> 2\n",[118,118207,118208],{"class":120,"line":1321},[118,118209,118210],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[118,118212,118213],{"class":120,"line":1333},[118,118214,118215],{},"wsl --unregister \u003Cdistro>\n",[15,118217,118218],{},"输出Version为2即正常",[15,118220,118221],{},[1466,118222],{"alt":39,"src":118223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22003,118225,118227],{"id":118226},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[15,118229,118230],{},"直接在Powershell里输入wsl命令进入子系统",[109,118232,118234],{"className":118029,"code":118233,"language":118031,"meta":39,"style":39},"# 进入子系统\nwsl\n",[115,118235,118236,118241],{"__ignoreMap":39},[118,118237,118238],{"class":120,"line":121},[118,118239,118240],{},"# 进入子系统\n",[118,118242,118243],{"class":120,"line":40},[118,118244,118245],{},"wsl\n",[15,118247,118248],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[15,118250,118251],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[15,118253,118254],{},[1466,118255],{"alt":39,"src":118256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[89,118258,118260],{"id":118259},"_233-配置各种环境","2.3.3 配置各种环境",[22003,118262,118264],{"id":118263},"_2331-换源","2.3.3.1 换源",[15,118266,118267],{},"(同实体机LINUX，往下找教程)",[22003,118269,118271],{"id":118270},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22915,118273,118275],{"id":118274},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[15,118277,118278],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[15,118280,118281],{},[1466,118282],{"alt":39,"src":118283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[15,118285,118286],{},[1466,118287],{"alt":39,"src":118288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22915,118290,118292],{"id":118291},"_23322-cuda","2.3.3.2.2 CUDA",[15,118294,118295,118296],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[21,118297,118298],{"href":118298,"rel":118299},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25],[15,118301,118302,118305],{},[1466,118303],{"alt":39,"src":118304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1466,118306],{"alt":39,"src":118307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[15,118309,118310],{},"在下方的网站，选择合适的版本。",[15,118312,118313,118314],{},"WSL2 专属 CUDA 指南：",[21,118315,118316],{"href":118316,"rel":118317},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25],[15,118319,118320],{},[278,118321,118322],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[15,118324,118325],{},[1466,118326],{"alt":39,"src":118327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[15,118329,118330],{},"挨行敲一遍",[15,118332,118333],{},[1466,118334],{"alt":39,"src":118335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[15,118337,118338,118339,118342],{},"敲完后，输入",[115,118340,118341],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[15,118344,118345],{},[1466,118346],{"alt":39,"src":118347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[15,118349,118350,118351,118354],{},"（请详看下方教程的",[278,118352,118353],{},"安装CUDA的配置环境来看","如何配置环境）",[22915,118356,118358],{"id":118357},"_23323-cudnn","2.3.3.2.3 cuDNN",[15,118360,118267],{},[15,118362,118363],{},[1466,118364],{"alt":39,"src":118365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22003,118367,118369],{"id":118368},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[15,118371,118372],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[15,118374,118375],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[15,118377,118378],{},[1466,118379],{"alt":39,"src":118380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[15,118382,118383],{},"连接WSL2",[15,118385,118386],{},[1466,118387],{"alt":39,"src":118388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[15,118390,118391],{},"远程开发成功。",[15,118393,118394],{},[1466,118395],{"alt":39,"src":118396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[15,118398,118399],{},[1466,118400],{"alt":39,"src":118401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[15,118403,118404],{},[1466,118405],{"alt":39,"src":118406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22003,118408,118410],{"id":118409},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[15,118412,118413],{},[1466,118414],{"alt":39,"src":118415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22003,118417,118419],{"id":118418},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[109,118421,118423],{"className":117289,"code":118422,"language":117291,"meta":39,"style":39},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[115,118424,118425,118433,118441,118452,118456],{"__ignoreMap":39},[118,118426,118427,118429,118431],{"class":120,"line":121},[118,118428,24581],{"class":1967},[118,118430,117310],{"class":233},[118,118432,26235],{"class":233},[118,118434,118435,118437,118439],{"class":120,"line":40},[118,118436,24581],{"class":1967},[118,118438,117310],{"class":233},[118,118440,117326],{"class":233},[118,118442,118443,118445,118447,118449],{"class":120,"line":1183},[118,118444,24581],{"class":1967},[118,118446,117310],{"class":233},[118,118448,23839],{"class":233},[118,118450,118451],{"class":233}," mesa-utils\n",[118,118453,118454],{"class":120,"line":1198},[118,118455,2404],{"emptyLinePlaceholder":45},[118,118457,118458],{"class":120,"line":1204},[118,118459,118460],{"class":187},"#然后重启wsl2即可\n",[5131,118462,118463],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":39,"searchDepth":40,"depth":40,"links":118465},[118466,118467,118472],{"id":117743,"depth":40,"text":117744},{"id":117756,"depth":40,"text":117757,"children":118468},[118469,118470,118471],{"id":117760,"depth":1183,"text":117761},{"id":117807,"depth":1183,"text":117808},{"id":117868,"depth":1183,"text":117869},{"id":117904,"depth":40,"text":117905,"children":118473},[118474,118475,118476],{"id":117908,"depth":1183,"text":117909},{"id":117970,"depth":1183,"text":117971},{"id":118259,"depth":1183,"text":118260},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117735,"description":42},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118483,"title":118484,"body":118485,"description":42,"extension":43,"meta":121421,"navigation":45,"path":121422,"seo":121423,"stem":121424,"__hash__":121425},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118486,"toc":121393},[118487,118490,118494,118500,118504,118510,118514,118702,118705,118710,118714,118718,118721,118724,118730,118735,118738,118741,118746,118779,118784,118788,118865,118868,118873,118877,118880,118919,118922,118931,118949,118954,118961,119078,119083,119086,119113,119118,119122,119131,119181,119188,119192,119195,119209,119216,119250,119255,119259,119282,119285,119290,119294,119297,119300,119303,119345,119349,119352,119355,119396,119400,119404,119407,119412,119417,119420,119443,119446,119454,119459,119462,119467,119472,119475,119480,119484,119489,119512,119517,119579,119587,119592,119597,119600,119605,119608,119613,119618,119636,119641,119647,119652,119666,119670,119673,119676,119679,119722,119725,119730,119831,119834,119839,119843,119847,119884,119888,119892,119896,119942,119946,119991,119995,120002,120010,120065,120068,120145,120148,120171,120175,120178,120183,120188,120196,120199,120204,120209,120214,120217,120222,120231,120234,120239,120242,120313,120318,120321,120326,120329,120334,120337,120342,120345,120350,120355,120358,120433,120436,120449,120454,120457,120471,120474,120503,120508,120537,120540,120545,120549,120554,120563,120566,120571,120574,120579,120582,120585,120590,120593,120598,120603,120606,120611,120614,120739,120744,120774,120777,120782,120787,120804,120807,120850,120853,120880,120885,120898,121041,121045,121050,121064,121067,121118,121121,121151,121154,121170,121175,121189,121192,121259,121264,121273,121278,121281,121293,121298,121305,121329,121332,121337,121340,121359,121364,121371,121383,121390],[10,118488,118484],{"id":118489},"_3-安装必备配置",[60,118491,118493],{"id":118492},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[109,118495,118498],{"className":118496,"code":118497,"language":5192},[5190],"  打开下方网站（注意，该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",[115,118499,118497],{"__ignoreMap":39},[89,118501,118503],{"id":118502},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[109,118505,118508],{"className":118506,"code":118507,"language":5192},[5190],"  输入以下命令\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",[115,118509,118507],{"__ignoreMap":39},[89,118511,118513],{"id":118512},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[109,118515,118519],{"className":118516,"code":118517,"language":118518,"meta":39,"style":39},"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",[115,118520,118521,118529,118540,118552,118566,118570,118580,118585,118589,118593,118598,118602,118614,118618,118623,118627,118638,118642,118658,118662,118673,118677,118682,118686,118694],{"__ignoreMap":39},[118,118522,118523,118525,118527],{"class":120,"line":121},[118,118524,24581],{"class":1967},[118,118526,117310],{"class":233},[118,118528,26235],{"class":233},[118,118530,118531,118533,118535,118537],{"class":120,"line":40},[118,118532,24581],{"class":1967},[118,118534,117310],{"class":233},[118,118536,23839],{"class":233},[118,118538,118539],{"class":233}," vim\n",[118,118541,118542,118544,118547,118549],{"class":120,"line":1183},[118,118543,24581],{"class":1967},[118,118545,118546],{"class":233}," rm",[118,118548,25330],{"class":177},[118,118550,118551],{"class":233}," \u002Fetc\u002Fapt\u002Fsources.list\n",[118,118553,118554,118556,118558,118560,118563],{"class":120,"line":1198},[118,118555,24581],{"class":1967},[118,118557,118546],{"class":233},[118,118559,25330],{"class":177},[118,118561,118562],{"class":233}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[118,118564,118565],{"class":177},"**\n",[118,118567,118568],{"class":120,"line":1204},[118,118569,2404],{"emptyLinePlaceholder":45},[118,118571,118572,118574,118577],{"class":120,"line":1218},[118,118573,24581],{"class":1967},[118,118575,118576],{"class":233}," vim",[118,118578,118579],{"class":233}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[118,118581,118582],{"class":120,"line":1224},[118,118583,118584],{"class":233},"```\n",[118,118586,118587],{"class":120,"line":1315},[118,118588,2404],{"emptyLinePlaceholder":45},[118,118590,118591],{"class":120,"line":1321},[118,118592,2404],{"emptyLinePlaceholder":45},[118,118594,118595],{"class":120,"line":1333},[118,118596,118597],{"class":1967},"选择好Ubuntu版本后，复制下方的内容。\n",[118,118599,118600],{"class":120,"line":1616},[118,118601,2404],{"emptyLinePlaceholder":45},[118,118603,118604,118606,118609,118612],{"class":120,"line":1621},[118,118605,355],{"class":124},[118,118607,118608],{"class":233},"[](",[118,118610,118611],{"class":1967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[118,118613,135],{"class":233},[118,118615,118616],{"class":120,"line":1627},[118,118617,2404],{"emptyLinePlaceholder":45},[118,118619,118620],{"class":120,"line":1632},[118,118621,118622],{"class":1967},"粘贴进去\n",[118,118624,118625],{"class":120,"line":1646},[118,118626,2404],{"emptyLinePlaceholder":45},[118,118628,118629,118631,118633,118636],{"class":120,"line":1651},[118,118630,355],{"class":124},[118,118632,118608],{"class":233},[118,118634,118635],{"class":1967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[118,118637,135],{"class":233},[118,118639,118640],{"class":120,"line":1657},[118,118641,2404],{"emptyLinePlaceholder":45},[118,118643,118644,118647,118650,118653,118655],{"class":120,"line":1678},[118,118645,118646],{"class":1967},"按一下ESC，然后英文冒号，输入",[118,118648,118649],{"class":233}," `",[118,118651,118652],{"class":1967},":wq!",[118,118654,1100],{"class":233},[118,118656,118657],{"class":1967},"然后回车\n",[118,118659,118660],{"class":120,"line":1683},[118,118661,2404],{"emptyLinePlaceholder":45},[118,118663,118664,118666,118668,118671],{"class":120,"line":1697},[118,118665,355],{"class":124},[118,118667,118608],{"class":233},[118,118669,118670],{"class":1967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[118,118672,135],{"class":233},[118,118674,118675],{"class":120,"line":1702},[118,118676,2404],{"emptyLinePlaceholder":45},[118,118678,118679],{"class":120,"line":1731},[118,118680,118681],{"class":1967},"输入以下命令\n",[118,118683,118684],{"class":120,"line":1736},[118,118685,2404],{"emptyLinePlaceholder":45},[118,118687,118688,118691],{"class":120,"line":1753},[118,118689,118690],{"class":233},"```",[118,118692,118693],{"class":1967},"Bash\n",[118,118695,118696,118698,118700],{"class":120,"line":1758},[118,118697,24581],{"class":1967},[118,118699,117310],{"class":233},[118,118701,26235],{"class":233},[15,118703,118704],{},"这里被替换成对应学校则成功",[15,118706,118707],{},[1466,118708],{"alt":39,"src":118709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[60,118711,118713],{"id":118712},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[89,118715,118717],{"id":118716},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[15,118719,118720],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[15,118722,118723],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[15,118725,118726],{},[21,118727,118728],{"href":118728,"rel":118729},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25],[15,118731,118732],{},[1466,118733],{"alt":39,"src":118734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[15,118736,118737],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[15,118739,118740],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[15,118742,118743],{},[1466,118744],{"alt":39,"src":118745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[109,118747,118749],{"className":117289,"code":118748,"language":117291,"meta":39,"style":39},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[115,118750,118751,118756,118763,118768],{"__ignoreMap":39},[118,118752,118753],{"class":120,"line":121},[118,118754,118755],{"class":187},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[118,118757,118758,118760],{"class":120,"line":40},[118,118759,101269],{"class":177},[118,118761,118762],{"class":233}," ~\u002FDownloads\n",[118,118764,118765],{"class":120,"line":1183},[118,118766,118767],{"class":187},"#下方chrome安装包名不一定是这个，根据名字来看\n",[118,118769,118770,118772,118774,118776],{"class":120,"line":1198},[118,118771,24581],{"class":1967},[118,118773,117310],{"class":233},[118,118775,23839],{"class":233},[118,118777,118778],{"class":233}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[15,118780,118781],{},[1466,118782],{"alt":39,"src":118783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[89,118785,118787],{"id":118786},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[109,118789,118791],{"className":117289,"code":118790,"language":117291,"meta":39,"style":39},"# 老版\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",[115,118792,118793,118798,118806,118817,118822,118826,118831,118841,118849,118860],{"__ignoreMap":39},[118,118794,118795],{"class":120,"line":121},[118,118796,118797],{"class":187},"# 老版\n",[118,118799,118800,118802,118804],{"class":120,"line":40},[118,118801,24581],{"class":1967},[118,118803,117310],{"class":233},[118,118805,26235],{"class":233},[118,118807,118808,118810,118812,118814],{"class":120,"line":1183},[118,118809,24581],{"class":1967},[118,118811,117310],{"class":233},[118,118813,23839],{"class":233},[118,118815,118816],{"class":233}," neofetch\n",[118,118818,118819],{"class":120,"line":1198},[118,118820,118821],{"class":1967},"neofetch\n",[118,118823,118824],{"class":120,"line":1204},[118,118825,2404],{"emptyLinePlaceholder":45},[118,118827,118828],{"class":120,"line":1218},[118,118829,118830],{"class":187},"# 新版\n",[118,118832,118833,118835,118838],{"class":120,"line":1224},[118,118834,24581],{"class":1967},[118,118836,118837],{"class":233}," add-apt-repository",[118,118839,118840],{"class":233}," ppa:zhangsongcui3371\u002Ffastfetch\n",[118,118842,118843,118845,118847],{"class":120,"line":1315},[118,118844,24581],{"class":1967},[118,118846,117310],{"class":233},[118,118848,26235],{"class":233},[118,118850,118851,118853,118855,118857],{"class":120,"line":1321},[118,118852,24581],{"class":1967},[118,118854,117310],{"class":233},[118,118856,23839],{"class":233},[118,118858,118859],{"class":233}," fastfetch\n",[118,118861,118862],{"class":120,"line":1333},[118,118863,118864],{"class":1967},"fastfetch\n",[15,118866,118867],{},"这里显示，一共有3162个debian的程序，7个snap程序",[15,118869,118870],{},[1466,118871],{"alt":39,"src":118872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[89,118874,118876],{"id":118875},"_323-移除snap应用","3.2.3 移除snap应用",[15,118878,118879],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[109,118881,118883],{"className":117289,"code":118882,"language":117291,"meta":39,"style":39},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[115,118884,118885,118897,118908],{"__ignoreMap":39},[118,118886,118887,118889,118891,118894],{"class":120,"line":121},[118,118888,24581],{"class":1967},[118,118890,26506],{"class":233},[118,118892,118893],{"class":233}," disable",[118,118895,118896],{"class":233}," snapd.service\n",[118,118898,118899,118901,118903,118905],{"class":120,"line":40},[118,118900,24581],{"class":1967},[118,118902,26506],{"class":233},[118,118904,118893],{"class":233},[118,118906,118907],{"class":233}," snapd.socket\n",[118,118909,118910,118912,118914,118916],{"class":120,"line":1183},[118,118911,24581],{"class":1967},[118,118913,26506],{"class":233},[118,118915,118893],{"class":233},[118,118917,118918],{"class":233}," snapd.seeded.service\n",[15,118920,118921],{},"然后查看snap应用列表",[15,118923,118924,118925,118930],{},"根据你安装的选择不同（最小安装或普通安装），有",[21,118926,118929],{"href":118927,"rel":118928},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[109,118932,118934],{"className":117289,"code":118933,"language":117291,"meta":39,"style":39},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[115,118935,118936,118941],{"__ignoreMap":39},[118,118937,118938],{"class":120,"line":121},[118,118939,118940],{"class":187},"# 查询当前系统上snap安装了哪些app\n",[118,118942,118943,118946],{"class":120,"line":40},[118,118944,118945],{"class":1967},"snap",[118,118947,118948],{"class":233}," list\n",[15,118950,118951],{},[1466,118952],{"alt":39,"src":118953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[15,118955,118956,118957,118960],{},"卸载掉图中所有应用，按照 ",[278,118958,118959],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[109,118962,118964],{"className":117289,"code":118963,"language":117291,"meta":39,"style":39},"#移除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",[115,118965,118966,118971,118983,118988,118999,119004,119015,119020,119031,119036,119040,119045,119056,119067],{"__ignoreMap":39},[118,118967,118968],{"class":120,"line":121},[118,118969,118970],{"class":187},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[118,118972,118973,118975,118978,118980],{"class":120,"line":40},[118,118974,24581],{"class":1967},[118,118976,118977],{"class":233}," snap",[118,118979,26072],{"class":233},[118,118981,118982],{"class":233}," snap-store\n",[118,118984,118985],{"class":120,"line":1183},[118,118986,118987],{"class":187},"#移除firefox浏览器\n",[118,118989,118990,118992,118994,118996],{"class":120,"line":1198},[118,118991,24581],{"class":1967},[118,118993,118977],{"class":233},[118,118995,26072],{"class":233},[118,118997,118998],{"class":233}," firefox\n",[118,119000,119001],{"class":120,"line":1204},[118,119002,119003],{"class":187},"#移除gnome-42-2204\n",[118,119005,119006,119008,119010,119012],{"class":120,"line":1218},[118,119007,24581],{"class":1967},[118,119009,118977],{"class":233},[118,119011,26072],{"class":233},[118,119013,119014],{"class":233}," gnome-42-2204\n",[118,119016,119017],{"class":120,"line":1224},[118,119018,119019],{"class":187},"#移除gtk-common-themes\n",[118,119021,119022,119024,119026,119028],{"class":120,"line":1315},[118,119023,24581],{"class":1967},[118,119025,118977],{"class":233},[118,119027,26072],{"class":233},[118,119029,119030],{"class":233}," gtk-common-themes\n",[118,119032,119033],{"class":120,"line":1321},[118,119034,119035],{"class":187},"#移除其它...\n",[118,119037,119038],{"class":120,"line":1333},[118,119039,2678],{"class":128},[118,119041,119042],{"class":120,"line":1616},[118,119043,119044],{"class":187},"#移除core22,bare以及snapd\n",[118,119046,119047,119049,119051,119053],{"class":120,"line":1621},[118,119048,24581],{"class":1967},[118,119050,118977],{"class":233},[118,119052,26072],{"class":233},[118,119054,119055],{"class":233}," core22\n",[118,119057,119058,119060,119062,119064],{"class":120,"line":1627},[118,119059,24581],{"class":1967},[118,119061,118977],{"class":233},[118,119063,26072],{"class":233},[118,119065,119066],{"class":233}," bare\n",[118,119068,119069,119071,119073,119075],{"class":120,"line":1632},[118,119070,24581],{"class":1967},[118,119072,118977],{"class":233},[118,119074,26072],{"class":233},[118,119076,119077],{"class":233}," snapd\n",[15,119079,119080],{},[1466,119081],{"alt":39,"src":119082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[15,119084,119085],{},"输入以下命令查看是否还有snap包",[109,119087,119089],{"className":117289,"code":119088,"language":117291,"meta":39,"style":39},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[115,119090,119091,119097,119101,119105,119109],{"__ignoreMap":39},[118,119092,119093,119095],{"class":120,"line":121},[118,119094,118945],{"class":1967},[118,119096,118948],{"class":233},[118,119098,119099],{"class":120,"line":40},[118,119100,118797],{"class":187},[118,119102,119103],{"class":120,"line":1183},[118,119104,118821],{"class":1967},[118,119106,119107],{"class":120,"line":1198},[118,119108,118830],{"class":187},[118,119110,119111],{"class":120,"line":1204},[118,119112,118864],{"class":1967},[15,119114,119115],{},[1466,119116],{"alt":39,"src":119117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[89,119119,119121],{"id":119120},"_324-移除snap","3.2.4 移除snap",[15,119123,119124,119125,119130],{},"在删除掉",[21,119126,119129],{"href":119127,"rel":119128},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[109,119132,119134],{"className":117289,"code":119133,"language":117291,"meta":39,"style":39}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[115,119135,119136,119141,119154,119159,119170],{"__ignoreMap":39},[118,119137,119138],{"class":120,"line":121},[118,119139,119140],{"class":187}," #使用apt移除掉snap\n",[118,119142,119143,119145,119147,119149,119152],{"class":120,"line":40},[118,119144,24581],{"class":1967},[118,119146,117310],{"class":233},[118,119148,117618],{"class":233},[118,119150,119151],{"class":177}," --purge",[118,119153,119077],{"class":233},[118,119155,119156],{"class":120,"line":1183},[118,119157,119158],{"class":187},"#移除snapd的一些目录\n",[118,119160,119161,119163,119165,119167],{"class":120,"line":1198},[118,119162,24581],{"class":1967},[118,119164,118546],{"class":233},[118,119166,25330],{"class":177},[118,119168,119169],{"class":233}," \u002Fvar\u002Fcache\u002Fsnapd\n",[118,119171,119172,119174,119176,119178],{"class":120,"line":1204},[118,119173,24581],{"class":1967},[118,119175,118546],{"class":233},[118,119177,25330],{"class":177},[118,119179,119180],{"class":233}," ~\u002Fsnap\n",[15,119182,119183,119184,119187],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[115,119185,119186],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[89,119189,119191],{"id":119190},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[15,119193,119194],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[109,119196,119198],{"className":117289,"code":119197,"language":117291,"meta":39,"style":39},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[115,119199,119200],{"__ignoreMap":39},[118,119201,119202,119204,119206],{"class":120,"line":121},[118,119203,24581],{"class":1967},[118,119205,118576],{"class":233},[118,119207,119208],{"class":233}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[15,119210,119211,119212,119215],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[115,119213,119214],{},":wq"," 回车",[109,119217,119219],{"className":117289,"code":119218,"language":117291,"meta":39,"style":39},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[115,119220,119221,119228,119242],{"__ignoreMap":39},[118,119222,119223,119226],{"class":120,"line":121},[118,119224,119225],{"class":1967},"Package:",[118,119227,119077],{"class":233},[118,119229,119230,119233,119236,119239],{"class":120,"line":40},[118,119231,119232],{"class":1967},"Pin:",[118,119234,119235],{"class":233}," release",[118,119237,119238],{"class":233}," a=",[118,119240,119241],{"class":177},"*\n",[118,119243,119244,119247],{"class":120,"line":1183},[118,119245,119246],{"class":1967},"Pin-Priority:",[118,119248,119249],{"class":177}," -10\n",[15,119251,119252],{},[1466,119253],{"alt":39,"src":119254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[89,119256,119258],{"id":119257},"_326-测试是否成功","3.2.6 测试是否成功",[109,119260,119262],{"className":117289,"code":119261,"language":117291,"meta":39,"style":39},"sudo apt update\nsudo apt install firefox\n",[115,119263,119264,119272],{"__ignoreMap":39},[118,119265,119266,119268,119270],{"class":120,"line":121},[118,119267,24581],{"class":1967},[118,119269,117310],{"class":233},[118,119271,26235],{"class":233},[118,119273,119274,119276,119278,119280],{"class":120,"line":40},[118,119275,24581],{"class":1967},[118,119277,117310],{"class":233},[118,119279,23839],{"class":233},[118,119281,118998],{"class":233},[15,119283,119284],{},"这里提示snapd无法被安装，就证明成功了",[15,119286,119287],{},[1466,119288],{"alt":39,"src":119289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[89,119291,119293],{"id":119292},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[15,119295,119296],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[15,119298,119299],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[15,119301,119302],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[109,119304,119306],{"className":117289,"code":119305,"language":117291,"meta":39,"style":39},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[115,119307,119308,119313,119322,119327,119335],{"__ignoreMap":39},[118,119309,119310],{"class":120,"line":121},[118,119311,119312],{"class":187},"# 添加Mozilla提供的源\n",[118,119314,119315,119317,119319],{"class":120,"line":40},[118,119316,24581],{"class":1967},[118,119318,118837],{"class":233},[118,119320,119321],{"class":233}," ppa:mozillateam\u002Fppa\n",[118,119323,119324],{"class":120,"line":1183},[118,119325,119326],{"class":187},"# 安装Firefox\n",[118,119328,119329,119331,119333],{"class":120,"line":1198},[118,119330,24581],{"class":1967},[118,119332,117310],{"class":233},[118,119334,26235],{"class":233},[118,119336,119337,119339,119341,119343],{"class":120,"line":1204},[118,119338,24581],{"class":1967},[118,119340,117310],{"class":233},[118,119342,23839],{"class":233},[118,119344,118998],{"class":233},[89,119346,119348],{"id":119347},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[15,119350,119351],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[15,119353,119354],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[109,119356,119358],{"className":117289,"code":119357,"language":117291,"meta":39,"style":39},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[115,119359,119360,119365,119375,119383,119387],{"__ignoreMap":39},[118,119361,119362],{"class":120,"line":121},[118,119363,119364],{"class":187},"#删掉禁止安装snap的配置文件\n",[118,119366,119367,119369,119371,119373],{"class":120,"line":40},[118,119368,24581],{"class":1967},[118,119370,118546],{"class":233},[118,119372,25330],{"class":177},[118,119374,119208],{"class":233},[118,119376,119377,119379,119381],{"class":120,"line":1183},[118,119378,24581],{"class":1967},[118,119380,117310],{"class":233},[118,119382,26235],{"class":233},[118,119384,119385],{"class":120,"line":1198},[118,119386,2404],{"emptyLinePlaceholder":45},[118,119388,119389,119391,119393],{"class":120,"line":1204},[118,119390,24581],{"class":1967},[118,119392,117310],{"class":233},[118,119394,119395],{"class":233}," dist-update\n",[60,119397,119399],{"id":119398},"_33-中文输入法","3.3 中文输入法",[89,119401,119403],{"id":119402},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[15,119405,119406],{},"官网下载搜狗输入法",[15,119408,119409],{},[1466,119410],{"alt":39,"src":119411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[15,119413,119414],{},[1466,119415],{"alt":39,"src":119416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[15,119418,119419],{},"打开终端输入如下",[109,119421,119423],{"className":117289,"code":119422,"language":117291,"meta":39,"style":39},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[115,119424,119425,119432],{"__ignoreMap":39},[118,119426,119427,119429],{"class":120,"line":121},[118,119428,101269],{"class":177},[118,119430,119431],{"class":233}," ~\u002FDownloads\u002F\n",[118,119433,119434,119436,119438,119440],{"class":120,"line":40},[118,119435,24581],{"class":1967},[118,119437,117310],{"class":233},[118,119439,23839],{"class":233},[118,119441,119442],{"class":233}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[15,119444,119445],{},"打开Fcitx",[15,119447,119448,119451],{},[1466,119449],{"alt":39,"src":119450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1466,119452],{"alt":39,"src":119453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[15,119455,119456],{},[1466,119457],{"alt":39,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[15,119460,119461],{},"添加搜狗输入法",[15,119463,119464],{},[1466,119465],{"alt":39,"src":119466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[15,119468,119469],{},[1466,119470],{"alt":39,"src":119471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[15,119473,119474],{},"将搜狗输入法设置为唯一输入法",[15,119476,119477],{},[1466,119478],{"alt":39,"src":119479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[89,119481,119483],{"id":119482},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[72,119485,119486],{},[75,119487,119488],{},"卸载旧输入法",[109,119490,119492],{"className":118516,"code":119491,"language":118518,"meta":39,"style":39},"sudo apt purge fcitx* ibus*\n",[115,119493,119494],{"__ignoreMap":39},[118,119495,119496,119498,119500,119502,119505,119507,119510],{"class":120,"line":121},[118,119497,24581],{"class":1967},[118,119499,117310],{"class":233},[118,119501,117651],{"class":233},[118,119503,119504],{"class":233}," fcitx",[118,119506,583],{"class":177},[118,119508,119509],{"class":233}," ibus",[118,119511,119241],{"class":177},[72,119513,119514],{"start":40},[75,119515,119516],{},"安装Fcitx5",[109,119518,119520],{"className":117289,"code":119519,"language":117291,"meta":39,"style":39},"# 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",[115,119521,119522,119527,119541,119545,119550,119559,119567],{"__ignoreMap":39},[118,119523,119524],{"class":120,"line":121},[118,119525,119526],{"class":187},"# Ubuntu22.04及以上、Debian12及以上\n",[118,119528,119529,119531,119533,119535,119538],{"class":120,"line":40},[118,119530,24581],{"class":1967},[118,119532,117310],{"class":233},[118,119534,23839],{"class":233},[118,119536,119537],{"class":233}," fcitx5",[118,119539,119540],{"class":233}," fcitx5-chinese-addons\n",[118,119542,119543],{"class":120,"line":1183},[118,119544,2404],{"emptyLinePlaceholder":45},[118,119546,119547],{"class":120,"line":1198},[118,119548,119549],{"class":187},"# Ubuntu20.04\n",[118,119551,119552,119554,119556],{"class":120,"line":1204},[118,119553,24581],{"class":1967},[118,119555,118837],{"class":233},[118,119557,119558],{"class":233}," ppa:zhsj\u002Ffcitx5\n",[118,119560,119561,119563,119565],{"class":120,"line":1218},[118,119562,24581],{"class":1967},[118,119564,117310],{"class":233},[118,119566,26235],{"class":233},[118,119568,119569,119571,119573,119575,119577],{"class":120,"line":1224},[118,119570,24581],{"class":1967},[118,119572,117310],{"class":233},[118,119574,23839],{"class":233},[118,119576,119537],{"class":233},[118,119578,119540],{"class":233},[72,119580,119581,119584],{"start":1183},[75,119582,119583],{},"Reboot System",[75,119585,119586],{},"启动Fcitx5",[15,119588,119589],{},[1466,119590],{"alt":39,"src":119591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[72,119593,119594],{"start":1204},[75,119595,119596],{},"修改一些设置",[15,119598,119599],{},"将Pinyin和Keyboard - English US加入到左边。",[15,119601,119602],{},[1466,119603],{"alt":39,"src":119604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[15,119606,119607],{},"添加快捷键以便于更好切换中英文",[15,119609,119610],{},[1466,119611],{"alt":39,"src":119612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[72,119614,119615],{"start":1218},[75,119616,119617],{},"重启",[109,119619,119621],{"className":118516,"code":119620,"language":118518,"meta":39,"style":39},"sudo shutdown -r now\n",[115,119622,119623],{"__ignoreMap":39},[118,119624,119625,119627,119630,119633],{"class":120,"line":121},[118,119626,24581],{"class":1967},[118,119628,119629],{"class":233}," shutdown",[118,119631,119632],{"class":177}," -r",[118,119634,119635],{"class":233}," now\n",[72,119637,119638],{"start":1224},[75,119639,119640],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[15,119642,119643],{},[21,119644,119645],{"href":119645,"rel":119646},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25],[72,119648,119649],{"start":1315},[75,119650,119651],{},"再重启",[109,119653,119654],{"className":118516,"code":119620,"language":118518,"meta":39,"style":39},[115,119655,119656],{"__ignoreMap":39},[118,119657,119658,119660,119662,119664],{"class":120,"line":121},[118,119659,24581],{"class":1967},[118,119661,119629],{"class":233},[118,119663,119632],{"class":177},[118,119665,119635],{"class":233},[60,119667,119669],{"id":119668},"_34-pip3源替换","3.4 pip3源替换",[15,119671,119672],{},"非Debian系发行版需要做。",[15,119674,119675],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[15,119677,119678],{},"使用dnf的系统也可能不用做。",[109,119680,119682],{"className":117289,"code":119681,"language":117291,"meta":39,"style":39},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[115,119683,119684,119689,119696,119701,119706],{"__ignoreMap":39},[118,119685,119686],{"class":120,"line":121},[118,119687,119688],{"class":187},"# 检查是否已安装 pip\n",[118,119690,119691,119694],{"class":120,"line":40},[118,119692,119693],{"class":1967},"pip3",[118,119695,26286],{"class":177},[118,119697,119698],{"class":120,"line":1183},[118,119699,119700],{"class":187},"# 如果未安装，先安装 pip3（见下方）\n",[118,119702,119703],{"class":120,"line":1198},[118,119704,119705],{"class":187},"# 配置 pip 使用清华源\n",[118,119707,119708,119710,119713,119716,119719],{"class":120,"line":1204},[118,119709,119693],{"class":1967},[118,119711,119712],{"class":233}," config",[118,119714,119715],{"class":233}," set",[118,119717,119718],{"class":233}," global.index-url",[118,119720,119721],{"class":233}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[15,119723,119724],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[15,119726,119727],{},[1466,119728],{"alt":39,"src":119729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[109,119731,119733],{"className":117289,"code":119732,"language":117291,"meta":39,"style":39},"#安装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",[115,119734,119735,119740,119748,119759,119763,119768,119787,119791,119796,119808,119812,119817],{"__ignoreMap":39},[118,119736,119737],{"class":120,"line":121},[118,119738,119739],{"class":187},"#安装pip3\n",[118,119741,119742,119744,119746],{"class":120,"line":40},[118,119743,24581],{"class":1967},[118,119745,117310],{"class":233},[118,119747,26235],{"class":233},[118,119749,119750,119752,119754,119756],{"class":120,"line":1183},[118,119751,24581],{"class":1967},[118,119753,26069],{"class":233},[118,119755,23839],{"class":233},[118,119757,119758],{"class":233}," python3-pip\n",[118,119760,119761],{"class":120,"line":1198},[118,119762,2404],{"emptyLinePlaceholder":45},[118,119764,119765],{"class":120,"line":1204},[118,119766,119767],{"class":187},"#更新pip3\n",[118,119769,119770,119772,119774,119776,119778,119780,119783,119785],{"class":120,"line":1218},[118,119771,100872],{"class":1967},[118,119773,100875],{"class":177},[118,119775,100898],{"class":233},[118,119777,23839],{"class":233},[118,119779,26423],{"class":177},[118,119781,119782],{"class":233}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[118,119784,100903],{"class":177},[118,119786,100906],{"class":233},[118,119788,119789],{"class":120,"line":1224},[118,119790,2404],{"emptyLinePlaceholder":45},[118,119792,119793],{"class":120,"line":1315},[118,119794,119795],{"class":187},"#设置pip源为清华源\n",[118,119797,119798,119800,119802,119804,119806],{"class":120,"line":1321},[118,119799,119693],{"class":1967},[118,119801,119712],{"class":233},[118,119803,119715],{"class":233},[118,119805,119718],{"class":233},[118,119807,119721],{"class":233},[118,119809,119810],{"class":120,"line":1333},[118,119811,2404],{"emptyLinePlaceholder":45},[118,119813,119814],{"class":120,"line":1616},[118,119815,119816],{"class":187},"#测试\n",[118,119818,119819,119821,119823,119825,119827,119829],{"class":120,"line":1621},[118,119820,100872],{"class":1967},[118,119822,100875],{"class":177},[118,119824,100898],{"class":233},[118,119826,23839],{"class":233},[118,119828,100903],{"class":177},[118,119830,100906],{"class":233},[15,119832,119833],{},"成功的话，会看到Looking后面是tsinghua字样。",[15,119835,119836],{},[1466,119837],{"alt":39,"src":119838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[60,119840,119842],{"id":119841},"_35-显卡驱动安装","3.5 显卡驱动安装",[89,119844,119846],{"id":119845},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[109,119848,119850],{"className":118516,"code":119849,"language":118518,"meta":39,"style":39},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[115,119851,119852,119857,119872,119877],{"__ignoreMap":39},[118,119853,119854],{"class":120,"line":121},[118,119855,119856],{"class":187},"# 如果是使用apt安装的驱动\n",[118,119858,119859,119861,119863,119865,119867,119870],{"class":120,"line":40},[118,119860,24581],{"class":1967},[118,119862,26069],{"class":233},[118,119864,26072],{"class":233},[118,119866,119151],{"class":177},[118,119868,119869],{"class":233}," nvidia",[118,119871,119241],{"class":177},[118,119873,119874],{"class":120,"line":1183},[118,119875,119876],{"class":187},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[118,119878,119879,119881],{"class":120,"line":1198},[118,119880,24581],{"class":1967},[118,119882,119883],{"class":233}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[89,119885,119887],{"id":119886},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22003,119889,119891],{"id":119890},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22915,119893,119895],{"id":119894},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[109,119897,119899],{"className":118516,"code":119898,"language":118518,"meta":39,"style":39},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[115,119900,119901,119906,119917,119922,119932,119937],{"__ignoreMap":39},[118,119902,119903],{"class":120,"line":121},[118,119904,119905],{"class":187},"# 安装英伟达驱动\n",[118,119907,119908,119910,119912,119914],{"class":120,"line":40},[118,119909,24581],{"class":1967},[118,119911,117310],{"class":233},[118,119913,23839],{"class":233},[118,119915,119916],{"class":233}," nvidia-driver-版本号\n",[118,119918,119919],{"class":120,"line":1183},[118,119920,119921],{"class":187},"# 重启 \n",[118,119923,119924,119926,119928,119930],{"class":120,"line":1198},[118,119925,24581],{"class":1967},[118,119927,119629],{"class":233},[118,119929,119632],{"class":177},[118,119931,119635],{"class":233},[118,119933,119934],{"class":120,"line":1204},[118,119935,119936],{"class":187},"# 检查驱动是否安装成功\n",[118,119938,119939],{"class":120,"line":1218},[118,119940,119941],{"class":1967},"nvidia-smi\n",[22915,119943,119945],{"id":119944},"_35212-debian","3.5.2.1.2 Debian",[109,119947,119949],{"className":118516,"code":119948,"language":118518,"meta":39,"style":39},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[115,119950,119951,119955,119969,119973,119983,119987],{"__ignoreMap":39},[118,119952,119953],{"class":120,"line":121},[118,119954,119905],{"class":187},[118,119956,119957,119959,119961,119963,119966],{"class":120,"line":40},[118,119958,24581],{"class":1967},[118,119960,117310],{"class":233},[118,119962,23839],{"class":233},[118,119964,119965],{"class":233}," nvidia-driver",[118,119967,119968],{"class":233}," nvidia-settings\n",[118,119970,119971],{"class":120,"line":1183},[118,119972,119921],{"class":187},[118,119974,119975,119977,119979,119981],{"class":120,"line":1198},[118,119976,24581],{"class":1967},[118,119978,119629],{"class":233},[118,119980,119632],{"class":177},[118,119982,119635],{"class":233},[118,119984,119985],{"class":120,"line":1204},[118,119986,119936],{"class":187},[118,119988,119989],{"class":120,"line":1218},[118,119990,119941],{"class":1967},[22003,119992,119994],{"id":119993},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[15,119996,119997,119998,120001],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[278,119999,120000],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[15,120003,120004,120005],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23558,120006,120007],{},[278,120008,120009],{},"（也可以不禁用桌面环境，直接进行下一步。）",[109,120011,120013],{"className":118516,"code":120012,"language":118518,"meta":39,"style":39},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[115,120014,120015,120020,120030,120035,120048,120053],{"__ignoreMap":39},[118,120016,120017],{"class":120,"line":121},[118,120018,120019],{"class":187},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[118,120021,120022,120024,120027],{"class":120,"line":40},[118,120023,24581],{"class":1967},[118,120025,120026],{"class":233}," telinit",[118,120028,120029],{"class":177}," 3\n",[118,120031,120032],{"class":120,"line":1183},[118,120033,120034],{"class":187},"# ubuntu 使用下方命令\n",[118,120036,120037,120039,120042,120045],{"class":120,"line":1198},[118,120038,24581],{"class":1967},[118,120040,120041],{"class":233}," service",[118,120043,120044],{"class":233}," lightdm",[118,120046,120047],{"class":233}," stop\n",[118,120049,120050],{"class":120,"line":1204},[118,120051,120052],{"class":187},"# Fedora 使用下方命令\n",[118,120054,120055,120057,120059,120062],{"class":120,"line":1218},[118,120056,24581],{"class":1967},[118,120058,26506],{"class":233},[118,120060,120061],{"class":233}," isolate",[118,120063,120064],{"class":233}," multi-user.target\n",[15,120066,120067],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[109,120069,120071],{"className":118516,"code":120070,"language":118518,"meta":39,"style":39},"# 编译环境+准备工作\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",[115,120072,120073,120078,120089,120094,120101,120106,120118,120123,120130,120135],{"__ignoreMap":39},[118,120074,120075],{"class":120,"line":121},[118,120076,120077],{"class":187},"# 编译环境+准备工作\n",[118,120079,120080,120082,120084,120086],{"class":120,"line":40},[118,120081,24581],{"class":1967},[118,120083,117310],{"class":233},[118,120085,23839],{"class":233},[118,120087,120088],{"class":233}," build-essential\n",[118,120090,120091],{"class":120,"line":1183},[118,120092,120093],{"class":187},"# 进入到.run目录中\n",[118,120095,120096,120098],{"class":120,"line":1198},[118,120097,101269],{"class":177},[118,120099,120100],{"class":233}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[118,120102,120103],{"class":120,"line":1204},[118,120104,120105],{"class":187},"# 给驱动文件增加可执行权限：\n",[118,120107,120108,120110,120112,120115],{"class":120,"line":1218},[118,120109,24581],{"class":1967},[118,120111,24584],{"class":233},[118,120113,120114],{"class":233}," a+x",[118,120116,120117],{"class":233}," NVIDIA-Linux-x86_64-550.107.02.run\n",[118,120119,120120],{"class":120,"line":1224},[118,120121,120122],{"class":187},"# 然后执行安装：\n",[118,120124,120125,120127],{"class":120,"line":1315},[118,120126,24581],{"class":1967},[118,120128,120129],{"class":233}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[118,120131,120132],{"class":120,"line":1321},[118,120133,120134],{"class":187},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[118,120136,120137,120139,120142],{"class":120,"line":1333},[118,120138,24581],{"class":1967},[118,120140,120141],{"class":233}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[118,120143,120144],{"class":177},"  --no-opengl-files\n",[15,120146,120147],{},"安装完毕重启即可",[109,120149,120151],{"className":118516,"code":120150,"language":118518,"meta":39,"style":39},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[115,120152,120153,120157,120163,120167],{"__ignoreMap":39},[118,120154,120155],{"class":120,"line":121},[118,120156,119921],{"class":187},[118,120158,120159,120161],{"class":120,"line":40},[118,120160,24581],{"class":1967},[118,120162,26640],{"class":233},[118,120164,120165],{"class":120,"line":1183},[118,120166,119936],{"class":187},[118,120168,120169],{"class":120,"line":1198},[118,120170,119941],{"class":1967},[89,120172,120174],{"id":120173},"_353-安装cuda","3.5.3 安装CUDA",[15,120176,120177],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[15,120179,120180],{},[1466,120181],{"alt":39,"src":120182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[72,120184,120185],{},[75,120186,120187],{},"先查看显卡驱动所支持的最高CUDA版本",[109,120189,120190],{"className":118516,"code":119941,"language":118518,"meta":39,"style":39},[115,120191,120192],{"__ignoreMap":39},[118,120193,120194],{"class":120,"line":121},[118,120195,119941],{"class":1967},[15,120197,120198],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[15,120200,120201],{},[1466,120202],{"alt":39,"src":120203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[72,120205,120206],{"start":40},[75,120207,120208],{},"下载CUDA并安装CUDA",[15,120210,118295,120211],{},[21,120212,118298],{"href":118298,"rel":120213},[25],[15,120215,120216],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[15,120218,120219],{},[1466,120220],{"alt":39,"src":120221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[15,120223,120224,120225,120230],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[21,120226,120229],{"href":120227,"rel":120228},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25],"Vinci机器人队单片机教程","）",[15,120232,120233],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[15,120235,120236],{},[1466,120237],{"alt":39,"src":120238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[15,120240,120241],{},"将最下方框框里的命令敲入终端",[109,120243,120245],{"className":118516,"code":120244,"language":118518,"meta":39,"style":39},"# 在当前文件夹下创建一个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",[115,120246,120247,120252,120261,120266,120273,120278,120286,120291,120302,120307],{"__ignoreMap":39},[118,120248,120249],{"class":120,"line":121},[118,120250,120251],{"class":187},"# 在当前文件夹下创建一个ttt的子文件夹\n",[118,120253,120254,120256,120258],{"class":120,"line":40},[118,120255,101259],{"class":1967},[118,120257,29209],{"class":177},[118,120259,120260],{"class":233}," .\u002Fttt\n",[118,120262,120263],{"class":120,"line":1183},[118,120264,120265],{"class":187},"# 进入ttt文件夹\n",[118,120267,120268,120270],{"class":120,"line":1198},[118,120269,101269],{"class":177},[118,120271,120272],{"class":233}," ttt\n",[118,120274,120275],{"class":120,"line":1204},[118,120276,120277],{"class":187},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[118,120279,120280,120283],{"class":120,"line":1218},[118,120281,120282],{"class":1967},"wget",[118,120284,120285],{"class":233}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[118,120287,120288],{"class":120,"line":1224},[118,120289,120290],{"class":187},"# 给予权限\n",[118,120292,120293,120295,120297,120299],{"class":120,"line":1315},[118,120294,24581],{"class":1967},[118,120296,24584],{"class":233},[118,120298,120114],{"class":233},[118,120300,120301],{"class":233}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[118,120303,120304],{"class":120,"line":1321},[118,120305,120306],{"class":187},"# 运行脚本\n",[118,120308,120309,120311],{"class":120,"line":1333},[118,120310,24581],{"class":1967},[118,120312,120301],{"class":233},[15,120314,120315],{},[1466,120316],{"alt":39,"src":120317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[15,120319,120320],{},"正在安装中：",[15,120322,120323],{},[1466,120324],{"alt":39,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[15,120327,120328],{},"输入accept接受即可",[15,120330,120331],{},[1466,120332],{"alt":39,"src":120333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[15,120335,120336],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[15,120338,120339],{},[1466,120340],{"alt":39,"src":120341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[15,120343,120344],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[15,120346,120347],{},[1466,120348],{"alt":39,"src":120349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[72,120351,120352],{"start":1183},[75,120353,120354],{},"配置环境",[15,120356,120357],{},"根据上方确认一下路径，比如我上面红色框起来的为",[109,120359,120361],{"className":118516,"code":120360,"language":118518,"meta":39,"style":39},"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",[115,120362,120363,120379,120394],{"__ignoreMap":39},[118,120364,120365,120368,120371,120374,120377],{"class":120,"line":121},[118,120366,120367],{"class":1967},"Please",[118,120369,120370],{"class":233}," make",[118,120372,120373],{"class":233}," sure",[118,120375,120376],{"class":233}," that",[118,120378,2678],{"class":128},[118,120380,120381,120383,120386,120389,120392],{"class":120,"line":40},[118,120382,52264],{"class":1967},[118,120384,120385],{"class":233},"   PATH",[118,120387,120388],{"class":233}," includes",[118,120390,120391],{"class":233}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[118,120393,2678],{"class":128},[118,120395,120396,120398,120401,120403,120406,120409,120411,120414,120417,120420,120423,120425,120428,120430],{"class":120,"line":1183},[118,120397,52264],{"class":1967},[118,120399,120400],{"class":233},"   LD_LIBRARY_PATH",[118,120402,120388],{"class":233},[118,120404,120405],{"class":233}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[118,120407,120408],{"class":233}," or,",[118,120410,5214],{"class":233},[118,120412,120413],{"class":233}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[118,120415,120416],{"class":233}," to",[118,120418,120419],{"class":233}," \u002Fetc\u002Fld.so.conf",[118,120421,120422],{"class":233}," and",[118,120424,27223],{"class":233},[118,120426,120427],{"class":233}," ldconfig",[118,120429,64597],{"class":233},[118,120431,120432],{"class":233}," root\n",[15,120434,120435],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[109,120437,120439],{"className":118516,"code":120438,"language":118518,"meta":39,"style":39},"which nvcc\n",[115,120440,120441],{"__ignoreMap":39},[118,120442,120443,120446],{"class":120,"line":121},[118,120444,120445],{"class":177},"which",[118,120447,120448],{"class":233}," nvcc\n",[15,120450,120451],{},[1466,120452],{"alt":39,"src":120453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[15,120455,120456],{},"所以我进行以下操作：",[109,120458,120460],{"className":118516,"code":120459,"language":118518,"meta":39,"style":39},"sudo vim ~\u002F.bashrc\n",[115,120461,120462],{"__ignoreMap":39},[118,120463,120464,120466,120468],{"class":120,"line":121},[118,120465,24581],{"class":1967},[118,120467,118576],{"class":233},[118,120469,120470],{"class":233}," ~\u002F.bashrc\n",[15,120472,120473],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[109,120475,120477],{"className":118516,"code":120476,"language":118518,"meta":39,"style":39},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[115,120478,120479,120491],{"__ignoreMap":39},[118,120480,120481,120483,120486,120488],{"class":120,"line":121},[118,120482,25047],{"class":124},[118,120484,120485],{"class":128}," PATH",[118,120487,174],{"class":124},[118,120489,120490],{"class":128},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[118,120492,120493,120495,120498,120500],{"class":120,"line":40},[118,120494,25047],{"class":124},[118,120496,120497],{"class":128}," LD_LIBRARY_PATH",[118,120499,174],{"class":124},[118,120501,120502],{"class":128},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[15,120504,120505],{},[1466,120506],{"alt":39,"src":120507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[109,120509,120511],{"className":118516,"code":120510,"language":118518,"meta":39,"style":39},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[115,120512,120513,120518,120524,120529],{"__ignoreMap":39},[118,120514,120515],{"class":120,"line":121},[118,120516,120517],{"class":187},"# 刷新当前终端的环境变量\n",[118,120519,120520,120522],{"class":120,"line":40},[118,120521,100886],{"class":177},[118,120523,120470],{"class":233},[118,120525,120526],{"class":120,"line":1183},[118,120527,120528],{"class":187},"# 验证CUDA是否安装成功\n",[118,120530,120531,120534],{"class":120,"line":1198},[118,120532,120533],{"class":1967},"nvcc",[118,120535,120536],{"class":177}," -V\n",[15,120538,120539],{},"出现下图这种则安装成功。",[15,120541,120542],{},[1466,120543],{"alt":39,"src":120544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[89,120546,120548],{"id":120547},"_354-安装cudnn","3.5.4 安装cuDNN",[72,120550,120551],{},[75,120552,120553],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[15,120555,120556,120557,120562],{},"前往 NVIDIA cuDNN 下载页面：",[21,120558,120561],{"href":120559,"rel":120560},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[15,120564,120565],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[15,120567,120568],{},[1466,120569],{"alt":39,"src":120570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[15,120572,120573],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[15,120575,120576],{},[1466,120577],{"alt":39,"src":120578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[15,120580,120581],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[15,120583,120584],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[15,120586,120587],{},[278,120588,120589],{},"我这里选择所有Linux X86_64最通用的办法：",[15,120591,120592],{},"下载好的：",[15,120594,120595],{},[1466,120596],{"alt":39,"src":120597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[72,120599,120600],{"start":40},[75,120601,120602],{},"安装cuDNN",[15,120604,120605],{},"找到该文件所在目录，并打开终端，cd到该目录。",[15,120607,120608],{},[1466,120609],{"alt":39,"src":120610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[15,120612,120613],{},"解压文件，并复制到对应位置完成安装",[109,120615,120617],{"className":118516,"code":120616,"language":118518,"meta":39,"style":39},"# 解压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",[115,120618,120619,120624,120635,120640,120647,120652,120668,120682,120687,120698,120707,120711,120727],{"__ignoreMap":39},[118,120620,120621],{"class":120,"line":121},[118,120622,120623],{"class":187},"# 解压cuDNN文件\n",[118,120625,120626,120629,120632],{"class":120,"line":40},[118,120627,120628],{"class":1967},"tar",[118,120630,120631],{"class":177}," -xvf",[118,120633,120634],{"class":233}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[118,120636,120637],{"class":120,"line":1183},[118,120638,120639],{"class":187},"# cd进文件夹\n",[118,120641,120642,120644],{"class":120,"line":1198},[118,120643,101269],{"class":177},[118,120645,120646],{"class":233}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[118,120648,120649],{"class":120,"line":1204},[118,120650,120651],{"class":187},"# 复制cuDNN文件到CUDA目录\n",[118,120653,120654,120656,120658,120661,120663,120666],{"class":120,"line":1218},[118,120655,24581],{"class":1967},[118,120657,27854],{"class":233},[118,120659,120660],{"class":233}," include\u002Fcudnn",[118,120662,583],{"class":177},[118,120664,120665],{"class":233},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[118,120667,2678],{"class":128},[118,120669,120670,120672,120674,120677,120679],{"class":120,"line":1224},[118,120671,24581],{"class":1967},[118,120673,27854],{"class":233},[118,120675,120676],{"class":233}," lib\u002Flibcudnn",[118,120678,583],{"class":177},[118,120680,120681],{"class":233},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[118,120683,120684],{"class":120,"line":1315},[118,120685,120686],{"class":187},"# 对比一下有没有缺文件\n",[118,120688,120689,120691,120694,120696],{"class":120,"line":1321},[118,120690,26754],{"class":1967},[118,120692,120693],{"class":233}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[118,120695,583],{"class":177},[118,120697,2678],{"class":128},[118,120699,120700,120702,120705],{"class":120,"line":1333},[118,120701,26754],{"class":1967},[118,120703,120704],{"class":233}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[118,120706,119241],{"class":177},[118,120708,120709],{"class":120,"line":1616},[118,120710,120290],{"class":187},[118,120712,120713,120715,120717,120720,120722,120724],{"class":120,"line":1621},[118,120714,24581],{"class":1967},[118,120716,24584],{"class":233},[118,120718,120719],{"class":233}," a+r",[118,120721,120693],{"class":233},[118,120723,583],{"class":177},[118,120725,120726],{"class":128},"   \n",[118,120728,120729,120731,120733,120735,120737],{"class":120,"line":1627},[118,120730,24581],{"class":1967},[118,120732,24584],{"class":233},[118,120734,120719],{"class":233},[118,120736,120704],{"class":233},[118,120738,119241],{"class":177},[72,120740,120741],{"start":1183},[75,120742,120743],{},"检查是否安装成功",[109,120745,120747],{"className":118516,"code":120746,"language":118518,"meta":39,"style":39},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[115,120748,120749,120754],{"__ignoreMap":39},[118,120750,120751],{"class":120,"line":121},[118,120752,120753],{"class":187},"# 检查cuDNN版本命令\n",[118,120755,120756,120759,120762,120764,120766,120769,120772],{"class":120,"line":40},[118,120757,120758],{"class":1967},"cat",[118,120760,120761],{"class":233}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[118,120763,25114],{"class":124},[118,120765,30229],{"class":1967},[118,120767,120768],{"class":233}," CUDNN_MAJOR",[118,120770,120771],{"class":177}," -A",[118,120773,47716],{"class":177},[15,120775,120776],{},"出现下图这样的就是安装成功了",[15,120778,120779],{},[1466,120780],{"alt":39,"src":120781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[72,120783,120784],{"start":1198},[75,120785,120786],{},"软链接(一般不需要)",[109,120788,120790],{"className":118516,"code":120789,"language":118518,"meta":39,"style":39},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[115,120791,120792,120797],{"__ignoreMap":39},[118,120793,120794],{"class":120,"line":121},[118,120795,120796],{"class":187},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[118,120798,120799,120801],{"class":120,"line":40},[118,120800,24581],{"class":1967},[118,120802,120803],{"class":233}," ldconfig\n",[15,120805,120806],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[109,120808,120813],{"className":120809,"code":120810,"language":120811,"meta":120812,"style":39},"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",[115,120814,120815,120820,120825,120830,120835,120840,120845],{"__ignoreMap":39},[118,120816,120817],{"class":120,"line":121},[118,120818,120819],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[118,120821,120822],{"class":120,"line":40},[118,120823,120824],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[118,120826,120827],{"class":120,"line":1183},[118,120828,120829],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[118,120831,120832],{"class":120,"line":1198},[118,120833,120834],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[118,120836,120837],{"class":120,"line":1204},[118,120838,120839],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[118,120841,120842],{"class":120,"line":1218},[118,120843,120844],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[118,120846,120847],{"class":120,"line":1224},[118,120848,120849],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[15,120851,120852],{},"运行下方的命令",[109,120854,120856],{"className":118516,"code":120855,"language":118518,"meta":39,"style":39},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[115,120857,120858,120863,120870,120875],{"__ignoreMap":39},[118,120859,120860],{"class":120,"line":121},[118,120861,120862],{"class":187},"# cd进入CUDA路径\n",[118,120864,120865,120867],{"class":120,"line":40},[118,120866,101269],{"class":177},[118,120868,120869],{"class":233}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[118,120871,120872],{"class":120,"line":1183},[118,120873,120874],{"class":187}," # 查看本路径下的需要软链接的文件名\n",[118,120876,120877],{"class":120,"line":1198},[118,120878,120879],{"class":1967}," ls\n",[15,120881,120882],{},[1466,120883],{"alt":39,"src":120884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[15,120886,120887,120888,18415,120891,18415,120894,120897],{},"如上图，我需要将",[115,120889,120890],{},"libcudnn_xxx_xxxxx.so.8.9.7",[115,120892,120893],{},"libcudnn_xxx_xxxxx.so.8",[115,120895,120896],{},"libcudnn_xxx_xxxxx.so","软链接",[109,120899,120901],{"className":118516,"code":120900,"language":118518,"meta":39,"style":39},"# 创建符号链接。对于每个 .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",[115,120902,120903,120908,120924,120938,120952,120966,120980,120994,121008,121013,121019,121024],{"__ignoreMap":39},[118,120904,120905],{"class":120,"line":121},[118,120906,120907],{"class":187},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[118,120909,120910,120912,120915,120918,120921],{"class":120,"line":40},[118,120911,24581],{"class":1967},[118,120913,120914],{"class":233}," ln",[118,120916,120917],{"class":177}," -sf",[118,120919,120920],{"class":233}," libcudnn_cnn_train.so.8.9.7",[118,120922,120923],{"class":233}," libcudnn_cnn_train.so.8\n",[118,120925,120926,120928,120930,120932,120935],{"class":120,"line":1183},[118,120927,24581],{"class":1967},[118,120929,120914],{"class":233},[118,120931,120917],{"class":177},[118,120933,120934],{"class":233}," libcudnn_adv_infer.so.8.9.7",[118,120936,120937],{"class":233}," libcudnn_adv_infer.so.8\n",[118,120939,120940,120942,120944,120946,120949],{"class":120,"line":1198},[118,120941,24581],{"class":1967},[118,120943,120914],{"class":233},[118,120945,120917],{"class":177},[118,120947,120948],{"class":233}," libcudnn_adv_train.so.8.9.7",[118,120950,120951],{"class":233}," libcudnn_adv_train.so.8\n",[118,120953,120954,120956,120958,120960,120963],{"class":120,"line":1204},[118,120955,24581],{"class":1967},[118,120957,120914],{"class":233},[118,120959,120917],{"class":177},[118,120961,120962],{"class":233}," libcudnn_cnn_infer.so.8.9.7",[118,120964,120965],{"class":233}," libcudnn_cnn_infer.so.8\n",[118,120967,120968,120970,120972,120974,120977],{"class":120,"line":1218},[118,120969,24581],{"class":1967},[118,120971,120914],{"class":233},[118,120973,120917],{"class":177},[118,120975,120976],{"class":233}," libcudnn.so.8.9.7",[118,120978,120979],{"class":233}," libcudnn.so.8\n",[118,120981,120982,120984,120986,120988,120991],{"class":120,"line":1224},[118,120983,24581],{"class":1967},[118,120985,120914],{"class":233},[118,120987,120917],{"class":177},[118,120989,120990],{"class":233}," libcudnn_ops_infer.so.8.9.7",[118,120992,120993],{"class":233}," libcudnn_ops_infer.so.8\n",[118,120995,120996,120998,121000,121002,121005],{"class":120,"line":1315},[118,120997,24581],{"class":1967},[118,120999,120914],{"class":233},[118,121001,120917],{"class":177},[118,121003,121004],{"class":233}," libcudnn_ops_train.so.8.9.7",[118,121006,121007],{"class":233}," libcudnn_ops_train.so.8\n",[118,121009,121010],{"class":120,"line":1321},[118,121011,121012],{"class":187},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[118,121014,121015,121017],{"class":120,"line":1333},[118,121016,24581],{"class":1967},[118,121018,120803],{"class":233},[118,121020,121021],{"class":120,"line":1616},[118,121022,121023],{"class":187},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[118,121025,121026,121028,121031,121034,121036,121039],{"class":120,"line":1621},[118,121027,26754],{"class":1967},[118,121029,121030],{"class":177}," -l",[118,121032,121033],{"class":233}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[118,121035,583],{"class":177},[118,121037,121038],{"class":233},".so",[118,121040,119241],{"class":177},[89,121042,121044],{"id":121043},"_355-常见问题","3.5.5 常见问题",[72,121046,121047],{},[75,121048,121049],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[109,121051,121053],{"className":118516,"code":121052,"language":118518,"meta":39,"style":39},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[115,121054,121055],{"__ignoreMap":39},[118,121056,121057,121059,121061],{"class":120,"line":121},[118,121058,24581],{"class":1967},[118,121060,118576],{"class":233},[118,121062,121063],{"class":233}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[15,121065,121066],{},"blacklist-nouveau.conf文件内容如下：",[109,121068,121070],{"className":118516,"code":121069,"language":118518,"meta":39,"style":39},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[115,121071,121072,121080,121087,121099,121109],{"__ignoreMap":39},[118,121073,121074,121077],{"class":120,"line":121},[118,121075,121076],{"class":1967},"blacklist",[118,121078,121079],{"class":233}," nouveau\n",[118,121081,121082,121084],{"class":120,"line":40},[118,121083,121076],{"class":1967},[118,121085,121086],{"class":233}," lbm-nouveau\n",[118,121088,121089,121091,121094,121097],{"class":120,"line":1183},[118,121090,115923],{"class":1967},[118,121092,121093],{"class":233}," nouveau",[118,121095,121096],{"class":233}," modeset=",[118,121098,3089],{"class":177},[118,121100,121101,121104,121106],{"class":120,"line":1198},[118,121102,121103],{"class":177},"alias",[118,121105,121093],{"class":233},[118,121107,121108],{"class":233}," off\n",[118,121110,121111,121113,121116],{"class":120,"line":1204},[118,121112,121103],{"class":177},[118,121114,121115],{"class":233}," lbm-nouveau",[118,121117,121108],{"class":233},[15,121119,121120],{},"接着运行下方命令",[109,121122,121124],{"className":118516,"code":121123,"language":118518,"meta":39,"style":39},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[115,121125,121126,121136,121141],{"__ignoreMap":39},[118,121127,121128,121130,121133],{"class":120,"line":121},[118,121129,24581],{"class":1967},[118,121131,121132],{"class":233}," update-initramfs",[118,121134,121135],{"class":177}," -u\n",[118,121137,121138],{"class":120,"line":40},[118,121139,121140],{"class":1967},"或者\n",[118,121142,121143,121145,121148],{"class":120,"line":1183},[118,121144,24581],{"class":1967},[118,121146,121147],{"class":233}," dracut",[118,121149,121150],{"class":177}," --force\n",[15,121152,121153],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[109,121155,121157],{"className":118516,"code":121156,"language":118518,"meta":39,"style":39},"lsmod | grep nouveau\n",[115,121158,121159],{"__ignoreMap":39},[118,121160,121161,121164,121166,121168],{"class":120,"line":121},[118,121162,121163],{"class":1967},"lsmod",[118,121165,25114],{"class":124},[118,121167,30229],{"class":1967},[118,121169,121079],{"class":233},[72,121171,121172],{"start":40},[75,121173,121174],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[109,121176,121178],{"className":118516,"code":121177,"language":118518,"meta":39,"style":39},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[115,121179,121180],{"__ignoreMap":39},[118,121181,121182,121184,121186],{"class":120,"line":121},[118,121183,24581],{"class":1967},[118,121185,118576],{"class":233},[118,121187,121188],{"class":233}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[15,121190,121191],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[109,121193,121195],{"className":118516,"code":121194,"language":118518,"meta":39,"style":39},"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",[115,121196,121197,121205,121213,121221,121228,121236,121246,121254],{"__ignoreMap":39},[118,121198,121199,121202],{"class":120,"line":121},[118,121200,121201],{"class":1967},"Section",[118,121203,121204],{"class":233}," \"OutputClass\"\n",[118,121206,121207,121210],{"class":120,"line":40},[118,121208,121209],{"class":1967},"   Identifier",[118,121211,121212],{"class":233}," \"nvidia\"\n",[118,121214,121215,121218],{"class":120,"line":1183},[118,121216,121217],{"class":1967},"   MatchDriver",[118,121219,121220],{"class":233}," \"nvidia-drm\"\n",[118,121222,121223,121226],{"class":120,"line":1198},[118,121224,121225],{"class":1967},"   Driver",[118,121227,121212],{"class":233},[118,121229,121230,121233],{"class":120,"line":1204},[118,121231,121232],{"class":1967},"   Option",[118,121234,121235],{"class":233}," \"AllowEmptyInitialConfiguration\"\n",[118,121237,121238,121240,121243],{"class":120,"line":1218},[118,121239,121232],{"class":1967},[118,121241,121242],{"class":233}," \"PrimaryGPU\"",[118,121244,121245],{"class":233}," \"yes\"\n",[118,121247,121248,121251],{"class":120,"line":1224},[118,121249,121250],{"class":1967},"   ModulePath",[118,121252,121253],{"class":233}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[118,121255,121256],{"class":120,"line":1315},[118,121257,121258],{"class":1967},"EndSection\n",[72,121260,121261],{"start":1183},[75,121262,121263],{},"安装N卡驱动提示错误",[109,121265,121267],{"className":120809,"code":121266,"language":120811,"meta":120812,"style":39},"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",[115,121268,121269],{"__ignoreMap":39},[118,121270,121271],{"class":120,"line":121},[118,121272,121266],{},[72,121274,121275],{},[75,121276,121277],{},"检查当前运行的内核版本：",[15,121279,121280],{},"运行以下命令以查看你当前正在使用的内核版本：",[109,121282,121284],{"className":117289,"code":121283,"language":117291,"meta":39,"style":39},"uname -r\n",[115,121285,121286],{"__ignoreMap":39},[118,121287,121288,121290],{"class":120,"line":121},[118,121289,70197],{"class":1967},[118,121291,121292],{"class":177}," -r\n",[72,121294,121295],{"start":40},[75,121296,121297],{},"安装内核开发文件：",[15,121299,121300,121301,121304],{},"确保你已经安装了与当前内核版本相匹配的 ",[115,121302,121303],{},"kernel-devel"," 包。运行以下命令来安装：",[109,121306,121308],{"className":117289,"code":121307,"language":117291,"meta":39,"style":39},"sudo dnf install kernel-devel-$(uname -r)\n",[115,121309,121310],{"__ignoreMap":39},[118,121311,121312,121314,121316,121318,121321,121323,121325,121327],{"class":120,"line":121},[118,121313,24581],{"class":1967},[118,121315,26308],{"class":233},[118,121317,23839],{"class":233},[118,121319,121320],{"class":233}," kernel-devel-",[118,121322,25104],{"class":128},[118,121324,70197],{"class":1967},[118,121326,119632],{"class":177},[118,121328,135],{"class":128},[15,121330,121331],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[72,121333,121334],{"start":1183},[75,121335,121336],{},"安装内核源代码（如果需要）：",[15,121338,121339],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[109,121341,121343],{"className":117289,"code":121342,"language":117291,"meta":39,"style":39},"sudo dnf install kernel-headers kernel-source\n",[115,121344,121345],{"__ignoreMap":39},[118,121346,121347,121349,121351,121353,121356],{"class":120,"line":121},[118,121348,24581],{"class":1967},[118,121350,26308],{"class":233},[118,121352,23839],{"class":233},[118,121354,121355],{"class":233}," kernel-headers",[118,121357,121358],{"class":233}," kernel-source\n",[72,121360,121361],{"start":1198},[75,121362,121363],{},"检查安装：",[15,121365,121366,121367,121370],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[115,121368,121369],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[109,121372,121374],{"className":117289,"code":121373,"language":117291,"meta":39,"style":39},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[115,121375,121376],{"__ignoreMap":39},[118,121377,121378,121380],{"class":120,"line":121},[118,121379,26754],{"class":1967},[118,121381,121382],{"class":233}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[15,121384,121385,121386,121389],{},"如果仍然遇到问题，可以通过 ",[115,121387,121388],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5131,121391,121392],{},"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":39,"searchDepth":40,"depth":40,"links":121394},[121395,121399,121409,121413,121414],{"id":118492,"depth":40,"text":118493,"children":121396},[121397,121398],{"id":118502,"depth":1183,"text":118503},{"id":118512,"depth":1183,"text":118513},{"id":118712,"depth":40,"text":118713,"children":121400},[121401,121402,121403,121404,121405,121406,121407,121408],{"id":118716,"depth":1183,"text":118717},{"id":118786,"depth":1183,"text":118787},{"id":118875,"depth":1183,"text":118876},{"id":119120,"depth":1183,"text":119121},{"id":119190,"depth":1183,"text":119191},{"id":119257,"depth":1183,"text":119258},{"id":119292,"depth":1183,"text":119293},{"id":119347,"depth":1183,"text":119348},{"id":119398,"depth":40,"text":119399,"children":121410},[121411,121412],{"id":119402,"depth":1183,"text":119403},{"id":119482,"depth":1183,"text":119483},{"id":119668,"depth":40,"text":119669},{"id":119841,"depth":40,"text":119842,"children":121415},[121416,121417,121418,121419,121420],{"id":119845,"depth":1183,"text":119846},{"id":119886,"depth":1183,"text":119887},{"id":120173,"depth":1183,"text":120174},{"id":120547,"depth":1183,"text":120548},{"id":121043,"depth":1183,"text":121044},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118484,"description":42},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121427,"title":121428,"body":121429,"description":42,"extension":43,"meta":121769,"navigation":45,"path":121770,"seo":121771,"stem":121772,"__hash__":121773},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121430,"toc":121767},[121431,121434,121439,121442,121688,121693,121696,121732,121735,121764],[10,121432,121428],{"id":121433},"_4-命令教程长期积累",[72,121435,121436],{},[75,121437,121438],{},"大多数命令",[15,121440,121441],{},"常用 Linux 命令速查：",[109,121443,121445],{"className":117289,"code":121444,"language":117291,"meta":39,"style":39},"# 文件与目录\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",[115,121446,121447,121452,121459,121466,121474,121481,121488,121496,121504,121511,121518,121526,121530,121535,121542,121550,121557,121561,121566,121573,121581,121589,121597,121605,121609,121614,121622,121629,121636,121644,121652,121656,121661,121670,121679],{"__ignoreMap":39},[118,121448,121449],{"class":120,"line":121},[118,121450,121451],{"class":187},"# 文件与目录\n",[118,121453,121454,121456],{"class":120,"line":40},[118,121455,26754],{"class":1967},[118,121457,121458],{"class":187},"        # 列出目录内容\n",[118,121460,121461,121463],{"class":120,"line":1183},[118,121462,101269],{"class":177},[118,121464,121465],{"class":187},"        # 切换目录\n",[118,121467,121468,121471],{"class":120,"line":1198},[118,121469,121470],{"class":177},"pwd",[118,121472,121473],{"class":187},"       # 显示当前路径\n",[118,121475,121476,121478],{"class":120,"line":1204},[118,121477,101259],{"class":1967},[118,121479,121480],{"class":187},"     # 创建目录\n",[118,121482,121483,121485],{"class":120,"line":1218},[118,121484,25327],{"class":1967},[118,121486,121487],{"class":187},"        # 删除文件或目录\n",[118,121489,121490,121493],{"class":120,"line":1224},[118,121491,121492],{"class":1967},"cp",[118,121494,121495],{"class":187},"        # 复制文件或目录\n",[118,121497,121498,121501],{"class":120,"line":1315},[118,121499,121500],{"class":1967},"mv",[118,121502,121503],{"class":187},"        # 移动\u002F重命名文件或目录\n",[118,121505,121506,121508],{"class":120,"line":1321},[118,121507,101276],{"class":1967},[118,121509,121510],{"class":187},"     # 创建空文件\n",[118,121512,121513,121515],{"class":120,"line":1333},[118,121514,120758],{"class":1967},[118,121516,121517],{"class":187},"       # 查看文件内容\n",[118,121519,121520,121523],{"class":120,"line":1616},[118,121521,121522],{"class":1967},"head\u002Ftail",[118,121524,121525],{"class":187}," # 查看文件头部\u002F尾部\n",[118,121527,121528],{"class":120,"line":1621},[118,121529,2404],{"emptyLinePlaceholder":45},[118,121531,121532],{"class":120,"line":1627},[118,121533,121534],{"class":187},"# 权限管理\n",[118,121536,121537,121539],{"class":120,"line":1632},[118,121538,24616],{"class":1967},[118,121540,121541],{"class":187},"     # 修改文件权限\n",[118,121543,121544,121547],{"class":120,"line":1646},[118,121545,121546],{"class":1967},"chown",[118,121548,121549],{"class":187},"     # 修改文件所有者\n",[118,121551,121552,121554],{"class":120,"line":1651},[118,121553,24581],{"class":1967},[118,121555,121556],{"class":187},"      # 以管理员身份执行\n",[118,121558,121559],{"class":120,"line":1657},[118,121560,2404],{"emptyLinePlaceholder":45},[118,121562,121563],{"class":120,"line":1678},[118,121564,121565],{"class":187},"# 系统信息\n",[118,121567,121568,121570],{"class":120,"line":1683},[118,121569,70197],{"class":1967},[118,121571,121572],{"class":187},"     # 系统信息\n",[118,121574,121575,121578],{"class":120,"line":1697},[118,121576,121577],{"class":1967},"df",[118,121579,121580],{"class":187},"        # 磁盘使用情况\n",[118,121582,121583,121586],{"class":120,"line":1702},[118,121584,121585],{"class":1967},"free",[118,121587,121588],{"class":187},"      # 内存使用情况\n",[118,121590,121591,121594],{"class":120,"line":1731},[118,121592,121593],{"class":1967},"top\u002Fhtop",[118,121595,121596],{"class":187},"  # 进程监控\n",[118,121598,121599,121602],{"class":120,"line":1736},[118,121600,121601],{"class":1967},"ps",[118,121603,121604],{"class":187},"        # 查看进程\n",[118,121606,121607],{"class":120,"line":1753},[118,121608,2404],{"emptyLinePlaceholder":45},[118,121610,121611],{"class":120,"line":1758},[118,121612,121613],{"class":187},"# 网络\n",[118,121615,121616,121619],{"class":120,"line":1763},[118,121617,121618],{"class":1967},"ping",[118,121620,121621],{"class":187},"      # 测试网络连通性\n",[118,121623,121624,121626],{"class":120,"line":1768},[118,121625,26842],{"class":1967},[118,121627,121628],{"class":187},"      # 发送 HTTP 请求\n",[118,121630,121631,121633],{"class":120,"line":1782},[118,121632,120282],{"class":1967},[118,121634,121635],{"class":187},"      # 下载文件\n",[118,121637,121638,121641],{"class":120,"line":1787},[118,121639,121640],{"class":1967},"ssh",[118,121642,121643],{"class":187},"       # 远程登录\n",[118,121645,121646,121649],{"class":120,"line":2581},[118,121647,121648],{"class":1967},"scp",[118,121650,121651],{"class":187},"       # 远程文件传输\n",[118,121653,121654],{"class":120,"line":2595},[118,121655,2404],{"emptyLinePlaceholder":45},[118,121657,121658],{"class":120,"line":2603},[118,121659,121660],{"class":187},"# 包管理（Debian\u002FUbuntu）\n",[118,121662,121663,121665,121667],{"class":120,"line":2608},[118,121664,117361],{"class":1967},[118,121666,117340],{"class":233},[118,121668,121669],{"class":187},"   # 更新软件源\n",[118,121671,121672,121674,121676],{"class":120,"line":2614},[118,121673,117361],{"class":1967},[118,121675,23839],{"class":233},[118,121677,121678],{"class":187},"  # 安装软件包\n",[118,121680,121681,121683,121685],{"class":120,"line":2620},[118,121682,117361],{"class":1967},[118,121684,26072],{"class":233},[118,121686,121687],{"class":187},"   # 卸载软件包\n",[72,121689,121690],{"start":40},[75,121691,121692],{},"KDE Dolphin 以root打开",[15,121694,121695],{},"kde5",[109,121697,121699],{"className":117289,"code":121698,"language":117291,"meta":39,"style":39},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[115,121700,121701],{"__ignoreMap":39},[118,121702,121703,121706,121709,121712,121714,121716,121719,121722,121724,121727,121729],{"class":120,"line":121},[118,121704,121705],{"class":1967},"pkexec",[118,121707,121708],{"class":233}," env",[118,121710,121711],{"class":233}," DISPLAY=",[118,121713,28136],{"class":128},[118,121715,28194],{"class":233},[118,121717,121718],{"class":128},"$XAUTHORITY ",[118,121720,121721],{"class":233},"KDE_SESSION_VERSION=",[118,121723,447],{"class":177},[118,121725,121726],{"class":233}," KDE_FULL_SESSION=",[118,121728,1366],{"class":177},[118,121730,121731],{"class":233}," dolphin\n",[15,121733,121734],{},"kde6",[109,121736,121738],{"className":117289,"code":121737,"language":117291,"meta":39,"style":39},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[115,121739,121740],{"__ignoreMap":39},[118,121741,121742,121744,121746,121748,121750,121752,121754,121756,121758,121760,121762],{"class":120,"line":121},[118,121743,121705],{"class":1967},[118,121745,121708],{"class":233},[118,121747,121711],{"class":233},[118,121749,28136],{"class":128},[118,121751,28194],{"class":233},[118,121753,121718],{"class":128},[118,121755,121721],{"class":233},[118,121757,472],{"class":177},[118,121759,121726],{"class":233},[118,121761,1366],{"class":177},[118,121763,121731],{"class":233},[5131,121765,121766],{},"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":39,"searchDepth":40,"depth":40,"links":121768},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121428,"description":42},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121775,"title":121776,"body":121777,"description":42,"extension":43,"meta":121791,"navigation":45,"path":121792,"seo":121793,"stem":121794,"__hash__":121795},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121778,"toc":121789},[121779,121782],[10,121780,121776],{"id":121781},"_5-各种环境配置",[15,121783,121784],{},[21,121785,121788],{"href":121786,"rel":121787},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25],"电控组环境搭建大全",{"title":39,"searchDepth":40,"depth":40,"links":121790},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121776,"description":42},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121797,"title":121798,"body":121799,"description":42,"extension":43,"meta":122147,"navigation":45,"path":122148,"seo":122149,"stem":122150,"__hash__":122151},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121800,"toc":122139},[121801,121804,121808,121812,121816,121821,121828,121832,122125,122129,122136],[10,121802,121798],{"id":121803},"_6-拓展功能",[60,121805,121807],{"id":121806},"_61-wine","6.1 Wine",[60,121809,121811],{"id":121810},"_62-android","6.2 Android",[89,121813,121815],{"id":121814},"_621-i卡a卡","6.2.1 I卡、A卡",[72,121817,121818],{},[75,121819,121820],{},"Wayland-Waydroid(体验超级好)",[15,121822,121823,121824],{},"Waydroid 官网与安装指南：",[21,121825,121826],{"href":121826,"rel":121827},"https:\u002F\u002Fwaydro.id\u002F",[25],[89,121829,121831],{"id":121830},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[72,121833,121834],{},[75,121835,121836,121837,121839,121840,121844,121846,121849,121854,122051],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53709,121838],{},"BlissOS 官网下载：",[21,121841,121842],{"href":121842,"rel":121843},"https:\u002F\u002Fblissos.org\u002F",[25],[53709,121845],{},[1466,121847],{"alt":39,"src":121848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[72,121850,121851],{"start":1183},[75,121852,121853],{},"比较推荐的配置",[109,121855,121857],{"className":117289,"code":121856,"language":117291,"meta":39,"style":39},"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",[115,121858,121859,121866,121876,121886,121896,121908,121918,121925,121935,121944,121953,121963,121973,121982,121992,122002,122014,122024,122033,122043],{"__ignoreMap":39},[118,121860,121861,121864],{"class":120,"line":121},[118,121862,121863],{"class":1967},"qemu-system-x86_64",[118,121865,24683],{"class":177},[118,121867,121868,121871,121874],{"class":120,"line":40},[118,121869,121870],{"class":177},"        -M",[118,121872,121873],{"class":233}," q35,vmport=off",[118,121875,24683],{"class":177},[118,121877,121878,121881,121884],{"class":120,"line":1183},[118,121879,121880],{"class":177},"        -accel",[118,121882,121883],{"class":233}," kvm",[118,121885,24683],{"class":177},[118,121887,121888,121891,121894],{"class":120,"line":1198},[118,121889,121890],{"class":177},"        -cpu",[118,121892,121893],{"class":233}," qemu64,+sse3,+sse4.2",[118,121895,24683],{"class":177},[118,121897,121898,121901,121904,121906],{"class":120,"line":1204},[118,121899,121900],{"class":177},"        -smp",[118,121902,121903],{"class":233}," 8,cores=",[118,121905,421],{"class":177},[118,121907,24683],{"class":177},[118,121909,121910,121913,121916],{"class":120,"line":1218},[118,121911,121912],{"class":177},"        -m",[118,121914,121915],{"class":233}," 6G",[118,121917,24683],{"class":177},[118,121919,121920,121923],{"class":120,"line":1224},[118,121921,121922],{"class":177},"        -usb",[118,121924,24683],{"class":177},[118,121926,121927,121930,121933],{"class":120,"line":1315},[118,121928,121929],{"class":177},"        -device",[118,121931,121932],{"class":233}," virtio-tablet",[118,121934,24683],{"class":177},[118,121936,121937,121939,121942],{"class":120,"line":1321},[118,121938,121929],{"class":177},[118,121940,121941],{"class":233}," virtio-keyboard",[118,121943,24683],{"class":177},[118,121945,121946,121948,121951],{"class":120,"line":1333},[118,121947,121929],{"class":177},[118,121949,121950],{"class":233}," usb-tablet",[118,121952,24683],{"class":177},[118,121954,121955,121958,121961],{"class":120,"line":1616},[118,121956,121957],{"class":177},"        -bios",[118,121959,121960],{"class":233}," OVMF-pure-efi64.fd",[118,121962,24683],{"class":177},[118,121964,121965,121968,121971],{"class":120,"line":1621},[118,121966,121967],{"class":177},"        -net",[118,121969,121970],{"class":233}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[118,121972,24683],{"class":177},[118,121974,121975,121977,121980],{"class":120,"line":1627},[118,121976,121967],{"class":177},[118,121978,121979],{"class":233}," nic,model=virtio",[118,121981,24683],{"class":177},[118,121983,121984,121987,121990],{"class":120,"line":1632},[118,121985,121986],{"class":177},"        -audio",[118,121988,121989],{"class":233}," sdl,model=hda",[118,121991,24683],{"class":177},[118,121993,121994,121997,122000],{"class":120,"line":1646},[118,121995,121996],{"class":177},"        -display",[118,121998,121999],{"class":233}," sdl,gl=on,show-cursor=on",[118,122001,24683],{"class":177},[118,122003,122004,122006,122009,122012],{"class":120,"line":1651},[118,122005,121929],{"class":177},[118,122007,122008],{"class":233}," virtio-vga-gl,xres=1920,yres=",[118,122010,122011],{"class":177},"1080",[118,122013,24683],{"class":177},[118,122015,122016,122019,122022],{"class":120,"line":1657},[118,122017,122018],{"class":177},"        -drive",[118,122020,122021],{"class":233}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[118,122023,24683],{"class":177},[118,122025,122026,122028,122031],{"class":120,"line":1678},[118,122027,122018],{"class":177},[118,122029,122030],{"class":233}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[118,122032,24683],{"class":177},[118,122034,122035,122038,122041],{"class":120,"line":1683},[118,122036,122037],{"class":177},"        -monitor",[118,122039,122040],{"class":233}," stdio",[118,122042,24683],{"class":177},[118,122044,122045,122048],{"class":120,"line":1697},[118,122046,122047],{"class":177},"        -serial",[118,122049,122050],{"class":233}," none\n",[72,122052,122053],{"start":1204},[75,122054,122055,122056],{},"常用操作：",[72,122057,122058,122061,122117],{},[75,122059,122060],{},"全屏：Ctrl+Alt+F",[75,122062,122063,122064,122069],{},"adb调试",[72,122065,122066],{},[75,122067,122068],{},"使Linux与Android用ADB连接。",[109,122070,122072],{"className":117289,"code":122071,"language":117291,"meta":39,"style":39},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[115,122073,122074,122079,122090,122095,122107,122112],{"__ignoreMap":39},[118,122075,122076],{"class":120,"line":121},[118,122077,122078],{"class":187},"# 连接安卓\n",[118,122080,122081,122084,122087],{"class":120,"line":40},[118,122082,122083],{"class":1967},"adb",[118,122085,122086],{"class":233}," connect",[118,122088,122089],{"class":177}," 127.0.0.1\n",[118,122091,122092],{"class":120,"line":1183},[118,122093,122094],{"class":187},"# 打开shell\n",[118,122096,122097,122099,122101,122104],{"class":120,"line":1198},[118,122098,122083],{"class":1967},[118,122100,26876],{"class":177},[118,122102,122103],{"class":233}," 127.0.0.1:5555",[118,122105,122106],{"class":233}," shell\n",[118,122108,122109],{"class":120,"line":1204},[118,122110,122111],{"class":187},"# 使用root权限\n",[118,122113,122114],{"class":120,"line":1218},[118,122115,122116],{"class":1967},"su\n",[75,122118,122119,122120],{},"中文输入法",[72,122121,122122],{},[75,122123,122124],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[60,122126,122128],{"id":122127},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[15,122130,122131,122132],{},"rEFInd 官网与文档：",[21,122133,122134],{"href":122134,"rel":122135},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25],[5131,122137,122138],{},"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":39,"searchDepth":40,"depth":40,"links":122140},[122141,122142,122146],{"id":121806,"depth":40,"text":121807},{"id":121810,"depth":40,"text":121811,"children":122143},[122144,122145],{"id":121814,"depth":1183,"text":121815},{"id":121830,"depth":1183,"text":121831},{"id":122127,"depth":40,"text":122128},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121798,"description":42},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122153,"title":122154,"body":122155,"description":42,"extension":43,"meta":125454,"navigation":45,"path":125455,"seo":125456,"stem":125457,"__hash__":125458},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122156,"toc":125428},[122157,122160,122164,122167,122174,122424,122427,122499,122502,122506,122510,122515,122518,122521,122524,122529,122532,122535,122538,122543,122546,122551,122554,122557,122562,122565,122570,122573,122577,122581,122584,122589,122592,122606,122609,122612,122621,122624,122633,122636,122639,122648,122651,122660,122663,122666,122675,122678,122681,122696,122699,122702,122711,122716,122719,122722,122731,122734,122743,122746,122755,122758,122767,122772,122775,122783,122788,122791,122800,122803,122811,122816,122819,122828,122831,122834,122838,122841,122846,122849,122854,122868,122873,122878,122889,122894,122900,122905,122920,122925,122928,122933,122938,122943,122951,122956,122963,122968,122979,122984,122987,122991,122994,122997,123002,123005,123024,123029,123032,123041,123046,123049,123071,123074,123104,123107,123112,123115,123129,123134,123153,123156,123159,123164,123176,123181,123186,123189,123194,123197,123212,123215,123220,123225,123229,123234,123274,123277,123281,123287,123293,123298,123301,123308,123313,123320,123323,123326,123333,123347,123350,123410,123413,123427,123439,123442,123445,123448,123512,123515,123518,123521,123541,123544,123549,123556,123560,123563,123567,123572,123577,123581,123584,123587,123629,123634,123637,123659,123674,123676,123681,123693,123753,123755,123757,123811,123813,123815,123821,123826,123829,123834,123838,123841,123903,123908,123911,123913,123917,123929,124011,124013,124015,124069,124075,124077,124081,124086,124088,124093,124097,124117,124152,124156,124159,124162,124165,124172,124175,124187,124190,124205,124208,124227,124275,124278,124295,124298,124312,124317,124320,124329,124344,124356,124394,124399,124408,124413,124418,124444,124453,124457,124461,124466,124469,124473,124477,124482,124485,124490,124493,124498,124501,124506,124509,124513,124518,124521,124526,124529,124533,124538,124541,124546,124549,124554,124557,124561,124566,124569,124574,124577,124582,124585,124589,124594,124597,124602,124605,124610,124613,124618,124621,124626,124629,124634,124637,124641,124646,124649,124654,124661,124665,124670,124673,124678,124681,124685,124690,124693,124696,124699,124702,124705,124709,124712,124722,124727,124732,124754,124759,124764,124771,124775,124780,124783,124786,124791,124794,124797,124800,124803,124806,124809,124812,124815,124818,124821,124824,124827,124832,124837,124842,124847,124852,124857,124862,124865,124869,124872,124876,124881,124886,124891,124896,124900,124906,124914,124919,124922,124927,124942,124945,124950,124984,124999,125002,125057,125083,125095,125098,125107,125110,125125,125130,125133,125139,125144,125147,125152,125155,125160,125165,125172,125175,125190,125193,125228,125233,125241,125279,125282,125285,125290,125293,125298,125309,125343,125348,125351,125360,125365,125371,125374,125379,125388,125393,125396,125399,125404,125412,125415,125420,125425],[10,122158,122154],{"id":122159},"_7-其他操作",[60,122161,122163],{"id":122162},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[15,122165,122166],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[15,122168,122169,122170,122173],{},"进入工控机的硬盘目录，进入",[115,122171,122172],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[109,122175,122179],{"className":122176,"code":122177,"language":122178,"meta":39,"style":39},"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",[115,122180,122181,122189,122200,122207,122214,122226,122233,122245,122256,122267,122274,122281,122288,122300,122312,122319,122331,122343,122350,122362,122374,122386,122397,122404,122415],{"__ignoreMap":39},[118,122182,122183,122186],{"class":120,"line":121},[118,122184,122185],{"class":51293},"network",[118,122187,122188],{"class":128},": \n",[118,122190,122191,122194,122196,122198],{"class":120,"line":40},[118,122192,122193],{"class":51293},"  version",[118,122195,51430],{"class":128},[118,122197,206],{"class":177},[118,122199,2678],{"class":128},[118,122201,122202,122205],{"class":120,"line":1183},[118,122203,122204],{"class":51293},"  wifis",[118,122206,122188],{"class":128},[118,122208,122209,122212],{"class":120,"line":1198},[118,122210,122211],{"class":51293},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[118,122213,122188],{"class":128},[118,122215,122216,122219,122221,122224],{"class":120,"line":1204},[118,122217,122218],{"class":51293},"      renderer",[118,122220,51430],{"class":128},[118,122222,122223],{"class":233},"NetworkManager",[118,122225,2678],{"class":128},[118,122227,122228,122231],{"class":120,"line":1218},[118,122229,122230],{"class":51293},"      match",[118,122232,122188],{"class":128},[118,122234,122235,122238,122240,122243],{"class":120,"line":1224},[118,122236,122237],{"class":51293},"        name",[118,122239,51430],{"class":128},[118,122241,122242],{"class":233},"\"wlan0\"",[118,122244,2678],{"class":128},[118,122246,122247,122250,122252,122254],{"class":120,"line":1315},[118,122248,122249],{"class":51293},"      dhcp4",[118,122251,51430],{"class":128},[118,122253,1366],{"class":177},[118,122255,2678],{"class":128},[118,122257,122258,122261,122263,122265],{"class":120,"line":1321},[118,122259,122260],{"class":51293},"      dhcp6",[118,122262,51430],{"class":128},[118,122264,1366],{"class":177},[118,122266,2678],{"class":128},[118,122268,122269,122272],{"class":120,"line":1333},[118,122270,122271],{"class":51293},"      access-points",[118,122273,122188],{"class":128},[118,122275,122276,122279],{"class":120,"line":1616},[118,122277,122278],{"class":233},"        \"EMIS_Vinci_Robocon_5G\"",[118,122280,122188],{"class":128},[118,122282,122283,122286],{"class":120,"line":1621},[118,122284,122285],{"class":51293},"          auth",[118,122287,122188],{"class":128},[118,122289,122290,122293,122295,122298],{"class":120,"line":1627},[118,122291,122292],{"class":51293},"            key-management",[118,122294,51430],{"class":128},[118,122296,122297],{"class":233},"\"psk\"",[118,122299,2678],{"class":128},[118,122301,122302,122305,122307,122310],{"class":120,"line":1632},[118,122303,122304],{"class":51293},"            password",[118,122306,51430],{"class":128},[118,122308,122309],{"class":233},"\"vinci666\"",[118,122311,2678],{"class":128},[118,122313,122314,122317],{"class":120,"line":1646},[118,122315,122316],{"class":51293},"          networkmanager",[118,122318,122188],{"class":128},[118,122320,122321,122324,122326,122329],{"class":120,"line":1651},[118,122322,122323],{"class":51293},"            uuid",[118,122325,51430],{"class":128},[118,122327,122328],{"class":233},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[118,122330,2678],{"class":128},[118,122332,122333,122336,122338,122341],{"class":120,"line":1657},[118,122334,122335],{"class":51293},"            name",[118,122337,51430],{"class":128},[118,122339,122340],{"class":233},"\"EMIS_Vinci_Robocon_5G\"",[118,122342,2678],{"class":128},[118,122344,122345,122348],{"class":120,"line":1678},[118,122346,122347],{"class":51293},"            passthrough",[118,122349,122188],{"class":128},[118,122351,122352,122355,122357,122360],{"class":120,"line":1683},[118,122353,122354],{"class":51293},"              wifi-security.auth-alg",[118,122356,51430],{"class":128},[118,122358,122359],{"class":233},"\"open\"",[118,122361,2678],{"class":128},[118,122363,122364,122367,122369,122372],{"class":120,"line":1697},[118,122365,122366],{"class":51293},"              ipv6.addr-gen-mode",[118,122368,51430],{"class":128},[118,122370,122371],{"class":233},"\"default\"",[118,122373,2678],{"class":128},[118,122375,122376,122379,122381,122384],{"class":120,"line":1702},[118,122377,122378],{"class":51293},"              ipv6.ip6-privacy",[118,122380,51430],{"class":128},[118,122382,122383],{"class":233},"\"-1\"",[118,122385,2678],{"class":128},[118,122387,122388,122391,122393,122395],{"class":120,"line":1731},[118,122389,122390],{"class":51293},"              proxy._",[118,122392,51430],{"class":128},[118,122394,7657],{"class":233},[118,122396,2678],{"class":128},[118,122398,122399,122402],{"class":120,"line":1736},[118,122400,122401],{"class":51293},"      networkmanager",[118,122403,122188],{"class":128},[118,122405,122406,122409,122411,122413],{"class":120,"line":1753},[118,122407,122408],{"class":51293},"        uuid",[118,122410,51430],{"class":128},[118,122412,122328],{"class":233},[118,122414,2678],{"class":128},[118,122416,122417,122419,122421],{"class":120,"line":1758},[118,122418,122237],{"class":51293},[118,122420,51430],{"class":128},[118,122422,122423],{"class":233},"\"EMIS_Vinci_Robocon_5G\"\n",[15,122425,122426],{},"将其改为新wifi的名和密码：",[109,122428,122430],{"className":122176,"code":122429,"language":122178,"meta":39,"style":39},"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",[115,122431,122432,122438,122447,122453,122460,122469,122477,122483,122489],{"__ignoreMap":39},[118,122433,122434,122436],{"class":120,"line":121},[118,122435,122185],{"class":51293},[118,122437,3743],{"class":128},[118,122439,122440,122442,122444],{"class":120,"line":40},[118,122441,122193],{"class":51293},[118,122443,51430],{"class":128},[118,122445,122446],{"class":177},"2\n",[118,122448,122449,122451],{"class":120,"line":1183},[118,122450,122204],{"class":51293},[118,122452,3743],{"class":128},[118,122454,122455,122458],{"class":120,"line":1198},[118,122456,122457],{"class":51293},"    wlan0",[118,122459,3743],{"class":128},[118,122461,122462,122464,122466],{"class":120,"line":1204},[118,122463,122249],{"class":51293},[118,122465,51430],{"class":128},[118,122467,122468],{"class":177},"true\n",[118,122470,122471,122473,122475],{"class":120,"line":1218},[118,122472,122260],{"class":51293},[118,122474,51430],{"class":128},[118,122476,122468],{"class":177},[118,122478,122479,122481],{"class":120,"line":1224},[118,122480,122271],{"class":51293},[118,122482,3743],{"class":128},[118,122484,122485,122487],{"class":120,"line":1315},[118,122486,122278],{"class":233},[118,122488,3743],{"class":128},[118,122490,122491,122494,122496],{"class":120,"line":1321},[118,122492,122493],{"class":51293},"          password",[118,122495,51430],{"class":128},[118,122497,122498],{"class":233},"\"vinci666\"\n",[15,122500,122501],{},"工控机开机即可连上网。",[60,122503,122505],{"id":122504},"_72-ssh远程开发","7.2 SSH远程开发",[89,122507,122509],{"id":122508},"_721-环境准备","7.2.1 环境准备",[15,122511,122512],{},[278,122513,122514],{},"1.硬件准备",[15,122516,122517],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[15,122519,122520],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[15,122522,122523],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[15,122525,122526],{},[278,122527,122528],{},"2.设置固定IP",[15,122530,122531],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[15,122533,122534],{},"1.进入设置界面",[15,122536,122537],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[15,122539,122540],{},[1466,122541],{"alt":39,"src":122542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[15,122544,122545],{},"2.配置所连接的网络",[15,122547,122548],{},[1466,122549],{"alt":39,"src":122550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[15,122552,122553],{},"3.设置固定IP",[15,122555,122556],{},"查看当前IP地址。",[15,122558,122559],{},[1466,122560],{"alt":39,"src":122561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[15,122563,122564],{},"设置固定IP。",[15,122566,122567],{},[1466,122568],{"alt":39,"src":122569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[15,122571,122572],{},"至此，IP配置完毕。",[89,122574,122576],{"id":122575},"_722-环境搭建","7.2.2 环境搭建",[15,122578,122579],{},[278,122580,25746],{},[15,122582,122583],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[15,122585,122586],{},[278,122587,122588],{},"实现",[15,122590,122591],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[72,122593,122594,122597,122600,122603],{},[75,122595,122596],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[75,122598,122599],{},"远程主机启动SSH服务；",[75,122601,122602],{},"本地主机登陆远程主机；",[75,122604,122605],{},"实现数据传输。",[15,122607,122608],{},"1.安装SSH客户端与服务端",[15,122610,122611],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[109,122613,122615],{"className":120809,"code":122614,"language":120811,"meta":120812,"style":39}," sudo apt install openssh-server\n",[115,122616,122617],{"__ignoreMap":39},[118,122618,122619],{"class":120,"line":121},[118,122620,122614],{},[15,122622,122623],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[109,122625,122627],{"className":120809,"code":122626,"language":120811,"meta":120812,"style":39},"sudo apt install openssh-client\n",[115,122628,122629],{"__ignoreMap":39},[118,122630,122631],{"class":120,"line":121},[118,122632,122626],{},[15,122634,122635],{},"2.远程主机启动SSH服务",[15,122637,122638],{},"远程主机启动 ssh 服务命令如下：",[109,122640,122642],{"className":120809,"code":122641,"language":120811,"meta":120812,"style":39},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[115,122643,122644],{"__ignoreMap":39},[118,122645,122646],{"class":120,"line":121},[118,122647,122641],{},[15,122649,122650],{},"启动后可使用如下命令查看服务是否正常运行：",[109,122652,122654],{"className":120809,"code":122653,"language":120811,"meta":120812,"style":39},"ps -e | grep ssh\n",[115,122655,122656],{"__ignoreMap":39},[118,122657,122658],{"class":120,"line":121},[118,122659,122653],{},[15,122661,122662],{},"如果启动成功，会包含 sshd 程序。",[15,122664,122665],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[109,122667,122669],{"className":120809,"code":122668,"language":120811,"meta":120812,"style":39},"sudo systemctl enable ssh\n",[115,122670,122671],{"__ignoreMap":39},[118,122672,122673],{"class":120,"line":121},[118,122674,122668],{},[15,122676,122677],{},"3.本地远程登录",[15,122679,122680],{},"登录远程主机可以调用如下命令:",[109,122682,122684],{"className":117289,"code":122683,"language":117291,"meta":39,"style":39},"ssh -X 用户名@ip地址\n",[115,122685,122686],{"__ignoreMap":39},[118,122687,122688,122690,122693],{"class":120,"line":121},[118,122689,121640],{"class":1967},[118,122691,122692],{"class":177}," -X",[118,122694,122695],{"class":233}," 用户名@ip地址\n",[15,122697,122698],{},"然后根据提示，录入登陆密码，即可成功登录。",[15,122700,122701],{},"如果退出，可以调用exit命令：",[109,122703,122705],{"className":120809,"code":122704,"language":120811,"meta":120812,"style":39},"exit\n",[115,122706,122707],{"__ignoreMap":39},[118,122708,122709],{"class":120,"line":121},[118,122710,122704],{},[15,122712,122713],{},[278,122714,122715],{},"4.实现数据传输",[15,122717,122718],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[15,122720,122721],{},"上传文件指令格式如下：",[109,122723,122725],{"className":120809,"code":122724,"language":120811,"meta":120812,"style":39},"scp 本地文件路径 账号@ip:路径\n",[115,122726,122727],{"__ignoreMap":39},[118,122728,122729],{"class":120,"line":121},[118,122730,122724],{},[15,122732,122733],{},"上传文件夹指令格式如下：",[109,122735,122737],{"className":120809,"code":122736,"language":120811,"meta":120812,"style":39},"scp -r 本地文件夹路径 账号@ip:路径\n",[115,122738,122739],{"__ignoreMap":39},[118,122740,122741],{"class":120,"line":121},[118,122742,122736],{},[15,122744,122745],{},"下载文件指令格式如下：",[109,122747,122749],{"className":120809,"code":122748,"language":120811,"meta":120812,"style":39},"scp 账号@ip:路径 本地文件夹路径\n",[115,122750,122751],{"__ignoreMap":39},[118,122752,122753],{"class":120,"line":121},[118,122754,122748],{},[15,122756,122757],{},"下载文件夹指令格式如下：",[109,122759,122761],{"className":120809,"code":122760,"language":120811,"meta":120812,"style":39},"scp -r 账号@ip:路径 本地文件夹路径\n",[115,122762,122763],{"__ignoreMap":39},[118,122764,122765],{"class":120,"line":121},[118,122766,122760],{},[15,122768,122769],{},[278,122770,122771],{},"优化",[15,122773,122774],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[72,122776,122777,122780],{},[75,122778,122779],{},"本地生成密钥对；",[75,122781,122782],{},"将公钥上传至远程主机。",[15,122784,122785],{},[278,122786,122787],{},"1.生成密钥对",[15,122789,122790],{},"本地客户端生成公私钥：（一路回车默认即可）",[109,122792,122794],{"className":120809,"code":122793,"language":120811,"meta":120812,"style":39},"ssh-keygen\n",[115,122795,122796],{"__ignoreMap":39},[118,122797,122798],{"class":120,"line":121},[118,122799,122793],{},[15,122801,122802],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[72,122804,122805,122808],{},[75,122806,122807],{},"id_rsa （私钥）；",[75,122809,122810],{},"id_rsa.pub (公钥)。",[15,122812,122813],{},[278,122814,122815],{},"2.公钥上传",[15,122817,122818],{},"上传指令如下：",[109,122820,122822],{"className":120809,"code":122821,"language":120811,"meta":120812,"style":39},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[115,122823,122824],{"__ignoreMap":39},[118,122825,122826],{"class":120,"line":121},[118,122827,122821],{},[15,122829,122830],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[15,122832,122833],{},"以后再远程登录就无需录入密码了。",[89,122835,122837],{"id":122836},"_723-使用vscode优化","7.2.3 使用VScode优化",[15,122839,122840],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[15,122842,122843],{},[278,122844,122845],{},"1.准备工作",[15,122847,122848],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[15,122850,122851],{},[278,122852,122853],{},"2.为VScode安装远程开发插件",[15,122855,122856,122857,122860,122861,122864,122865,28378],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[115,122858,122859],{},"扩展：商店","的搜索栏输入",[115,122862,122863],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[115,122866,122867],{},"安装",[15,122869,122870],{},[1466,122871],{"alt":39,"src":122872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[15,122874,122875],{},[278,122876,122877],{},"3.配置远程连接",[15,122879,122880,122881,122884,122885,122888],{},"步骤1：使用快捷键",[115,122882,122883],{},"ctrl + shift + p","打开命令输入窗口，并输入",[115,122886,122887],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[15,122890,122891],{},[1466,122892],{"alt":39,"src":122893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[15,122895,122896,122897,28378],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[115,122898,122899],{},"Add New SSH Host",[15,122901,122902],{},[1466,122903],{"alt":39,"src":122904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[15,122906,122907,122908,122911,122912,122915,122916,122919],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[115,122909,122910],{},"ssh +X ubuntu@192.168.43.164","，其中，",[115,122913,122914],{},"ubuntu","需要替换为你的登录用户名，",[115,122917,122918],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[15,122921,122922],{},[1466,122923],{"alt":39,"src":122924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[15,122926,122927],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[15,122929,122930],{},[1466,122931],{"alt":39,"src":122932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[15,122934,122935],{},[1466,122936],{"alt":39,"src":122937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[15,122939,122940],{},[278,122941,122942],{},"4.使用",[15,122944,122945,122946,122884,122948,122950],{},"步骤1：继续使用快捷键",[115,122947,122883],{},[115,122949,122887],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[15,122952,122953],{},[1466,122954],{"alt":39,"src":122955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[15,122957,122958,122959,122962],{},"或者，也可以点击侧边栏的",[115,122960,122961],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[15,122964,122965],{},[1466,122966],{"alt":39,"src":122967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[15,122969,122970,122971,122974,122975,122978],{},"步骤2：选择菜单栏的",[115,122972,122973],{},"文件","下的",[115,122976,122977],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[15,122980,122981],{},[1466,122982],{"alt":39,"src":122983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[15,122985,122986],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[60,122988,122990],{"id":122989},"_73-远程桌面","7.3 远程桌面",[15,122992,122993],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[15,122995,122996],{},"我们选择使用VNC来看。",[72,122998,122999],{},[75,123000,123001],{},"安装VNC服务器：",[15,123003,123004],{},"这里以TigerVNC为例进行安装：",[109,123006,123008],{"className":117289,"code":123007,"language":117291,"meta":39,"style":39},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[115,123009,123010],{"__ignoreMap":39},[118,123011,123012,123014,123016,123018,123021],{"class":120,"line":121},[118,123013,24581],{"class":1967},[118,123015,117310],{"class":233},[118,123017,23839],{"class":233},[118,123019,123020],{"class":233}," tigervnc-standalone-server",[118,123022,123023],{"class":233}," tigervnc-common\n",[72,123025,123026],{"start":40},[75,123027,123028],{},"设置VNC密码：",[15,123030,123031],{},"为VNC用户设置密码，运行以下命令：",[109,123033,123035],{"className":117289,"code":123034,"language":117291,"meta":39,"style":39},"vncpasswd\n",[115,123036,123037],{"__ignoreMap":39},[118,123038,123039],{"class":120,"line":121},[118,123040,123034],{"class":1967},[72,123042,123043],{"start":1183},[75,123044,123045],{},"配置VNC启动脚本:",[15,123047,123048],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[109,123050,123052],{"className":117289,"code":123051,"language":117291,"meta":39,"style":39},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[115,123053,123054,123063],{"__ignoreMap":39},[118,123055,123056,123058,123060],{"class":120,"line":121},[118,123057,101259],{"class":1967},[118,123059,29209],{"class":177},[118,123061,123062],{"class":233}," ~\u002F.vnc\n",[118,123064,123065,123068],{"class":120,"line":40},[118,123066,123067],{"class":1967},"nano",[118,123069,123070],{"class":233}," ~\u002F.vnc\u002Fxstartup\n",[15,123072,123073],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[109,123075,123077],{"className":117289,"code":123076,"language":117291,"meta":39,"style":39},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[115,123078,123079,123084,123092,123099],{"__ignoreMap":39},[118,123080,123081],{"class":120,"line":121},[118,123082,123083],{"class":187},"#!\u002Fbin\u002Fsh\n",[118,123085,123086,123089],{"class":120,"line":40},[118,123087,123088],{"class":177},"unset",[118,123090,123091],{"class":233}," SESSION_MANAGER\n",[118,123093,123094,123096],{"class":120,"line":1183},[118,123095,123088],{"class":177},[118,123097,123098],{"class":233}," DBUS_SESSION_BUS_ADDRESS\n",[118,123100,123101],{"class":120,"line":1198},[118,123102,123103],{"class":1967},"gnome-session\n",[15,123105,123106],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[72,123108,123109],{"start":1198},[75,123110,123111],{},"给予执行权限：",[15,123113,123114],{},"为xstartup文件设置执行权限：",[109,123116,123118],{"className":117289,"code":123117,"language":117291,"meta":39,"style":39},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[115,123119,123120],{"__ignoreMap":39},[118,123121,123122,123124,123127],{"class":120,"line":121},[118,123123,24616],{"class":1967},[118,123125,123126],{"class":233}," +x",[118,123128,123070],{"class":233},[72,123130,123131],{"start":1204},[75,123132,123133],{},"启动VNC服务器：",[109,123135,123137],{"className":117289,"code":123136,"language":117291,"meta":39,"style":39},"vncserver -geometry 1920x1080 -localhost=0\n",[115,123138,123139],{"__ignoreMap":39},[118,123140,123141,123144,123147,123150],{"class":120,"line":121},[118,123142,123143],{"class":1967},"vncserver",[118,123145,123146],{"class":177}," -geometry",[118,123148,123149],{"class":233}," 1920x1080",[118,123151,123152],{"class":177}," -localhost=0\n",[15,123154,123155],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[15,123157,123158],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[72,123160,123161],{"start":1218},[75,123162,123163],{},"查看已开启的VNC服务器：",[109,123165,123167],{"className":117289,"code":123166,"language":117291,"meta":39,"style":39},"vncserver -list\n",[115,123168,123169],{"__ignoreMap":39},[118,123170,123171,123173],{"class":120,"line":121},[118,123172,123143],{"class":1967},[118,123174,123175],{"class":177}," -list\n",[15,123177,123178],{},[1466,123179],{"alt":39,"src":123180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[72,123182,123183],{"start":1224},[75,123184,123185],{},"连接到VNC服务器：",[15,123187,123188],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[72,123190,123191],{"start":1315},[75,123192,123193],{},"停止VNC服务器：",[15,123195,123196],{},"如果需要停止VNC服务器，可以使用以下命令：",[109,123198,123200],{"className":117289,"code":123199,"language":117291,"meta":39,"style":39},"vncserver -kill :1\n",[115,123201,123202],{"__ignoreMap":39},[118,123203,123204,123206,123209],{"class":120,"line":121},[118,123205,123143],{"class":1967},[118,123207,123208],{"class":177}," -kill",[118,123210,123211],{"class":233}," :1\n",[15,123213,123214],{},"将:1替换为你实际使用的显示编号。",[15,123216,123217],{},[1466,123218],{"alt":39,"src":123219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[15,123221,123222],{},[1466,123223],{"alt":39,"src":123224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[60,123226,123228],{"id":123227},"_74-usb端口设置","7.4 USB端口设置",[15,123230,123231],{},[278,123232,123233],{},"首先先配置好权限",[109,123235,123237],{"className":117289,"code":123236,"language":117291,"meta":39,"style":39},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[115,123238,123239,123244,123257,123264,123269],{"__ignoreMap":39},[118,123240,123241],{"class":120,"line":121},[118,123242,123243],{"class":187},"# 将用户权限提高\n",[118,123245,123246,123248,123250,123252,123255],{"class":120,"line":40},[118,123247,24581],{"class":1967},[118,123249,26567],{"class":233},[118,123251,26570],{"class":177},[118,123253,123254],{"class":233}," dialout",[118,123256,26575],{"class":128},[118,123258,123259,123261],{"class":120,"line":1183},[118,123260,26594],{"class":1967},[118,123262,123263],{"class":233}," dialout\n",[118,123265,123266],{"class":120,"line":1198},[118,123267,123268],{"class":187},"# 查看下面命令是否输出dialout（若输出才正常）\n",[118,123270,123271],{"class":120,"line":1204},[118,123272,123273],{"class":1967},"groups\n",[15,123275,123276],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[89,123278,123280],{"id":123279},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[15,123282,123283,123286],{},[278,123284,123285],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[15,123288,123289,123292],{},[278,123290,123291],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[15,123294,123295],{},[278,123296,123297],{},"流程如下：",[15,123299,123300],{},"（1）.查找设备idVendor和idProduct",[15,123302,123303,123304,123307],{},"接入两个USB设备，在终端调用指令",[115,123305,123306],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[15,123309,123310],{},[1466,123311],{"alt":39,"src":123312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[15,123314,123315,123316,123319],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[115,123317,123318],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[15,123321,123322],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[15,123324,123325],{},"（2）.编写映射规则",[15,123327,123328,123329,123332],{},"在",[115,123330,123331],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[109,123334,123336],{"className":117289,"code":123335,"language":117291,"meta":39,"style":39},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[115,123337,123338],{"__ignoreMap":39},[118,123339,123340,123342,123344],{"class":120,"line":121},[118,123341,24581],{"class":1967},[118,123343,118576],{"class":233},[118,123345,123346],{"class":233}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[15,123348,123349],{},"输入如下内容：",[109,123351,123353],{"className":117289,"code":123352,"language":117291,"meta":39,"style":39},"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",[115,123354,123355,123385],{"__ignoreMap":39},[118,123356,123357,123360,123362,123365,123368,123371,123374,123376,123379,123382],{"class":120,"line":121},[118,123358,123359],{"class":128},"KERNEL",[118,123361,174],{"class":124},[118,123363,123364],{"class":233},"=\"ttyUSB*\",",[118,123366,123367],{"class":1967}," ATTRS",[118,123369,123370],{"class":233},"{idVendor}==",[118,123372,123373],{"class":1967},"\"10c4\"",[118,123375,506],{"class":1967},[118,123377,123378],{"class":233}," ATTRS{idProduct}==\"ea60\",",[118,123380,123381],{"class":233}," MODE:=\"0777\",",[118,123383,123384],{"class":233}," SYMLINK+=\"mylidar\"\n",[118,123386,123387,123389,123391,123393,123395,123397,123400,123402,123405,123407],{"class":120,"line":40},[118,123388,123359],{"class":128},[118,123390,174],{"class":124},[118,123392,123364],{"class":233},[118,123394,123367],{"class":1967},[118,123396,123370],{"class":233},[118,123398,123399],{"class":1967},"\"1a86\"",[118,123401,506],{"class":1967},[118,123403,123404],{"class":233}," ATTRS{idProduct}==\"7523\",",[118,123406,123381],{"class":233},[118,123408,123409],{"class":233}," SYMLINK+=\"mycar\"\n",[15,123411,123412],{},"代码解释：",[1135,123414,123415,123418,123421,123424],{},[75,123416,123417],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[75,123419,123420],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[75,123422,123423],{},"SYMLINK是符号连接，即绑定的别名；",[75,123425,123426],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[15,123428,123429,123430,123433,123436],{},"***小提示：***",[23558,123431,123432],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[115,123434,123435],{},"\u002Fetc\u002Fudev\u002Frule.d",[23558,123437,123438],{},"目录即可。",[15,123440,123441],{},"表格 还在加载中，请等待加载完成后再尝试复制",[15,123443,123444],{},"（3）.使规则生效",[15,123446,123447],{},"在终端下输入如下指令：",[109,123449,123451],{"className":117289,"code":123450,"language":117291,"meta":39,"style":39},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[115,123452,123453,123458,123470,123481,123485,123490,123503],{"__ignoreMap":39},[118,123454,123455],{"class":120,"line":121},[118,123456,123457],{"class":187},"# Ubuntu用下方命令\n",[118,123459,123460,123462,123464,123467],{"class":120,"line":40},[118,123461,24581],{"class":1967},[118,123463,120041],{"class":233},[118,123465,123466],{"class":233}," udev",[118,123468,123469],{"class":233}," reload\n",[118,123471,123472,123474,123476,123478],{"class":120,"line":1183},[118,123473,24581],{"class":1967},[118,123475,120041],{"class":233},[118,123477,123466],{"class":233},[118,123479,123480],{"class":233}," restart\n",[118,123482,123483],{"class":120,"line":1198},[118,123484,2404],{"emptyLinePlaceholder":45},[118,123486,123487],{"class":120,"line":1204},[118,123488,123489],{"class":187},"#Fedora用下方命令\n",[118,123491,123492,123494,123497,123500],{"class":120,"line":1218},[118,123493,24581],{"class":1967},[118,123495,123496],{"class":233}," udevadm",[118,123498,123499],{"class":233}," control",[118,123501,123502],{"class":177}," --reload\n",[118,123504,123505,123507,123509],{"class":120,"line":1224},[118,123506,24581],{"class":1967},[118,123508,123496],{"class":233},[118,123510,123511],{"class":233}," trigger\n",[15,123513,123514],{},"再重新插拔设备即可。",[15,123516,123517],{},"（4）.测试",[15,123519,123520],{},"终端下输入如下指令",[109,123522,123524],{"className":117289,"code":123523,"language":117291,"meta":39,"style":39},"ll \u002Fdev | grep ttyUSB\n",[115,123525,123526],{"__ignoreMap":39},[118,123527,123528,123531,123534,123536,123538],{"class":120,"line":121},[118,123529,123530],{"class":1967},"ll",[118,123532,123533],{"class":233}," \u002Fdev",[118,123535,25114],{"class":124},[118,123537,30229],{"class":1967},[118,123539,123540],{"class":233}," ttyUSB\n",[15,123542,123543],{},"运行结果如下：",[15,123545,123546],{},[1466,123547],{"alt":39,"src":123548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[15,123550,123551,123552,123555],{},"也可以多次插拔USB设备，会发现设备端口",[115,123553,123554],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[15,123557,123558],{},[278,123559,117957],{},[15,123561,123562],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[89,123564,123566],{"id":123565},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[15,123568,123569,123571],{},[278,123570,123285],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[15,123573,123574,123576],{},[278,123575,123291],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[15,123578,123579],{},[278,123580,123297],{},[15,123582,123583],{},"（1）.查看所连接的主机USB接口的KERNELS",[15,123585,123586],{},"调用如下指令查看第一台雷达的USB信息：",[109,123588,123590],{"className":117289,"code":123589,"language":117291,"meta":39,"style":39},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[115,123591,123592,123612],{"__ignoreMap":39},[118,123593,123594,123597,123599,123602,123605,123607,123609],{"class":120,"line":121},[118,123595,123596],{"class":1967},"udevadm",[118,123598,69814],{"class":233},[118,123600,123601],{"class":177}," --attribute-walk",[118,123603,123604],{"class":177}," --name=\u002Fdev\u002FttyUSB0",[118,123606,25114],{"class":124},[118,123608,30229],{"class":1967},[118,123610,123611],{"class":233}," KERNELS\n",[118,123613,123614,123616,123618,123620,123623,123625,123627],{"class":120,"line":40},[118,123615,123596],{"class":1967},[118,123617,69814],{"class":233},[118,123619,123601],{"class":177},[118,123621,123622],{"class":177}," --name=\u002Fdev\u002FttyACM0",[118,123624,25114],{"class":124},[118,123626,30229],{"class":1967},[118,123628,123611],{"class":233},[15,123630,123631],{},[1466,123632],{"alt":39,"src":123633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[15,123635,123636],{},"调用如下指令查看第二台雷达的USB信息：",[109,123638,123640],{"className":117289,"code":123639,"language":117291,"meta":39,"style":39},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[115,123641,123642],{"__ignoreMap":39},[118,123643,123644,123646,123648,123650,123653,123655,123657],{"class":120,"line":121},[118,123645,123596],{"class":1967},[118,123647,69814],{"class":233},[118,123649,123601],{"class":177},[118,123651,123652],{"class":177}," --name=\u002Fdev\u002FttyUSB1",[118,123654,25114],{"class":124},[118,123656,30229],{"class":1967},[118,123658,123611],{"class":233},[15,123660,123661,123662,123665,123666,123669,123670,123673],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[115,123663,123664],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[115,123667,123668],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[278,123671,123672],{},"唯一性标识","”。",[15,123675,123325],{},[15,123677,123328,123678,123680],{},[115,123679,123331],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[109,123682,123683],{"className":117289,"code":123335,"language":117291,"meta":39,"style":39},[115,123684,123685],{"__ignoreMap":39},[118,123686,123687,123689,123691],{"class":120,"line":121},[118,123688,24581],{"class":1967},[118,123690,118576],{"class":233},[118,123692,123346],{"class":233},[109,123694,123696],{"className":117289,"code":123695,"language":117291,"meta":39,"style":39},"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",[115,123697,123698,123727],{"__ignoreMap":39},[118,123699,123700,123702,123704,123706,123709,123711,123714,123717,123719,123722,123724],{"class":120,"line":121},[118,123701,123359],{"class":128},[118,123703,174],{"class":124},[118,123705,123364],{"class":233},[118,123707,123708],{"class":128}," KERNELS",[118,123710,174],{"class":124},[118,123712,123713],{"class":233},"=\"1-1.3:1.0\",",[118,123715,123716],{"class":1967}," MODE:",[118,123718,174],{"class":233},[118,123720,123721],{"class":1967},"\"0777\"",[118,123723,506],{"class":1967},[118,123725,123726],{"class":233}," SYMLINK+=\"rplidar_front\"\n",[118,123728,123729,123731,123733,123735,123737,123739,123742,123744,123746,123748,123750],{"class":120,"line":40},[118,123730,123359],{"class":128},[118,123732,174],{"class":124},[118,123734,123364],{"class":233},[118,123736,123708],{"class":128},[118,123738,174],{"class":124},[118,123740,123741],{"class":233},"=\"1-1.4:1.0\",",[118,123743,123716],{"class":1967},[118,123745,174],{"class":233},[118,123747,123721],{"class":1967},[118,123749,506],{"class":1967},[118,123751,123752],{"class":233}," SYMLINK+=\"rplidar_back\"\n",[15,123754,123444],{},[15,123756,123447],{},[109,123758,123759],{"className":117289,"code":123450,"language":117291,"meta":39,"style":39},[115,123760,123761,123765,123775,123785,123789,123793,123803],{"__ignoreMap":39},[118,123762,123763],{"class":120,"line":121},[118,123764,123457],{"class":187},[118,123766,123767,123769,123771,123773],{"class":120,"line":40},[118,123768,24581],{"class":1967},[118,123770,120041],{"class":233},[118,123772,123466],{"class":233},[118,123774,123469],{"class":233},[118,123776,123777,123779,123781,123783],{"class":120,"line":1183},[118,123778,24581],{"class":1967},[118,123780,120041],{"class":233},[118,123782,123466],{"class":233},[118,123784,123480],{"class":233},[118,123786,123787],{"class":120,"line":1198},[118,123788,2404],{"emptyLinePlaceholder":45},[118,123790,123791],{"class":120,"line":1204},[118,123792,123489],{"class":187},[118,123794,123795,123797,123799,123801],{"class":120,"line":1218},[118,123796,24581],{"class":1967},[118,123798,123496],{"class":233},[118,123800,123499],{"class":233},[118,123802,123502],{"class":177},[118,123804,123805,123807,123809],{"class":120,"line":1224},[118,123806,24581],{"class":1967},[118,123808,123496],{"class":233},[118,123810,123511],{"class":233},[15,123812,123514],{},[15,123814,123517],{},[15,123816,123520,123817,123820],{},[115,123818,123819],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[15,123822,123823],{},[1466,123824],{"alt":39,"src":123825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[15,123827,123828],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[15,123830,123831,123833],{},[278,123832,117957],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[89,123835,123837],{"id":123836},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[15,123839,123840],{},"（1）.查看所连接的主机USB接口的信息",[109,123842,123844],{"className":117289,"code":123843,"language":117291,"meta":39,"style":39},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[115,123845,123846,123876],{"__ignoreMap":39},[118,123847,123848,123850,123852,123855,123857,123859,123861,123863,123866,123869,123871,123874],{"class":120,"line":121},[118,123849,123596],{"class":1967},[118,123851,69814],{"class":233},[118,123853,123854],{"class":177}," -a",[118,123856,29209],{"class":177},[118,123858,28415],{"class":128},[118,123860,123596],{"class":1967},[118,123862,69814],{"class":233},[118,123864,123865],{"class":177}," -q",[118,123867,123868],{"class":233}," path",[118,123870,25120],{"class":177},[118,123872,123873],{"class":233}," \u002Fdev\u002FttyACM0",[118,123875,135],{"class":128},[118,123877,123878,123880,123882,123884,123886,123888,123890,123892,123894,123896,123898,123901],{"class":120,"line":40},[118,123879,123596],{"class":1967},[118,123881,69814],{"class":233},[118,123883,123854],{"class":177},[118,123885,29209],{"class":177},[118,123887,28415],{"class":128},[118,123889,123596],{"class":1967},[118,123891,69814],{"class":233},[118,123893,123865],{"class":177},[118,123895,123868],{"class":233},[118,123897,25120],{"class":177},[118,123899,123900],{"class":233}," \u002Fdev\u002FttyUSB0",[118,123902,135],{"class":128},[15,123904,123905],{},[1466,123906],{"alt":39,"src":123907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[15,123909,123910],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[15,123912,123325],{},[15,123914,123328,123915,123680],{},[115,123916,123331],{},[109,123918,123919],{"className":117289,"code":123335,"language":117291,"meta":39,"style":39},[115,123920,123921],{"__ignoreMap":39},[118,123922,123923,123925,123927],{"class":120,"line":121},[118,123924,24581],{"class":1967},[118,123926,118576],{"class":233},[118,123928,123346],{"class":233},[109,123930,123932],{"className":117289,"code":123931,"language":117291,"meta":39,"style":39},"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",[115,123933,123934,123962,123988],{"__ignoreMap":39},[118,123935,123936,123938,123940,123943,123945,123947,123949,123951,123954,123957,123959],{"class":120,"line":121},[118,123937,123359],{"class":128},[118,123939,174],{"class":124},[118,123941,123942],{"class":233},"=\"ttyACM*\",",[118,123944,123367],{"class":1967},[118,123946,123370],{"class":233},[118,123948,123399],{"class":1967},[118,123950,506],{"class":1967},[118,123952,123953],{"class":233}," ATTRS{idProduct}==\"55d4\",",[118,123955,123956],{"class":233}," ATTRS{serial}==\"0001\",",[118,123958,123381],{"class":233},[118,123960,123961],{"class":233}," SYMLINK+=\"ttyACM_MCU\"\n",[118,123963,123964,123966,123968,123970,123972,123974,123976,123978,123980,123983,123985],{"class":120,"line":40},[118,123965,123359],{"class":128},[118,123967,174],{"class":124},[118,123969,123942],{"class":233},[118,123971,123367],{"class":1967},[118,123973,123370],{"class":233},[118,123975,123399],{"class":1967},[118,123977,506],{"class":1967},[118,123979,123953],{"class":233},[118,123981,123982],{"class":233}," ATTRS{serial}==\"0002\",",[118,123984,123381],{"class":233},[118,123986,123987],{"class":233}," SYMLINK+=\"ttyACM_Lidar\"\n",[118,123989,123990,123992,123994,123996,123998,124000,124002,124004,124006,124008],{"class":120,"line":1183},[118,123991,123359],{"class":128},[118,123993,174],{"class":124},[118,123995,123364],{"class":233},[118,123997,123367],{"class":1967},[118,123999,123370],{"class":233},[118,124001,123399],{"class":1967},[118,124003,506],{"class":1967},[118,124005,123404],{"class":233},[118,124007,123381],{"class":233},[118,124009,124010],{"class":233}," SYMLINK+=\"ttyUSB_IMU\"\n",[15,124012,123444],{},[15,124014,123447],{},[109,124016,124017],{"className":117289,"code":123450,"language":117291,"meta":39,"style":39},[115,124018,124019,124023,124033,124043,124047,124051,124061],{"__ignoreMap":39},[118,124020,124021],{"class":120,"line":121},[118,124022,123457],{"class":187},[118,124024,124025,124027,124029,124031],{"class":120,"line":40},[118,124026,24581],{"class":1967},[118,124028,120041],{"class":233},[118,124030,123466],{"class":233},[118,124032,123469],{"class":233},[118,124034,124035,124037,124039,124041],{"class":120,"line":1183},[118,124036,24581],{"class":1967},[118,124038,120041],{"class":233},[118,124040,123466],{"class":233},[118,124042,123480],{"class":233},[118,124044,124045],{"class":120,"line":1198},[118,124046,2404],{"emptyLinePlaceholder":45},[118,124048,124049],{"class":120,"line":1204},[118,124050,123489],{"class":187},[118,124052,124053,124055,124057,124059],{"class":120,"line":1218},[118,124054,24581],{"class":1967},[118,124056,123496],{"class":233},[118,124058,123499],{"class":233},[118,124060,123502],{"class":177},[118,124062,124063,124065,124067],{"class":120,"line":1224},[118,124064,24581],{"class":1967},[118,124066,123496],{"class":233},[118,124068,123511],{"class":233},[15,124070,124071,124072],{},"再重新插拔设备即可，或者 ",[278,124073,124074],{},"直接重启系统。",[15,124076,123517],{},[15,124078,123520,124079,123820],{},[115,124080,123819],{},[15,124082,124083],{},[1466,124084],{"alt":39,"src":124085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[15,124087,123828],{},[15,124089,124090,124092],{},[278,124091,117957],{}," 一些设备可能没有串口号等。",[89,124094,124096],{"id":124095},"_744-其他注意事项","7.4.4 其他注意事项",[15,124098,124099,124100,124102,124103,124106,124107,18415,124110,124113,124114,124116],{},"并非所有的USB设备端口号都是",[115,124101,123554],{},"的格式，比如Arduino的端口号可能是",[115,124104,124105],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[115,124108,124109],{},"videon",[115,124111,124112],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[115,124115,124109],{},"端口，绑定时需要关联的也是该接口。",[15,124118,124119,124120,124123,124124,124127,124128,124130,124131,124134,124135,124138,124139,124142,124143,124142,124146,124142,124149,28378],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[115,124121,124122],{},"KERNEL==\"ttyUSB*\"","修改为",[115,124125,124126],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[115,124129,124122],{},"修改为类似于",[115,124132,124133],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[115,124136,124137],{},"video[0,2,4,6]","表示可以绑定的端口为",[115,124140,124141],{},"video0","或",[115,124144,124145],{},"video2",[115,124147,124148],{},"video4",[115,124150,124151],{},"video6",[60,124153,124155],{"id":124154},"_75-挂载内网网页","7.5 挂载内网网页",[15,124157,124158],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[15,124160,124161],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[15,124163,124164],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[15,124166,124167,124168],{},"Termux 下载地址（F-Droid）：",[21,124169,124170],{"href":124170,"rel":124171},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25],[15,124173,124174],{},"首先打开app后，先更新软件缓存：",[109,124176,124178],{"className":117289,"code":124177,"language":117291,"meta":39,"style":39},"pkg update\n",[115,124179,124180],{"__ignoreMap":39},[118,124181,124182,124185],{"class":120,"line":121},[118,124183,124184],{"class":1967},"pkg",[118,124186,26235],{"class":233},[15,124188,124189],{},"然后换源",[109,124191,124193],{"className":117289,"code":124192,"language":117291,"meta":39,"style":39},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[115,124194,124195],{"__ignoreMap":39},[118,124196,124197,124199,124202],{"class":120,"line":121},[118,124198,123067],{"class":1967},[118,124200,124201],{"class":128}," $PREFIX",[118,124203,124204],{"class":233},"\u002Fetc\u002Fapt\u002Fsources.list\n",[15,124206,124207],{},"将该文件内容替换为下面：",[109,124209,124211],{"className":117289,"code":124210,"language":117291,"meta":39,"style":39},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[115,124212,124213],{"__ignoreMap":39},[118,124214,124215,124218,124221,124224],{"class":120,"line":121},[118,124216,124217],{"class":1967},"deb",[118,124219,124220],{"class":233}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[118,124222,124223],{"class":233}," stable",[118,124225,124226],{"class":233}," main\n",[1135,124228,124229,124256],{},[75,124230,124231,124232,124234,124235],{},"如果你使用的是",[115,124233,123067],{},"编辑器：",[1135,124236,124237,124244,124250],{},[75,124238,124239,124240,124243],{},"按 ",[115,124241,124242],{},"Ctrl+O"," 保存文件。",[75,124245,124239,124246,124249],{},[115,124247,124248],{},"Enter"," 确认文件名。",[75,124251,124239,124252,124255],{},[115,124253,124254],{},"Ctrl+X"," 退出编辑器。",[75,124257,124231,124258,124234,124261],{},[115,124259,124260],{},"vim",[1135,124262,124263,124269],{},[75,124264,124239,124265,124268],{},[115,124266,124267],{},"Esc"," 退出编辑模式。",[75,124270,124271,124272,124274],{},"输入 ",[115,124273,119214],{}," 保存并退出。",[15,124276,124277],{},"接下来重新更新软件源：",[109,124279,124281],{"className":117289,"code":124280,"language":117291,"meta":39,"style":39},"pkg update && pkg upgrade\n",[115,124282,124283],{"__ignoreMap":39},[118,124284,124285,124287,124289,124291,124293],{"class":120,"line":121},[118,124286,124184],{"class":1967},[118,124288,117340],{"class":233},[118,124290,26183],{"class":128},[118,124292,124184],{"class":1967},[118,124294,117326],{"class":233},[15,124296,124297],{},"安装python：",[109,124299,124301],{"className":117289,"code":124300,"language":117291,"meta":39,"style":39},"pkg install python\n",[115,124302,124303],{"__ignoreMap":39},[118,124304,124305,124307,124309],{"class":120,"line":121},[118,124306,124184],{"class":1967},[118,124308,23839],{"class":233},[118,124310,124311],{"class":233}," python\n",[15,124313,124314,26466],{},[278,124315,124316],{},"通过Termux访问设备存储",[15,124318,124319],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[109,124321,124323],{"className":117289,"code":124322,"language":117291,"meta":39,"style":39},"termux-setup-storage\n",[115,124324,124325],{"__ignoreMap":39},[118,124326,124327],{"class":120,"line":121},[118,124328,124322],{"class":1967},[72,124330,124331],{},[75,124332,124333,26466,124336],{},[278,124334,124335],{},"进入HTML文件所在的目录",[72,124337,124338],{},[75,124339,124340,124341,124343],{},"使用",[115,124342,101269],{},"命令进入HTML文件所在的目录：",[109,124345,124347],{"className":117289,"code":124346,"language":117291,"meta":39,"style":39},"cd ~\u002Fyour_html_folder\n",[115,124348,124349],{"__ignoreMap":39},[118,124350,124351,124353],{"class":120,"line":121},[118,124352,101269],{"class":177},[118,124354,124355],{"class":233}," ~\u002Fyour_html_folder\n",[72,124357,124358],{"start":40},[75,124359,124360,26466,124363,124368,124385],{},[278,124361,124362],{},"启动Python HTTP服务器",[72,124364,124365],{},[75,124366,124367],{},"运行以下命令启动一个简单的HTTP服务器：",[109,124369,124371],{"className":117289,"code":124370,"language":117291,"meta":39,"style":39},"python -m http.server 8000\n",[115,124372,124373],{"__ignoreMap":39},[118,124374,124375,124377,124379,124382],{"class":120,"line":121},[118,124376,30373],{"class":1967},[118,124378,100875],{"class":177},[118,124380,124381],{"class":233}," http.server",[118,124383,124384],{"class":177}," 8000\n",[72,124386,124387],{"start":1183},[75,124388,124389,124390,124393],{},"这会在端口",[115,124391,124392],{},"8000","上启动一个Web服务器。",[1135,124395,124396],{},[75,124397,124398],{},"启动服务器后，Termux会显示日志信息，例如：",[109,124400,124402],{"className":120809,"code":124401,"language":120811,"meta":120812,"style":39},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[115,124403,124404],{"__ignoreMap":39},[118,124405,124406],{"class":120,"line":121},[118,124407,124401],{},[1135,124409,124410],{},[75,124411,124412],{},"这表示服务器已成功启动。",[15,124414,124415],{},[278,124416,124417],{},"在浏览器中访问HTML文件",[72,124419,124420],{},[75,124421,124422,26466,124425,124430],{},[278,124423,124424],{},"在同一设备上访问",[72,124426,124427],{},[75,124428,124429],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[109,124431,124434],{"className":124432,"code":124433,"language":71657,"meta":39,"style":39},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[115,124435,124436],{"__ignoreMap":39},[118,124437,124438,124441],{"class":120,"line":121},[118,124439,124440],{"class":128},"http:",[118,124442,124443],{"class":187},"\u002F\u002Flocalhost:8000\n",[1135,124445,124446],{},[75,124447,124448,124449,124452],{},"如果HTML文件中有",[115,124450,124451],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[60,124454,124456],{"id":124455},"_76-linux重点知识","7.6 Linux重点知识",[89,124458,124460],{"id":124459},"_761-关于点的说明","7.6.1 关于点的说明",[15,124462,124463],{},[1466,124464],{"alt":39,"src":124465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[15,124467,124468],{},"一点本目录，两点上目录",[89,124470,124472],{"id":124471},"_762-目录","7.6.2 目录",[22003,124474,124476],{"id":124475},"_7621-系统启动必须","7.6.2.1 系统启动必须",[15,124478,124479],{},[278,124480,124481],{},"\u002Fboot:",[15,124483,124484],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[15,124486,124487],{},[278,124488,124489],{},"\u002Fetc:",[15,124491,124492],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[15,124494,124495],{},[278,124496,124497],{},"\u002Flib：",[15,124499,124500],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[15,124502,124503],{},[278,124504,124505],{},"\u002Fsys:",[15,124507,124508],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22003,124510,124512],{"id":124511},"_7622-指令集合","7.6.2.2 指令集合",[15,124514,124515],{},[278,124516,124517],{},"\u002Fbin:",[15,124519,124520],{},"为二进制文件的缩写，存放最经常使用的命令",[15,124522,124523],{},[278,124524,124525],{},"\u002Fsbin:",[15,124527,124528],{},"只有系统管理员才能使用的程序和指令",[22003,124530,124532],{"id":124531},"_7623-外部文件管理","7.6.2.3 外部文件管理",[15,124534,124535],{},[278,124536,124537],{},"\u002Fdev:",[15,124539,124540],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[15,124542,124543],{},[278,124544,124545],{},"\u002Fmedia:",[15,124547,124548],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[15,124550,124551],{},[278,124552,124553],{},"\u002Fmnt:",[15,124555,124556],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22003,124558,124560],{"id":124559},"_7624-临时文件","7.6.2.4 临时文件",[15,124562,124563],{},[278,124564,124565],{},"\u002Frun:",[15,124567,124568],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[15,124570,124571],{},[278,124572,124573],{},"\u002Flost+found:",[15,124575,124576],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[15,124578,124579],{},[278,124580,124581],{},"\u002Ftmp:",[15,124583,124584],{},"这个目录是用来存放一些临时文件的",[22003,124586,124588],{"id":124587},"_7625-账户","7.6.2.5 账户",[15,124590,124591],{},[278,124592,124593],{},"\u002Froot：",[15,124595,124596],{},"系统管理员的用户主目录",[15,124598,124599,26466],{},[278,124600,124601],{},"\u002Fhome",[15,124603,124604],{},"用户的主目录，以用户的账号命名的",[15,124606,124607,26466],{},[278,124608,124609],{},"\u002Fusr",[15,124611,124612],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[15,124614,124615],{},[278,124616,124617],{},"\u002Fusr\u002Fbin：",[15,124619,124620],{},"系统用户使用的应用程序与指令",[15,124622,124623],{},[278,124624,124625],{},"\u002Fusr\u002Fsbin：",[15,124627,124628],{},"超级用户使用的比较高级的管理程序和系统守护程序",[15,124630,124631],{},[278,124632,124633],{},"\u002Fusr\u002Fsrc：",[15,124635,124636],{},"内核源代码默认的放置目录",[22003,124638,124640],{"id":124639},"_7626-运行过程要用","7.6.2.6 运行过程要用",[15,124642,124643],{},[278,124644,124645],{},"\u002Fvar：",[15,124647,124648],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[15,124650,124651],{},[278,124652,124653],{},"\u002Fproc:",[15,124655,124656,124657,124660],{},"管理 ",[278,124658,124659],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22003,124662,124664],{"id":124663},"_7627-扩展用的","7.6.2.7 扩展用的",[15,124666,124667],{},[278,124668,124669],{},"\u002Fopt:",[15,124671,124672],{},"默认是空的，我们安装额外软件可以放在这个里面",[15,124674,124675],{},[278,124676,124677],{},"\u002Fsrv:",[15,124679,124680],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[89,124682,124684],{"id":124683},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[15,124686,124687],{},[1466,124688],{"alt":39,"src":124689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[15,124691,124692],{},"windows-->linux:",[15,124694,124695],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[15,124697,124698],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[15,124700,124701],{},"linux传输文件到windows",[15,124703,124704],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[89,124706,124708],{"id":124707},"_764-易忘知识","7.6.4 易忘知识",[15,124710,124711],{},"操作系统内核查看",[109,124713,124714],{"className":117289,"code":121283,"language":117291,"meta":39,"style":39},[115,124715,124716],{"__ignoreMap":39},[118,124717,124718,124720],{"class":120,"line":121},[118,124719,70197],{"class":1967},[118,124721,121292],{"class":177},[15,124723,124724],{},[1466,124725],{"alt":39,"src":124726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[15,124728,124729],{},[1466,124730],{"alt":39,"src":124731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[109,124733,124735],{"className":117289,"code":124734,"language":117291,"meta":39,"style":39},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[115,124736,124737,124749],{"__ignoreMap":39},[118,124738,124739,124741,124744,124747],{"class":120,"line":121},[118,124740,121500],{"class":1967},[118,124742,124743],{"class":233}," mvtest",[118,124745,124746],{"class":233}," mvtest2",[118,124748,2678],{"class":128},[118,124750,124751],{"class":120,"line":40},[118,124752,124753],{"class":1967},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[15,124755,124756],{},[1466,124757],{"alt":39,"src":124758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[15,124760,124761],{},[1466,124762],{"alt":39,"src":124763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[15,124765,124766,124767,124770],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[115,124768,124769],{},"du -a"," 可以快速查看磁盘使用细节。",[89,124772,124774],{"id":124773},"_765-vim","7.6.5 Vim",[15,124776,124777],{},[1466,124778],{"alt":39,"src":124779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[15,124781,124782],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[15,124784,124785],{},"一开始进去为命令模式，此时点击输入的字母为命令",[15,124787,124788],{},[278,124789,124790],{},"1.命令模式：",[15,124792,124793],{},"i 切换到输入模式，在光标当前位置开始输入文本",[15,124795,124796],{},"x 删除当前光标所在处的字符",[15,124798,124799],{},"：切换到底线命令模式，以在最底一行输入命令",[15,124801,124802],{},"a 进行插入模式，在光标下一个位置输入文本",[15,124804,124805],{},"o 在当前的下方插入一个新行，并进入插入模式",[15,124807,124808],{},"0 在当前行的上方插入一个新行，并进入插入模式",[15,124810,124811],{},"dd 剪切当前行",[15,124813,124814],{},"yy 复制当前行",[15,124816,124817],{},"p 粘贴剪贴板内容到光标下方",[15,124819,124820],{},"P 粘贴剪贴板内容到光标上方",[15,124822,124823],{},"u 撤销上一次操作",[15,124825,124826],{},"ctrl+r 重做上一次操作",[15,124828,124829,124831],{},[923,124830],{}," 保存文件",[15,124833,124834,124836],{},[773,124835],{}," 退出Vim编辑器",[15,124838,124839,124841],{},[773,124840],{},"! 强制退出Vim编辑器，不保存修改",[15,124843,124844],{},[278,124845,124846],{},"2.输入模式：",[15,124848,124849],{},[1466,124850],{"alt":39,"src":124851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[15,124853,124854],{},[278,124855,124856],{},"3.底线命令模式：",[15,124858,124859],{},[1466,124860],{"alt":39,"src":124861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[15,124863,124864],{},"按下esc可以退出底线命令模式",[89,124866,124868],{"id":124867},"_766-apt","7.6.6 apt",[15,124870,124871],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[89,124873,124875],{"id":124874},"_767-home与root的区别","7.6.7 home与root的区别",[15,124877,124878],{},[1466,124879],{"alt":39,"src":124880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[15,124882,124883],{},[1466,124884],{"alt":39,"src":124885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[15,124887,124888],{},[1466,124889],{"alt":39,"src":124890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[15,124892,124893],{},[1466,124894],{"alt":39,"src":124895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[89,124897,124899],{"id":124898},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[15,124901,124902],{},[21,124903,124904],{"href":124904,"rel":124905},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25],[72,124907,124908,124911],{},[75,124909,124910],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[75,124912,124913],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[15,124915,124916],{},[1466,124917],{"alt":39,"src":124918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[15,124920,124921],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[15,124923,124924],{},[1466,124925],{"alt":39,"src":124926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[109,124928,124930],{"className":120809,"code":124929,"language":120811,"meta":120812,"style":39},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[115,124931,124932,124937],{"__ignoreMap":39},[118,124933,124934],{"class":120,"line":121},[118,124935,124936],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[118,124938,124939],{"class":120,"line":40},[118,124940,124941],{},".\u002Fpycharm.sh\n",[15,124943,124944],{},"3️⃣创建.desktop文件",[15,124946,124947],{},[278,124948,124949],{},"原理：",[1135,124951,124952,124962],{},[75,124953,124954,124955,124961],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[278,124956,124957,124960],{},[115,124958,124959],{},".desktop"," 文件"," 来识别应用。",[75,124963,124964,124966,124967],{},[115,124965,124959],{}," 文件相当于一个“应用注册表”，告诉系统：",[1135,124968,124969,124972,124975,124978,124981],{},[75,124970,124971],{},"应用名字（Name）",[75,124973,124974],{},"图标（Icon）",[75,124976,124977],{},"执行命令（Exec）",[75,124979,124980],{},"分类（Categories）",[75,124982,124983],{},"是否需要终端（Terminal）",[109,124985,124987],{"className":120809,"code":124986,"language":120811,"meta":120812,"style":39},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[115,124988,124989,124994],{"__ignoreMap":39},[118,124990,124991],{"class":120,"line":121},[118,124992,124993],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[118,124995,124996],{"class":120,"line":40},[118,124997,124998],{},"nano pycharm.desktop\n",[15,125000,125001],{},"nano是一个命令行下的编辑器，也可以使用vim",[109,125003,125005],{"className":120809,"code":125004,"language":120811,"meta":120812,"style":39},"[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",[115,125006,125007,125012,125017,125022,125027,125032,125037,125042,125047,125052],{"__ignoreMap":39},[118,125008,125009],{"class":120,"line":121},[118,125010,125011],{},"[Desktop Entry]\n",[118,125013,125014],{"class":120,"line":40},[118,125015,125016],{},"Version=1.0\n",[118,125018,125019],{"class":120,"line":1183},[118,125020,125021],{},"Type=Application\n",[118,125023,125024],{"class":120,"line":1198},[118,125025,125026],{},"Name=PyCharm\n",[118,125028,125029],{"class":120,"line":1204},[118,125030,125031],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[118,125033,125034],{"class":120,"line":1218},[118,125035,125036],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[118,125038,125039],{"class":120,"line":1224},[118,125040,125041],{},"Comment=JetBrains PyCharm IDE\n",[118,125043,125044],{"class":120,"line":1315},[118,125045,125046],{},"Categories=Development;IDE;\n",[118,125048,125049],{"class":120,"line":1321},[118,125050,125051],{},"Terminal=false\n",[118,125053,125054],{"class":120,"line":1333},[118,125055,125056],{},"StartupWMClass=jetbrains-pycharm\n",[1135,125058,125059,125065,125071,125077],{},[75,125060,125061,125064],{},[115,125062,125063],{},"Exec"," → 点击图标时执行的命令",[75,125066,125067,125070],{},[115,125068,125069],{},"Icon"," → 显示在菜单和桌面上的图标",[75,125072,125073,125076],{},[115,125074,125075],{},"Terminal=false"," → 不打开终端",[75,125078,125079,125082],{},[115,125080,125081],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125084,125085,125086],"blockquote",{},[15,125087,125088,125089,125091,125092],{},"可以理解成 ",[115,125090,124959],{}," 文件是 Linux 的 ",[278,125093,125094],{},"快捷方式配置文件",[15,125096,125097],{},"4️⃣设置可执行权限",[109,125099,125101],{"className":120809,"code":125100,"language":120811,"meta":120812,"style":39},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[115,125102,125103],{"__ignoreMap":39},[118,125104,125105],{"class":120,"line":121},[118,125106,125100],{},[15,125108,125109],{},"5️⃣桌面图标启动的话如下：",[109,125111,125113],{"className":120809,"code":125112,"language":120811,"meta":120812,"style":39},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[115,125114,125115,125120],{"__ignoreMap":39},[118,125116,125117],{"class":120,"line":121},[118,125118,125119],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[118,125121,125122],{"class":120,"line":40},[118,125123,125124],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[72,125126,125127],{"start":1183},[75,125128,125129],{},"下载Appimage文件实现软件的安装",[15,125131,125132],{},"1️⃣先下载appimage",[15,125134,125135],{},[21,125136,125137],{"href":125137,"rel":125138},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25],[15,125140,125141],{},[1466,125142],{"alt":39,"src":125143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[15,125145,125146],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[15,125148,125149],{},[1466,125150],{"alt":39,"src":125151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[15,125153,125154],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[15,125156,125157],{},[1466,125158],{"alt":39,"src":125159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[15,125161,125162],{},[1466,125163],{"alt":39,"src":125164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[15,125166,125167,125168,125171],{},"3️⃣给他们放在",[115,125169,125170],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[15,125173,125174],{},"4️⃣给软件执行权限",[109,125176,125178],{"className":120809,"code":125177,"language":120811,"meta":120812,"style":39},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[115,125179,125180,125185],{"__ignoreMap":39},[118,125181,125182],{"class":120,"line":121},[118,125183,125184],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[118,125186,125187],{"class":120,"line":40},[118,125188,125189],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[15,125191,125192],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[109,125194,125196],{"className":117289,"code":125195,"language":117291,"meta":39,"style":39},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[115,125197,125198,125205,125212,125218],{"__ignoreMap":39},[118,125199,125200,125202],{"class":120,"line":121},[118,125201,101269],{"class":177},[118,125203,125204],{"class":233}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[118,125206,125207,125209],{"class":120,"line":40},[118,125208,101276],{"class":1967},[118,125210,125211],{"class":233}," .\u002Fqqmusic.desktop\n",[118,125213,125214,125216],{"class":120,"line":1183},[118,125215,124260],{"class":1967},[118,125217,125211],{"class":233},[118,125219,125220,125222,125224,125226],{"class":120,"line":1198},[118,125221,24581],{"class":1967},[118,125223,24584],{"class":233},[118,125225,123126],{"class":233},[118,125227,125211],{"class":233},[15,125229,125230,125232],{},[115,125231,101276],{},"：一个 Linux 命令，主要功能是：",[1135,125234,125235,125238],{},[75,125236,125237],{},"如果文件不存在，就创建一个新的空文件",[75,125239,125240],{},"如果文件已存在，就更新该文件的最后修改时间",[109,125242,125244],{"className":120809,"code":125243,"language":120811,"meta":120812,"style":39},"[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",[115,125245,125246,125250,125255,125260,125265,125269,125274],{"__ignoreMap":39},[118,125247,125248],{"class":120,"line":121},[118,125249,125011],{},[118,125251,125252],{"class":120,"line":40},[118,125253,125254],{},"Name=QQ音乐\n",[118,125256,125257],{"class":120,"line":1183},[118,125258,125259],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[118,125261,125262],{"class":120,"line":1198},[118,125263,125264],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[118,125266,125267],{"class":120,"line":1204},[118,125268,125021],{},[118,125270,125271],{"class":120,"line":1218},[118,125272,125273],{},"Categories=Audio;Music;Player;\n",[118,125275,125276],{"class":120,"line":1224},[118,125277,125278],{},"Comment=QQ Music Client for Linux\n",[15,125280,125281],{},"将文件复制进去",[15,125283,125284],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[15,125286,125287],{},[1466,125288],{"alt":39,"src":125289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[15,125291,125292],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[15,125294,125295],{},[1466,125296],{"alt":39,"src":125297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[15,125299,125300,125301,125304,125305,125308],{},"如果你用的不是KDE，那么也可以直接修改",[115,125302,125303],{},"qqmuic.desktop","：在exec的末尾加上",[115,125306,125307],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[109,125310,125312],{"className":120809,"code":125311,"language":120811,"meta":120812,"style":39},"[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",[115,125313,125314,125318,125322,125327,125331,125335,125339],{"__ignoreMap":39},[118,125315,125316],{"class":120,"line":121},[118,125317,125011],{},[118,125319,125320],{"class":120,"line":40},[118,125321,125254],{},[118,125323,125324],{"class":120,"line":1183},[118,125325,125326],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[118,125328,125329],{"class":120,"line":1198},[118,125330,125264],{},[118,125332,125333],{"class":120,"line":1204},[118,125334,125021],{},[118,125336,125337],{"class":120,"line":1218},[118,125338,125273],{},[118,125340,125341],{"class":120,"line":1224},[118,125342,125278],{},[15,125344,125345],{},[1466,125346],{"alt":39,"src":125347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[15,125349,125350],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[109,125352,125354],{"className":120809,"code":125353,"language":120811,"meta":120812,"style":39},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[115,125355,125356],{"__ignoreMap":39},[118,125357,125358],{"class":120,"line":121},[118,125359,125353],{},[72,125361,125362],{"start":1198},[75,125363,125364],{},"去Flathub上安装软件",[15,125366,125367],{},[21,125368,125369],{"href":125369,"rel":125370},"https:\u002F\u002Fflathub.org\u002F",[25],[15,125372,125373],{},"1️⃣去上面的官网搜索软件+下载软件",[15,125375,125376],{},[1466,125377],{"alt":39,"src":125378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[109,125380,125382],{"className":120809,"code":125381,"language":120811,"meta":120812,"style":39},"flatpak install flathub com.obsproject.Studio\n",[115,125383,125384],{"__ignoreMap":39},[118,125385,125386],{"class":120,"line":121},[118,125387,125381],{},[15,125389,125390],{},[1466,125391],{"alt":39,"src":125392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[15,125394,125395],{},"2️⃣运行软件",[15,125397,125398],{},"a.官方方式：",[15,125400,125401],{},[1466,125402],{"alt":39,"src":125403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[109,125405,125406],{"className":120809,"code":125381,"language":120811,"meta":120812,"style":39},[115,125407,125408],{"__ignoreMap":39},[118,125409,125410],{"class":120,"line":121},[118,125411,125381],{},[15,125413,125414],{},"b.当普通软件运行：",[15,125416,125417],{},[1466,125418],{"alt":39,"src":125419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[15,125421,125422],{},[1466,125423],{"alt":39,"src":125424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5131,125426,125427],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":39,"searchDepth":40,"depth":40,"links":125429},[125430,125431,125436,125437,125443,125444],{"id":122162,"depth":40,"text":122163},{"id":122504,"depth":40,"text":122505,"children":125432},[125433,125434,125435],{"id":122508,"depth":1183,"text":122509},{"id":122575,"depth":1183,"text":122576},{"id":122836,"depth":1183,"text":122837},{"id":122989,"depth":40,"text":122990},{"id":123227,"depth":40,"text":123228,"children":125438},[125439,125440,125441,125442],{"id":123279,"depth":1183,"text":123280},{"id":123565,"depth":1183,"text":123566},{"id":123836,"depth":1183,"text":123837},{"id":124095,"depth":1183,"text":124096},{"id":124154,"depth":40,"text":124155},{"id":124455,"depth":40,"text":124456,"children":125445},[125446,125447,125448,125449,125450,125451,125452,125453],{"id":124459,"depth":1183,"text":124460},{"id":124471,"depth":1183,"text":124472},{"id":124683,"depth":1183,"text":124684},{"id":124707,"depth":1183,"text":124708},{"id":124773,"depth":1183,"text":124774},{"id":124867,"depth":1183,"text":124868},{"id":124874,"depth":1183,"text":124875},{"id":124898,"depth":1183,"text":124899},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122154,"description":42},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125460,"title":125461,"body":125462,"description":42,"extension":43,"meta":125466,"navigation":45,"path":125467,"seo":125468,"stem":125469,"__hash__":125470},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125463,"toc":125464},[],{"title":39,"searchDepth":40,"depth":40,"links":125465},[],{"category":30256},"\u002Fwiki\u002F2025-01-27-linux",{"title":125461,"description":42},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125472,"title":125473,"body":125474,"description":125478,"extension":43,"meta":125869,"navigation":45,"path":125870,"seo":125871,"stem":125872,"__hash__":125873},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125475,"toc":125867},[125476,125479,125483,125500,125503,125556,125560,125562,125602,125611,125615,125618,125859,125864],[15,125477,125478],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125480,125482],{"id":125481},"_1ubuntu环境配置","1.Ubuntu环境配置",[72,125484,125485,125488,125491,125494,125497],{},[75,125486,125487],{},"ubuntu环境换源",[75,125489,125490],{},"安装cuda",[75,125492,125493],{},"安装miniconda",[75,125495,125496],{},"安装pytorch",[75,125498,125499],{},"安装genesis",[15,125501,125502],{},"参考链接：",[109,125504,125506],{"className":23827,"code":125505,"language":23829,"meta":39,"style":39},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[115,125507,125508],{"__ignoreMap":39},[118,125509,125510,125513,125516,125519,125521,125524,125527,125529,125532,125535,125537,125540,125543,125545,125548,125551,125553],{"class":120,"line":121},[118,125511,125512],{"class":1967},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[118,125514,125515],{"class":233},"=blogdetail",[118,125517,125518],{"class":128},"&sharetype",[118,125520,174],{"class":124},[118,125522,125523],{"class":233},"blogdetail",[118,125525,125526],{"class":128},"&sharerId",[118,125528,174],{"class":124},[118,125530,125531],{"class":233},"144728092",[118,125533,125534],{"class":128},"&sharerefer",[118,125536,174],{"class":124},[118,125538,125539],{"class":233},"PC",[118,125541,125542],{"class":128},"&sharesource",[118,125544,174],{"class":124},[118,125546,125547],{"class":233},"qq_69379513",[118,125549,125550],{"class":128},"&sharefrom",[118,125552,174],{"class":124},[118,125554,125555],{"class":233},"from_link\n",[10,125557,125559],{"id":125558},"_2genesis-报错issue","2.Genesis 报错issue",[15,125561,125502],{},[109,125563,125564],{"className":23827,"code":125505,"language":23829,"meta":39,"style":39},[115,125565,125566],{"__ignoreMap":39},[118,125567,125568,125570,125572,125574,125576,125578,125580,125582,125584,125586,125588,125590,125592,125594,125596,125598,125600],{"class":120,"line":121},[118,125569,125512],{"class":1967},[118,125571,125515],{"class":233},[118,125573,125518],{"class":128},[118,125575,174],{"class":124},[118,125577,125523],{"class":233},[118,125579,125526],{"class":128},[118,125581,174],{"class":124},[118,125583,125531],{"class":233},[118,125585,125534],{"class":128},[118,125587,174],{"class":124},[118,125589,125539],{"class":233},[118,125591,125542],{"class":128},[118,125593,174],{"class":124},[118,125595,125547],{"class":233},[118,125597,125550],{"class":128},[118,125599,174],{"class":124},[118,125601,125555],{"class":233},[109,125603,125605],{"className":23827,"code":125604,"language":23829,"meta":39,"style":39},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[115,125606,125607],{"__ignoreMap":39},[118,125608,125609],{"class":120,"line":121},[118,125610,125604],{"class":1967},[10,125612,125614],{"id":125613},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[15,125616,125617],{},"hello_robot.py",[109,125619,125621],{"className":30371,"code":125620,"language":30373,"meta":39,"style":39},"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",[115,125622,125623,125629,125644,125648,125660,125672,125676,125689,125693,125712,125722,125732,125746,125750,125754,125759,125763,125773,125780,125794,125801,125811,125816,125820,125838,125843,125847,125854],{"__ignoreMap":39},[118,125624,125625,125627],{"class":120,"line":121},[118,125626,30385],{"class":124},[118,125628,45298],{"class":128},[118,125630,125631,125634,125637,125639,125641],{"class":120,"line":40},[118,125632,125633],{"class":128},"os.environ[",[118,125635,125636],{"class":233},"'PYOPENGL_PLATFORM'",[118,125638,4447],{"class":128},[118,125640,174],{"class":124},[118,125642,125643],{"class":233}," 'glx'\n",[118,125645,125646],{"class":120,"line":1183},[118,125647,2404],{"emptyLinePlaceholder":45},[118,125649,125650,125652,125655,125657],{"class":120,"line":1198},[118,125651,30385],{"class":124},[118,125653,125654],{"class":128}," genesis ",[118,125656,31376],{"class":124},[118,125658,125659],{"class":128}," gs\n",[118,125661,125662,125664,125667,125669],{"class":120,"line":1204},[118,125663,30730],{"class":124},[118,125665,125666],{"class":128}," pynput ",[118,125668,30385],{"class":124},[118,125670,125671],{"class":128}," keyboard\n",[118,125673,125674],{"class":120,"line":1218},[118,125675,2404],{"emptyLinePlaceholder":45},[118,125677,125678,125681,125684,125686],{"class":120,"line":1224},[118,125679,125680],{"class":128},"gs.init(",[118,125682,125683],{"class":5221},"backend",[118,125685,174],{"class":124},[118,125687,125688],{"class":128},"gs.gpu)\n",[118,125690,125691],{"class":120,"line":1315},[118,125692,2404],{"emptyLinePlaceholder":45},[118,125694,125695,125698,125700,125703,125706,125708,125710],{"class":120,"line":1321},[118,125696,125697],{"class":128},"scene ",[118,125699,174],{"class":124},[118,125701,125702],{"class":128}," gs.Scene(",[118,125704,125705],{"class":5221},"show_viewer",[118,125707,174],{"class":124},[118,125709,31469],{"class":177},[118,125711,135],{"class":128},[118,125713,125714,125717,125719],{"class":120,"line":1333},[118,125715,125716],{"class":128},"plane ",[118,125718,174],{"class":124},[118,125720,125721],{"class":128}," scene.add_entity(gs.morphs.Plane())\n",[118,125723,125724,125727,125729],{"class":120,"line":1616},[118,125725,125726],{"class":128},"franka ",[118,125728,174],{"class":124},[118,125730,125731],{"class":128}," scene.add_entity(\n",[118,125733,125734,125737,125739,125741,125744],{"class":120,"line":1621},[118,125735,125736],{"class":128},"    gs.morphs.MJCF(",[118,125738,45347],{"class":5221},[118,125740,174],{"class":124},[118,125742,125743],{"class":233},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[118,125745,38040],{"class":128},[118,125747,125748],{"class":120,"line":1627},[118,125749,135],{"class":128},[118,125751,125752],{"class":120,"line":1632},[118,125753,2404],{"emptyLinePlaceholder":45},[118,125755,125756],{"class":120,"line":1646},[118,125757,125758],{"class":128},"scene.build()\n",[118,125760,125761],{"class":120,"line":1651},[118,125762,2404],{"emptyLinePlaceholder":45},[118,125764,125765,125767,125770],{"class":120,"line":1657},[118,125766,31940],{"class":124},[118,125768,125769],{"class":1967}," on_press",[118,125771,125772],{"class":128},"(key):\n",[118,125774,125775,125778],{"class":120,"line":1678},[118,125776,125777],{"class":124},"    try",[118,125779,3743],{"class":128},[118,125781,125782,125784,125787,125789,125792],{"class":120,"line":1683},[118,125783,2501],{"class":124},[118,125785,125786],{"class":128}," key.char ",[118,125788,2953],{"class":124},[118,125790,125791],{"class":233}," 'q'",[118,125793,3743],{"class":128},[118,125795,125796,125798],{"class":120,"line":1697},[118,125797,15737],{"class":124},[118,125799,125800],{"class":177}," False\n",[118,125802,125803,125806,125809],{"class":120,"line":1702},[118,125804,125805],{"class":124},"    except",[118,125807,125808],{"class":177}," AttributeError",[118,125810,3743],{"class":128},[118,125812,125813],{"class":120,"line":1731},[118,125814,125815],{"class":124},"        pass\n",[118,125817,125818],{"class":120,"line":1736},[118,125819,2404],{"emptyLinePlaceholder":45},[118,125821,125822,125825,125827,125830,125833,125835],{"class":120,"line":1753},[118,125823,125824],{"class":128},"listener ",[118,125826,174],{"class":124},[118,125828,125829],{"class":128}," keyboard.Listener(",[118,125831,125832],{"class":5221},"on_press",[118,125834,174],{"class":124},[118,125836,125837],{"class":128},"on_press)\n",[118,125839,125840],{"class":120,"line":1758},[118,125841,125842],{"class":128},"listener.start()\n",[118,125844,125845],{"class":120,"line":1763},[118,125846,2404],{"emptyLinePlaceholder":45},[118,125848,125849,125851],{"class":120,"line":1768},[118,125850,108656],{"class":124},[118,125852,125853],{"class":128}," listener.running:\n",[118,125855,125856],{"class":120,"line":1782},[118,125857,125858],{"class":128},"    scene.step()\n",[15,125860,125861],{},[1466,125862],{"alt":39,"src":125863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5131,125865,125866],{},"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":39,"searchDepth":40,"depth":40,"links":125868},[],{"category":23383},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125473,"description":125478},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125875,"title":125876,"body":125877,"description":42,"extension":43,"meta":125892,"navigation":45,"path":125893,"seo":125894,"stem":125895,"__hash__":125896},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125878,"toc":125889},[125879,125882,125886],[10,125880,125876],{"id":125881},"_1-基础知识",[60,125883,125885],{"id":125884},"_11-js的组成","1.1 js的组成",[15,125887,125888],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":39,"searchDepth":40,"depth":40,"links":125890},[125891],{"id":125884,"depth":40,"text":125885},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125876,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125898,"title":125899,"body":125900,"description":42,"extension":43,"meta":126039,"navigation":45,"path":126040,"seo":126041,"stem":126042,"__hash__":126043},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125901,"toc":126027},[125902,125905,125909,125912,125916,125926,125930,125933,125936,125939,125943,125950,125956,125960,125966,125977,125981,125984,125988,125991,125995,125998,126002,126005,126009,126012,126015,126018,126021,126024],[10,125903,125899],{"id":125904},"_2-vscode必备内容",[60,125906,125908],{"id":125907},"_21-标签分类","2.1 标签分类",[15,125910,125911],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[60,125913,125915],{"id":125914},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[15,125917,125918,125919,125921,125922,125925],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[115,125920,355],{}," 然后按 ",[115,125923,125924],{},"Tab","，快速自动生成基本结构。",[60,125927,125929],{"id":125928},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[15,125931,125932],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[15,125934,125935],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[15,125937,125938],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[60,125940,125942],{"id":125941},"_24-视图缩放","2.4 视图缩放",[15,125944,125945,125946,125949],{},"缩放视图 ",[115,125947,125948],{},"ctrl+"," 可实现代码增大。",[15,125951,125952,125955],{},[115,125953,125954],{},"ctrl-"," 可实现代码减小。",[60,125957,125959],{"id":125958},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[15,125961,125962,125963,28378],{},"VSCode 新建文件快捷键为 ",[115,125964,125965],{},"ctrl+N",[15,125967,125968,125969,125972,125973,125976],{},"保存快捷键为 ",[115,125970,125971],{},"ctrl+S","，将文本保存为 ",[115,125974,125975],{},".html"," 文件。",[60,125978,125980],{"id":125979},"_26-auto-rename-tag","2.6 Auto Rename Tag",[15,125982,125983],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[60,125985,125987],{"id":125986},"_27-vscode-icons","2.7 vscode-icons",[15,125989,125990],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[60,125992,125994],{"id":125993},"_28-easy-less","2.8 Easy LESS",[15,125996,125997],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[60,125999,126001],{"id":126000},"_29-会了吧插件","2.9 会了吧插件",[15,126003,126004],{},"会了吧插件可以展示代码中英语单词的意思。",[60,126006,126008],{"id":126007},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[15,126010,126011],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[15,126013,126014],{},"②选定多个相同的单词:ctrl+D",[15,126016,126017],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[15,126019,126020],{},"④全局替换某些单词:ctrl+h",[15,126022,126023],{},"⑤快速定位到某一行:ctrl+g",[15,126025,126026],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":39,"searchDepth":40,"depth":40,"links":126028},[126029,126030,126031,126032,126033,126034,126035,126036,126037,126038],{"id":125907,"depth":40,"text":125908},{"id":125914,"depth":40,"text":125915},{"id":125928,"depth":40,"text":125929},{"id":125941,"depth":40,"text":125942},{"id":125958,"depth":40,"text":125959},{"id":125979,"depth":40,"text":125980},{"id":125986,"depth":40,"text":125987},{"id":125993,"depth":40,"text":125994},{"id":126000,"depth":40,"text":126001},{"id":126007,"depth":40,"text":126008},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125899,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126045,"title":126046,"body":126047,"description":42,"extension":43,"meta":126206,"navigation":45,"path":126207,"seo":126208,"stem":126209,"__hash__":126210},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126048,"toc":126198},[126049,126052,126056,126066,126072,126078,126082,126091,126095,126100,126103,126106,126110,126113,126123,126132,126141,126150,126160,126167,126172,126177,126190],[10,126050,126046],{"id":126051},"_3-html文本与容器标签",[60,126053,126055],{"id":126054},"_31-标题标签","3.1 标题标签",[15,126057,126058,126061,126062,126065],{},[115,126059,126060],{},"\u003Ch1>","我是一级标签",[115,126063,126064],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[15,126067,126068,126061,126070],{},[115,126069,126060],{},[115,126071,126064],{},[15,126073,123328,126074,126077],{},[115,126075,126076],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[60,126079,126081],{"id":126080},"_32-段落标签","3.2 段落标签",[15,126083,126084,126087,126088],{},[115,126085,126086],{},"\u003Cp>","....",[115,126089,126090],{},"\u003C\u002Fp>",[60,126092,126094],{"id":126093},"_33-换行标签","3.3 换行标签",[15,126096,126097],{},[115,126098,126099],{},"\u003Cbr \u002F>",[15,126101,126102],{},"具有强制换行的作用",[15,126104,126105],{},"单标签",[60,126107,126109],{"id":126108},"_34-文本格式化标签","3.4 文本格式化标签",[15,126111,126112],{},"提供粗体、斜体和下划线等效果",[15,126114,126115,126116,82532,126119,126122],{},"加粗：",[115,126117,126118],{},"\u003Cstrong>...\u003C\u002Fstrong>",[115,126120,126121],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[15,126124,126125,126126,82532,126129,126122],{},"斜体：",[115,126127,126128],{},"\u003Cem>...\u003C\u002Fem>",[115,126130,126131],{},"\u003Ci>...\u003C\u002Fi>",[15,126133,126134,126135,82532,126138,126122],{},"删除线：",[115,126136,126137],{},"\u003Cdel>...\u003C\u002Fdel>",[115,126139,126140],{},"\u003Cs>...\u003C\u002Fs>",[15,126142,126143,126144,82532,126147,126122],{},"下划线：",[115,126145,126146],{},"\u003Cins>...\u003C\u002Fins>",[115,126148,126149],{},"\u003Cu>...\u003C\u002Fu>",[60,126151,126153,126154,18415,126157,102686],{"id":126152},"_35-div和span标签","3.5 ",[115,126155,126156],{},"\u003Cdiv>",[115,126158,126159],{},"\u003Cspan>",[15,126161,126162,101011,126164,126166],{},[115,126163,126156],{},[115,126165,126159],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[15,126168,126169],{},[115,126170,126171],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[15,126173,126174],{},[115,126175,126176],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[15,126178,126179,126180,126182,126183,126185,126186,126189],{},"两者特点：①",[115,126181,126156],{}," 标签用来布局，但一行通常只放一个 ",[115,126184,126156],{},"。可以理解为一个大盒子，独占一行，在 ",[115,126187,126188],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[15,126191,77242,126192,126194,126195,126197],{},[115,126193,126159],{}," 标签也可用于布局，一行可以放多个 ",[115,126196,126159],{},"，可理解为小盒子。",{"title":39,"searchDepth":40,"depth":40,"links":126199},[126200,126201,126202,126203,126204],{"id":126054,"depth":40,"text":126055},{"id":126080,"depth":40,"text":126081},{"id":126093,"depth":40,"text":126094},{"id":126108,"depth":40,"text":126109},{"id":126152,"depth":40,"text":126205},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126046,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126212,"title":126213,"body":126214,"description":42,"extension":43,"meta":126411,"navigation":45,"path":126412,"seo":126413,"stem":126414,"__hash__":126415},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126215,"toc":126403},[126216,126219,126223,126226,126232,126239,126245,126251,126254,126257,126260,126263,126266,126269,126272,126276,126279,126282,126285,126291,126297,126303,126310,126314,126320,126326,126329,126332,126338,126344,126350,126353,126356,126360,126363,126373,126379,126383,126392,126396,126399],[10,126217,126213],{"id":126218},"_4-html图像与链接",[60,126220,126222],{"id":126221},"_41-图像标签","4.1 图像标签",[15,126224,126225],{},"（1）标签",[15,126227,126228,126231],{},[115,126229,126230],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[15,126233,126234,126235,126238],{},"src是",[115,126236,126237],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[15,126240,126241,126242],{},"alt:文本，替换文本。图像不能显示的文字 ",[115,126243,126244],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[15,126246,126247,126248],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[115,126249,126250],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[15,126252,126253],{},"width:像素，设置图像的宽度",[15,126255,126256],{},"height:像素，设置图像的高度",[15,126258,126259],{},"border：像素，设置图像的边框粗细",[15,126261,126262],{},"（2）图像标签属性的注意点：",[15,126264,126265],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[15,126267,126268],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[15,126270,126271],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[60,126273,126275],{"id":126274},"_42-路径注意要点","4.2 路径注意要点：",[15,126277,126278],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[15,126280,126281],{},"（2）根目录：就是打开文件夹的第一层根目录",[15,126283,126284],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[15,126286,126287,126288],{},"①同一级路径：图像文件位于HTML文件同一级，如",[115,126289,126290],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[15,126292,126293,126294],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[115,126295,126296],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[15,126298,126299,126300],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[115,126301,126302],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[15,126304,126305,126306,379],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[21,126307,126308],{"href":126308,"rel":126309},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25],[60,126311,126313],{"id":126312},"_43-超链接标签","4.3 超链接标签",[15,126315,126316,126319],{},[115,126317,126318],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[15,126321,126322,126323],{},"①语法格式：",[115,126324,126325],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[15,126327,126328],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[15,126330,126331],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[15,126333,126334,126335],{},"③链接分类：外部链接：",[115,126336,126337],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[15,126339,126340,126341],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[115,126342,126343],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[15,126345,126346,126347],{},"空链接：如果当时没有确定链接目标时，",[115,126348,126349],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[15,126351,126352],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[15,126354,126355],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[60,126357,126359],{"id":126358},"_44-锚点链接","4.4 锚点链接",[15,126361,126362],{},"点我们点击链接，可以快速定位到页面中的某个位置",[15,126364,126365,126366,126369,126370],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[115,126367,126368],{},"\u003Ca href=\"#two\">","第二级",[115,126371,126372],{},"\u003C\u002Fa>",[15,126374,126375,126376],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[115,126377,126378],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[60,126380,126382],{"id":126381},"_45-注释标签","4.5 注释标签",[15,126384,126385,126388,126389],{},[115,126386,126387],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[115,126390,126391],{},"ctrl+\u002F",[60,126393,126395],{"id":126394},"_46-特殊字符","4.6 特殊字符",[15,126397,126398],{},"可以实现添加多个空格",[1466,126400],{"style":126401,"src":126402},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":39,"searchDepth":40,"depth":40,"links":126404},[126405,126406,126407,126408,126409,126410],{"id":126221,"depth":40,"text":126222},{"id":126274,"depth":40,"text":126275},{"id":126312,"depth":40,"text":126313},{"id":126358,"depth":40,"text":126359},{"id":126381,"depth":40,"text":126382},{"id":126394,"depth":40,"text":126395},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126213,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126417,"title":126418,"body":126419,"description":42,"extension":43,"meta":126712,"navigation":45,"path":126713,"seo":126714,"stem":126715,"__hash__":126716},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126420,"toc":126703},[126421,126424,126428,126431,126434,126437,126440,126443,126446,126449,126452,126455,126475,126481,126485,126488,126491,126494,126497,126500,126503,126507,126510,126513,126516,126519,126532,126537,126540,126543,126558,126561,126564,126567,126570,126573,126577,126580,126587,126590,126593,126596,126599,126602,126608,126611,126614,126620,126623,126626,126629,126635,126638,126641,126655,126662,126665,126668,126675,126684,126687,126690,126693,126697,126700],[10,126422,126418],{"id":126423},"_5-html表格列表与表单",[60,126425,126427],{"id":126426},"_51-表格标签","5.1 表格标签",[15,126429,126430],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[15,126432,126433],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[15,126435,126436],{},"②表格基本语法：",[1466,126438],{"style":126401,"src":126439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[15,126441,126442],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1466,126444],{"style":126401,"src":126445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[15,126447,126448],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1466,126450],{"style":126401,"src":126451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[15,126453,126454],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[15,126456,126457,126460,126461,126463,126464,126467,126468,126470,126471,126474],{},[115,126458,126459],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[115,126462,126459],{},"内部必须拥有",[115,126465,126466],{},"\u003Ctr>","标签，一般位于第一行，",[115,126469,126459],{},"比",[115,126472,126473],{},"\u003Cth>","范围广",[15,126476,126477,126480],{},[115,126478,126479],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[60,126482,126484],{"id":126483},"_52-合并单元格","5.2 合并单元格",[15,126486,126487],{},"（1）合并单元格方式：",[15,126489,126490],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[15,126492,126493],{},"②跨列合并：colspan=\"合并单元格的个数\"",[15,126495,126496],{},"（2）目标单元格：",[15,126498,126499],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[15,126501,126502],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[60,126504,126506],{"id":126505},"_53-列表标签","5.3 列表标签",[15,126508,126509],{},"（1）分类：无序列表、有序列表、自定义列表",[15,126511,126512],{},"①无序列表：",[1466,126514],{"style":126401,"src":126515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[15,126517,126518],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[15,126520,126521,126524,126525,126528,126529,126531],{},[115,126522,126523],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[115,126526,126527],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[115,126530,126523],{},"中输入其他标签或文字是不对的",[15,126533,126534,126536],{},[115,126535,126527],{},"之间相当于一个容器，可以容纳所有元素",[15,126538,126539],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[15,126541,126542],{},"在css中去除前边的小圆点采用如下代码:",[109,126544,126548],{"className":126545,"code":126546,"language":126547,"meta":39,"style":39},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[115,126549,126550],{"__ignoreMap":39},[118,126551,126552,126555],{"class":120,"line":121},[118,126553,126554],{"class":51293},"list-style",[118,126556,126557],{"class":128},": none;\n",[15,126559,126560],{},"②有序列表：",[1466,126562],{"style":126401,"src":126563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[15,126565,126566],{},"③自定义列表：",[1466,126568],{"style":126401,"src":126569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1466,126571],{"style":126401,"src":126572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[60,126574,126576],{"id":126575},"_54-表单标签","5.4 表单标签",[15,126578,126579],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[15,126581,126582,126583,126586],{},"（1）表单域：包含单元素的区域，",[115,126584,126585],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1466,126588],{"style":126401,"src":126589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[15,126591,126592],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[15,126594,126595],{},"表单元素提交必须有name属性",[15,126597,126598],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[15,126600,126601],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[15,126603,77219,126604,126607],{},[115,126605,126606],{},"\u003Cinput>","输入表单元素",[1466,126609],{"style":126401,"src":126610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1466,126612],{"style":126401,"src":126613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[15,126615,126616,126617],{},"单选按钮：",[115,126618,126619],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1466,126621],{"style":126401,"src":126622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[15,126624,126625],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1466,126627],{"style":126401,"src":126628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[15,126630,126631,126634],{},[278,126632,126633],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[15,126636,126637],{},"②select下拉表单元素：可以节约页面控件",[1466,126639],{"style":126401,"src":126640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[15,126642,126643,13800,126645,126648,126649,126651,126652,126654],{},[278,126644,158],{},[115,126646,126647],{},"\u003Cselect>","中至少包含一对",[115,126650,102707],{},"；在",[115,126653,102707],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[15,126656,126657,126658,126661],{},"③",[115,126659,126660],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1466,126663],{"style":126401,"src":126664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[15,126666,126667],{},"3行20列",[60,126669,126671,126672,102686],{"id":126670},"_55-lable标签","5.5 ",[115,126673,126674],{},"\u003Clable>",[15,126676,126677,126678,126680,126681,126683],{},"它不是表单标签，但常常与表单标签搭配使用，",[115,126679,126674],{},"标签用于绑定一个表单标签，当点击",[115,126682,126674],{},"标签内的文本",[15,126685,126686],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1466,126688],{"style":126401,"src":126689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1466,126691],{"style":126401,"src":126692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[60,126694,126696],{"id":126695},"_56-实例","5.6 实例",[1466,126698],{"style":126401,"src":126699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5131,126701,126702],{},"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":39,"searchDepth":40,"depth":40,"links":126704},[126705,126706,126707,126708,126709,126711],{"id":126426,"depth":40,"text":126427},{"id":126483,"depth":40,"text":126484},{"id":126505,"depth":40,"text":126506},{"id":126575,"depth":40,"text":126576},{"id":126670,"depth":40,"text":126710},"5.5 \u003Clable>标签",{"id":126695,"depth":40,"text":126696},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126418,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126718,"title":126719,"body":126720,"description":42,"extension":43,"meta":127269,"navigation":45,"path":127270,"seo":127271,"stem":127272,"__hash__":127273},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126721,"toc":127244},[126722,126725,126729,126732,126735,126739,126742,126745,126748,126751,126754,126757,126760,126764,126767,126771,126774,126777,126780,126784,126787,126790,126793,126799,126802,126805,126808,126811,126814,126817,126820,126853,126857,126860,126863,126866,126870,126873,126876,126879,126882,126885,126889,126892,126895,126898,126902,126905,126909,126912,126916,126919,126924,126928,126931,126935,126938,126941,126944,126947,126974,126977,126981,126984,126987,126992,126995,126998,127002,127005,127010,127013,127016,127019,127023,127026,127029,127032,127036,127039,127042,127045,127049,127053,127056,127096,127099,127103,127110,127113,127117,127120,127166,127170,127173,127176,127179,127207,127211,127214,127241],[10,126723,126719],{"id":126724},"_6-css语法与文本样式",[60,126726,126728],{"id":126727},"_61-css语法规范","6.1 css语法规范",[15,126730,126731],{},"由两部分组成，选择器及一条或多条声明",[1466,126733],{"style":126401,"src":126734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[15,126736,126737],{},[278,126738,158],{},[15,126740,126741],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[15,126743,126744],{},"②属性与属性值以“键值对”的形式出现",[15,126746,126747],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[15,126749,126750],{},"④属性和属性值之间用英文“;”分开",[1466,126752],{"style":126401,"src":126753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1466,126755],{"style":126401,"src":126756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1466,126758],{"style":126401,"src":126759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[60,126761,126763],{"id":126762},"_62-css选择器","6.2 css选择器",[15,126765,126766],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[89,126768,126770],{"id":126769},"_621-标签选择器","6.2.1 标签选择器",[15,126772,126773],{},"①优点：能快速为页面中同类型的标签统一设置样式",[15,126775,126776],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1466,126778],{"style":126401,"src":126779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[89,126781,126783],{"id":126782},"_622-类选择器","6.2.2 类选择器",[15,126785,126786],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[15,126788,126789],{},"②样例",[1466,126791],{"style":126401,"src":126792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[15,126794,126795,126796,126798],{},"③ ",[278,126797,126633],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[15,126800,126801],{},"可以理解为给这个标签起了个名字，来表示；",[15,126803,126804],{},"长名称或词组可以使用横线来为选择器命名；",[15,126806,126807],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[15,126809,126810],{},"命名要有意义；",[1466,126812],{"style":126401,"src":126813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[15,126815,126816],{},"类选择器也可以指定特殊的元素p.center{}",[15,126818,126819],{},"p.center和.center都对",[109,126821,126823],{"className":126545,"code":126822,"language":126547,"meta":39,"style":39},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[115,126824,126825,126830,126839,126849],{"__ignoreMap":39},[118,126826,126827],{"class":120,"line":121},[118,126828,126829],{"class":187},"\u002F* 类选择器指定特殊元素 *\u002F\n",[118,126831,126832,126834,126837],{"class":120,"line":40},[118,126833,15],{"class":51293},[118,126835,126836],{"class":1967},".center",[118,126838,15577],{"class":128},[118,126840,126841,126843,126845,126847],{"class":120,"line":1183},[118,126842,70519],{"class":177},[118,126844,51430],{"class":128},[118,126846,51585],{"class":177},[118,126848,1294],{"class":128},[118,126850,126851],{"class":120,"line":1198},[118,126852,1569],{"class":128},[89,126854,126856],{"id":126855},"_623-多类名使用","6.2.3 多类名使用",[15,126858,126859],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1466,126861],{"style":126401,"src":126862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[15,126864,126865],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[89,126867,126869],{"id":126868},"_624-id选择器","6.2.4 id选择器",[15,126871,126872],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[15,126874,126875],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1466,126877],{"style":126401,"src":126878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[15,126880,126881],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[15,126883,126884],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[89,126886,126888],{"id":126887},"_625-通配符选择器","6.2.5 通配符选择器",[15,126890,126891],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[15,126893,126894],{},"* {",[15,126896,126897],{},"color=\"red\"}",[89,126899,126901],{"id":126900},"_626-总结","6.2.6 总结",[1466,126903],{"style":126401,"src":126904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[60,126906,126908],{"id":126907},"_63-css字体属性","6.3 css字体属性",[15,126910,126911],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[89,126913,126915],{"id":126914},"_631-字体系列","6.3.1 字体系列",[15,126917,126918],{},"font-family: '宋体';",[15,126920,126921,126923],{},[278,126922,158],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[89,126925,126927],{"id":126926},"_632-字体大小","6.3.2 字体大小",[15,126929,126930],{},"font-size: 20px",[15,126932,126933,26466],{},[278,126934,126633],{},[15,126936,126937],{},"①px（像素）大小是网页的最常用单位",[15,126939,126940],{},"②谷歌浏览器默认为16px",[15,126942,126943],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[15,126945,126946],{},"④可以给body指定整个页面的大小：会自动引用",[109,126948,126950],{"className":126545,"code":126949,"language":126547,"meta":39,"style":39},"body {\n  font-size: 16px;\n}\n",[115,126951,126952,126958,126970],{"__ignoreMap":39},[118,126953,126954,126956],{"class":120,"line":121},[118,126955,51793],{"class":51293},[118,126957,15577],{"class":128},[118,126959,126960,126962,126964,126966,126968],{"class":120,"line":40},[118,126961,70619],{"class":177},[118,126963,51430],{"class":128},[118,126965,729],{"class":177},[118,126967,51485],{"class":124},[118,126969,1294],{"class":128},[118,126971,126972],{"class":120,"line":1183},[118,126973,1569],{"class":128},[15,126975,126976],{},"⑤标题标签比较特殊，需要单独指定大小",[89,126978,126980],{"id":126979},"_633-字体粗细","6.3.3 字体粗细",[15,126982,126983],{},"font-weight: bold;",[15,126985,126986],{},"font-weight: 100；",[15,126988,126989,126991],{},[278,126990,158],{}," ①粗体文字变细：尽量别用normal，多用数字",[15,126993,126994],{},"font-weight= 400;",[15,126996,126997],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[89,126999,127001],{"id":127000},"_634-文字样式","6.3.4 文字样式",[15,127003,127004],{},"font-style: normal；",[15,127006,127007,26466],{},[278,127008,127009],{},"属性值",[15,127011,127012],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[15,127014,127015],{},"②italic：浏览器会显示斜体的字体样式",[1466,127017],{"style":126401,"src":127018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[89,127020,127022],{"id":127021},"_635-字体符合属性","6.3.5 字体符合属性",[1466,127024],{"style":126401,"src":127025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1466,127027],{"style":126401,"src":127028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[15,127030,127031],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[15,127033,127034,26466],{},[278,127035,126633],{},[15,127037,127038],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[15,127040,127041],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[15,127043,127044],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[60,127046,127048],{"id":127047},"_64-css-test文本属性","6.4 css test文本属性",[89,127050,127052],{"id":127051},"_641-文本颜色","6.4.1 文本颜色",[15,127054,127055],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[109,127057,127059],{"className":126545,"code":127058,"language":126547,"meta":39,"style":39},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[115,127060,127061,127066,127072,127082,127087,127092],{"__ignoreMap":39},[118,127062,127063],{"class":120,"line":121},[118,127064,127065],{"class":187},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[118,127067,127068,127070],{"class":120,"line":40},[118,127069,15],{"class":51293},[118,127071,15577],{"class":128},[118,127073,127074,127076,127078,127080],{"class":120,"line":1183},[118,127075,70898],{"class":177},[118,127077,51430],{"class":128},[118,127079,57414],{"class":177},[118,127081,1294],{"class":128},[118,127083,127084],{"class":120,"line":1198},[118,127085,127086],{"class":187},"  \u002F* color: #ff0000; *\u002F\n",[118,127088,127089],{"class":120,"line":1204},[118,127090,127091],{"class":187},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[118,127093,127094],{"class":120,"line":1218},[118,127095,1569],{"class":128},[1466,127097],{"style":126401,"src":127098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[89,127100,127102],{"id":127101},"_642-对齐文本","6.4.2 对齐文本",[15,127104,127105,127106,127109],{},"text-align属于用于设置元素内文本内容的 ",[278,127107,127108],{},"水平对齐"," 方式",[15,127111,127112],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[89,127114,127116],{"id":127115},"_643-装饰文本","6.4.3 装饰文本",[15,127118,127119],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[109,127121,127123],{"className":126545,"code":127122,"language":126547,"meta":39,"style":39},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[115,127124,127125,127131,127141,127145,127151,127162],{"__ignoreMap":39},[118,127126,127127,127129],{"class":120,"line":121},[118,127128,21],{"class":51293},[118,127130,15577],{"class":128},[118,127132,127133,127135,127137,127139],{"class":120,"line":40},[118,127134,70495],{"class":177},[118,127136,51430],{"class":128},[118,127138,54730],{"class":177},[118,127140,1294],{"class":128},[118,127142,127143],{"class":120,"line":1183},[118,127144,1569],{"class":128},[118,127146,127147,127149],{"class":120,"line":1198},[118,127148,15],{"class":51293},[118,127150,15577],{"class":128},[118,127152,127153,127155,127157,127160],{"class":120,"line":1204},[118,127154,70495],{"class":177},[118,127156,51430],{"class":128},[118,127158,127159],{"class":177},"underline",[118,127161,1294],{"class":128},[118,127163,127164],{"class":120,"line":1218},[118,127165,1569],{"class":128},[89,127167,127169],{"id":127168},"_644-文本缩进","6.4.4 文本缩进",[15,127171,127172],{},"实现文本的第一行首行缩进自己指定的距离",[15,127174,127175],{},"20px往右边走；-20px往左边走",[15,127177,127178],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[109,127180,127182],{"className":126545,"code":127181,"language":126547,"meta":39,"style":39},"p {\n  text-indent: 2em;\n}\n",[115,127183,127184,127190,127203],{"__ignoreMap":39},[118,127185,127186,127188],{"class":120,"line":121},[118,127187,15],{"class":51293},[118,127189,15577],{"class":128},[118,127191,127192,127195,127197,127199,127201],{"class":120,"line":40},[118,127193,127194],{"class":177},"  text-indent",[118,127196,51430],{"class":128},[118,127198,206],{"class":177},[118,127200,23558],{"class":124},[118,127202,1294],{"class":128},[118,127204,127205],{"class":120,"line":1183},[118,127206,1569],{"class":128},[89,127208,127210],{"id":127209},"_645-行间距","6.4.5 行间距",[15,127212,127213],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[109,127215,127217],{"className":126545,"code":127216,"language":126547,"meta":39,"style":39},"p {\n  line-height: 1.6;\n}\n",[115,127218,127219,127225,127237],{"__ignoreMap":39},[118,127220,127221,127223],{"class":120,"line":121},[118,127222,15],{"class":51293},[118,127224,15577],{"class":128},[118,127226,127227,127230,127232,127235],{"class":120,"line":40},[118,127228,127229],{"class":177},"  line-height",[118,127231,51430],{"class":128},[118,127233,127234],{"class":177},"1.6",[118,127236,1294],{"class":128},[118,127238,127239],{"class":120,"line":1183},[118,127240,1569],{"class":128},[5131,127242,127243],{},"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":39,"searchDepth":40,"depth":40,"links":127245},[127246,127247,127255,127262],{"id":126727,"depth":40,"text":126728},{"id":126762,"depth":40,"text":126763,"children":127248},[127249,127250,127251,127252,127253,127254],{"id":126769,"depth":1183,"text":126770},{"id":126782,"depth":1183,"text":126783},{"id":126855,"depth":1183,"text":126856},{"id":126868,"depth":1183,"text":126869},{"id":126887,"depth":1183,"text":126888},{"id":126900,"depth":1183,"text":126901},{"id":126907,"depth":40,"text":126908,"children":127256},[127257,127258,127259,127260,127261],{"id":126914,"depth":1183,"text":126915},{"id":126926,"depth":1183,"text":126927},{"id":126979,"depth":1183,"text":126980},{"id":127000,"depth":1183,"text":127001},{"id":127021,"depth":1183,"text":127022},{"id":127047,"depth":40,"text":127048,"children":127263},[127264,127265,127266,127267,127268],{"id":127051,"depth":1183,"text":127052},{"id":127101,"depth":1183,"text":127102},{"id":127115,"depth":1183,"text":127116},{"id":127168,"depth":1183,"text":127169},{"id":127209,"depth":1183,"text":127210},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126719,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127275,"title":127276,"body":127277,"description":42,"extension":43,"meta":127926,"navigation":45,"path":127927,"seo":127928,"stem":127929,"__hash__":127930},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127278,"toc":127907},[127279,127282,127286,127290,127350,127354,127364,127367,127370,127374,127399,127403,127406,127409,127412,127415,127418,127422,127425,127428,127470,127473,127499,127505,127508,127512,127516,127522,127525,127528,127531,127534,127537,127540,127585,127589,127592,127595,127599,127603,127632,127635,127640,127643,127646,127649,127652,127656,127660,127663,127665,127668,127672,127675,127679,127682,127685,127688,127692,127696,127702,127712,127715,127718,127721,127724,127727,127850,127858,127866,127904],[10,127280,127276],{"id":127281},"_7-css引入方式与选择器进阶",[60,127283,127285],{"id":127284},"_71-css引入方式","7.1 css引入方式",[89,127287,127289],{"id":127288},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[109,127291,127295],{"className":127292,"code":127293,"language":127294,"meta":39,"style":39},"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",[115,127296,127297,127305,127312,127324,127337,127342],{"__ignoreMap":39},[118,127298,127299,127301,127303],{"class":120,"line":121},[118,127300,1038],{"class":128},[118,127302,5131],{"class":51293},[118,127304,51300],{"class":128},[118,127306,127307,127310],{"class":120,"line":40},[118,127308,127309],{"class":51293},"  h1",[118,127311,15577],{"class":128},[118,127313,127314,127317,127319,127322],{"class":120,"line":1183},[118,127315,127316],{"class":177},"    color",[118,127318,51430],{"class":128},[118,127320,127321],{"class":177},"blue",[118,127323,1294],{"class":128},[118,127325,127326,127329,127331,127333,127335],{"class":120,"line":1198},[118,127327,127328],{"class":177},"    font-size",[118,127330,51430],{"class":128},[118,127332,928],{"class":177},[118,127334,51485],{"class":124},[118,127336,1294],{"class":128},[118,127338,127339],{"class":120,"line":1204},[118,127340,127341],{"class":128},"  }\n",[118,127343,127344,127346,127348],{"class":120,"line":1218},[118,127345,51778],{"class":128},[118,127347,5131],{"class":51293},[118,127349,51300],{"class":128},[15,127351,127352,26466],{},[278,127353,126633],{},[15,127355,77219,127356,127359,127360,127363],{},[115,127357,127358],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[115,127361,127362],{},"\u003Chead>","标签中",[15,127365,127366],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[15,127368,127369],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[89,127371,127373],{"id":127372},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[109,127375,127377],{"className":127292,"code":127376,"language":127294,"meta":39,"style":39},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[115,127378,127379],{"__ignoreMap":39},[118,127380,127381,127383,127385,127387,127389,127392,127395,127397],{"class":120,"line":121},[118,127382,1038],{"class":128},[118,127384,15],{"class":51293},[118,127386,62619],{"class":1967},[118,127388,174],{"class":128},[118,127390,127391],{"class":233},"\"color: red; font-size: 16px;\"",[118,127393,127394],{"class":128},">这是一个段落\u003C\u002F",[118,127396,15],{"class":51293},[118,127398,51300],{"class":128},[15,127400,127401,26466],{},[278,127402,126633],{},[15,127404,127405],{},"①style其实就是标签的属性",[15,127407,127408],{},"②在双引号中间，写法要符合css规范",[15,127410,127411],{},"③可以控制当前的标签设置样式",[15,127413,127414],{},"④书写繁琐，简单时才用",[15,127416,127417],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[89,127419,127421],{"id":127420},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[15,127423,127424],{},"使用最多，单独建一个css文件，然后html引用",[15,127426,127427],{},"①css文件部分： style.css",[109,127429,127431],{"className":126545,"code":127430,"language":126547,"meta":39,"style":39},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[115,127432,127433,127438,127444,127454,127466],{"__ignoreMap":39},[118,127434,127435],{"class":120,"line":121},[118,127436,127437],{"class":187},"\u002F* style.css *\u002F\n",[118,127439,127440,127442],{"class":120,"line":40},[118,127441,10],{"class":51293},[118,127443,15577],{"class":128},[118,127445,127446,127448,127450,127452],{"class":120,"line":1183},[118,127447,70898],{"class":177},[118,127449,51430],{"class":128},[118,127451,127321],{"class":177},[118,127453,1294],{"class":128},[118,127455,127456,127458,127460,127462,127464],{"class":120,"line":1198},[118,127457,70619],{"class":177},[118,127459,51430],{"class":128},[118,127461,928],{"class":177},[118,127463,51485],{"class":124},[118,127465,1294],{"class":128},[118,127467,127468],{"class":120,"line":1204},[118,127469,1569],{"class":128},[15,127471,127472],{},"②html部分",[109,127474,127476],{"className":127292,"code":127475,"language":127294,"meta":39,"style":39},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[115,127477,127478],{"__ignoreMap":39},[118,127479,127480,127482,127484,127486,127488,127490,127492,127494,127497],{"class":120,"line":121},[118,127481,1038],{"class":128},[118,127483,68998],{"class":51293},[118,127485,69001],{"class":1967},[118,127487,174],{"class":128},[118,127489,69006],{"class":233},[118,127491,61050],{"class":1967},[118,127493,174],{"class":128},[118,127495,127496],{"class":233},"\"style.css\"",[118,127498,51300],{"class":128},[15,127500,127501,127504],{},[115,127502,127503],{},"\u003Chr>","水平线标签（但是不常用！）",[15,127506,127507],{},"ctrl+0回到页面原来大小",[60,127509,127511],{"id":127510},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[89,127513,127515],{"id":127514},"_721-快速生成html","7.2.1 快速生成html",[15,127517,127518,127519],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[115,127520,127521],{},"\u003Cdiv>``\u003C\u002Fdiv>",[15,127523,127524],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[15,127526,127527],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[15,127529,127530],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[15,127532,127533],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[15,127535,127536],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[15,127538,127539],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[109,127541,127543],{"className":127292,"code":127542,"language":127294,"meta":39,"style":39},"\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",[115,127544,127545,127550,127555,127560,127565,127570,127575,127580],{"__ignoreMap":39},[118,127546,127547],{"class":120,"line":121},[118,127548,127549],{"class":187},"\u003C!-- Emmet 语法示例 -->\n",[118,127551,127552],{"class":120,"line":40},[118,127553,127554],{"class":187},"\u003C!-- div*3        → 生成3个div -->\n",[118,127556,127557],{"class":120,"line":1183},[118,127558,127559],{"class":187},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[118,127561,127562],{"class":120,"line":1198},[118,127563,127564],{"class":187},"\u003C!-- div+p        → 兄弟div和p -->\n",[118,127566,127567],{"class":120,"line":1204},[118,127568,127569],{"class":187},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[118,127571,127572],{"class":120,"line":1218},[118,127573,127574],{"class":187},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[118,127576,127577],{"class":120,"line":1224},[118,127578,127579],{"class":187},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[118,127581,127582],{"class":120,"line":1315},[118,127583,127584],{"class":187},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[89,127586,127588],{"id":127587},"_722-快速生成css","7.2.2 快速生成css",[15,127590,127591],{},"简写开头",[15,127593,127594],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[60,127596,127598],{"id":127597},"_73-css复合选择器","7.3 css复合选择器",[89,127600,127602],{"id":127601},"_731-后代选择器","7.3.1 后代选择器",[109,127604,127606],{"className":126545,"code":127605,"language":126547,"meta":39,"style":39},".parent .child {\n  color: blue;\n}\n",[115,127607,127608,127618,127628],{"__ignoreMap":39},[118,127609,127610,127613,127616],{"class":120,"line":121},[118,127611,127612],{"class":1967},".parent",[118,127614,127615],{"class":1967}," .child",[118,127617,15577],{"class":128},[118,127619,127620,127622,127624,127626],{"class":120,"line":40},[118,127621,70898],{"class":177},[118,127623,51430],{"class":128},[118,127625,127321],{"class":177},[118,127627,1294],{"class":128},[118,127629,127630],{"class":120,"line":1183},[118,127631,1569],{"class":128},[15,127633,127634],{},"元素1 元素2 {样式声明}",[15,127636,127637],{},[278,127638,127639],{},"注意点:",[15,127641,127642],{},"①元素1和元素2中间用空格隔开",[15,127644,127645],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[15,127647,127648],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[15,127650,127651],{},"④元素1和元素2可以是任意基础选择器",[89,127653,127655],{"id":127654},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[15,127657,127658],{},[278,127659,127639],{},[15,127661,127662],{},"①元素1和元素2中间用大于号隔开",[15,127664,127645],{},[15,127666,127667],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[89,127669,127671],{"id":127670},"_733-并集选择器","7.3.3 并集选择器",[15,127673,127674],{},"元素1，元素2 {样式声明}",[15,127676,127677],{},[278,127678,127639],{},[15,127680,127681],{},"①元素1和元素2中间用逗号隔开",[15,127683,127684],{},"②逗号可以理解为和的意思",[15,127686,127687],{},"③并集选择器通常用于集体声明",[89,127689,127691],{"id":127690},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[15,127693,127694],{},[278,127695,127639],{},[15,127697,127698,127699,127701],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68998,127700],{},"－:visited－:hover－:active。",[15,127703,127704,127705,127708,127709,25733],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127706,127707],"hover",{}," 、 ",[127710,127711],"first-child",{},[15,127713,127714],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[15,127716,127717],{},"link对没访问的进行设置",[15,127719,127720],{},"vistied对已访问的进行改变",[15,127722,127723],{},"hover鼠标经过就会变",[15,127725,127726],{},"active常按(点)就会变",[109,127728,127730],{"className":126545,"code":127729,"language":126547,"meta":39,"style":39},"\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",[115,127731,127732,127737,127746,127756,127766,127770,127779,127790,127794,127802,127812,127822,127826,127835,127846],{"__ignoreMap":39},[118,127733,127734],{"class":120,"line":121},[118,127735,127736],{"class":187},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[118,127738,127739,127741,127744],{"class":120,"line":40},[118,127740,21],{"class":51293},[118,127742,127743],{"class":1967},":link",[118,127745,15577],{"class":128},[118,127747,127748,127750,127752,127754],{"class":120,"line":1183},[118,127749,70898],{"class":177},[118,127751,51430],{"class":128},[118,127753,62362],{"class":177},[118,127755,1294],{"class":128},[118,127757,127758,127760,127762,127764],{"class":120,"line":1198},[118,127759,70495],{"class":177},[118,127761,51430],{"class":128},[118,127763,54730],{"class":177},[118,127765,1294],{"class":128},[118,127767,127768],{"class":120,"line":1204},[118,127769,1569],{"class":128},[118,127771,127772,127774,127777],{"class":120,"line":1218},[118,127773,21],{"class":51293},[118,127775,127776],{"class":1967},":visited",[118,127778,15577],{"class":128},[118,127780,127781,127783,127785,127788],{"class":120,"line":1224},[118,127782,70898],{"class":177},[118,127784,51430],{"class":128},[118,127786,127787],{"class":177},"purple",[118,127789,1294],{"class":128},[118,127791,127792],{"class":120,"line":1315},[118,127793,1569],{"class":128},[118,127795,127796,127798,127800],{"class":120,"line":1321},[118,127797,21],{"class":51293},[118,127799,60933],{"class":1967},[118,127801,15577],{"class":128},[118,127803,127804,127806,127808,127810],{"class":120,"line":1333},[118,127805,70898],{"class":177},[118,127807,51430],{"class":128},[118,127809,54882],{"class":177},[118,127811,1294],{"class":128},[118,127813,127814,127816,127818,127820],{"class":120,"line":1616},[118,127815,70495],{"class":177},[118,127817,51430],{"class":128},[118,127819,127159],{"class":177},[118,127821,1294],{"class":128},[118,127823,127824],{"class":120,"line":1621},[118,127825,1569],{"class":128},[118,127827,127828,127830,127833],{"class":120,"line":1627},[118,127829,21],{"class":51293},[118,127831,127832],{"class":1967},":active",[118,127834,15577],{"class":128},[118,127836,127837,127839,127841,127844],{"class":120,"line":1632},[118,127838,70898],{"class":177},[118,127840,51430],{"class":128},[118,127842,127843],{"class":177},"green",[118,127845,1294],{"class":128},[118,127847,127848],{"class":120,"line":1646},[118,127849,1569],{"class":128},[89,127851,127853,127854,127857],{"id":127852},"_735-伪类选择器","7.3.5 ",[127855,127856],"focus",{},"伪类选择器",[15,127859,127860,127862,127863,127865],{},[127855,127861],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[115,127864,126606],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[109,127867,127869],{"className":126545,"code":127868,"language":126547,"meta":39,"style":39},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[115,127870,127871,127879,127890,127900],{"__ignoreMap":39},[118,127872,127873,127875,127877],{"class":120,"line":121},[118,127874,53814],{"class":51293},[118,127876,61893],{"class":1967},[118,127878,15577],{"class":128},[118,127880,127881,127884,127886,127888],{"class":120,"line":40},[118,127882,127883],{"class":177},"  border-color",[118,127885,51430],{"class":128},[118,127887,54882],{"class":177},[118,127889,1294],{"class":128},[118,127891,127892,127894,127896,127898],{"class":120,"line":1183},[118,127893,70791],{"class":177},[118,127895,51430],{"class":128},[118,127897,54730],{"class":177},[118,127899,1294],{"class":128},[118,127901,127902],{"class":120,"line":1198},[118,127903,1569],{"class":128},[5131,127905,127906],{},"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":39,"searchDepth":40,"depth":40,"links":127908},[127909,127914,127918],{"id":127284,"depth":40,"text":127285,"children":127910},[127911,127912,127913],{"id":127288,"depth":1183,"text":127289},{"id":127372,"depth":1183,"text":127373},{"id":127420,"depth":1183,"text":127421},{"id":127510,"depth":40,"text":127511,"children":127915},[127916,127917],{"id":127514,"depth":1183,"text":127515},{"id":127587,"depth":1183,"text":127588},{"id":127597,"depth":40,"text":127598,"children":127919},[127920,127921,127922,127923,127924],{"id":127601,"depth":1183,"text":127602},{"id":127654,"depth":1183,"text":127655},{"id":127670,"depth":1183,"text":127671},{"id":127690,"depth":1183,"text":127691},{"id":127852,"depth":1183,"text":127925},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127276,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127932,"title":127933,"body":127934,"description":42,"extension":43,"meta":129857,"navigation":45,"path":129858,"seo":129859,"stem":129860,"__hash__":129861},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127935,"toc":129831},[127936,127939,127943,127952,127956,127982,127987,127990,127993,127996,127999,128003,128006,128016,128024,128028,128063,128068,128071,128074,128077,128080,128084,128087,128096,128100,128113,128118,128121,128124,128127,128131,128134,128138,128141,128196,128199,128230,128233,128287,128291,128294,128460,128583,128586,128589,128592,128595,128599,128602,128606,128609,128612,128616,128619,128650,128677,128705,128708,128712,128738,128781,128785,128879,128882,128909,128912,128915,128918,128921,128924,128927,128930,128933,128936,128940,128997,129024,129028,129076,129080,129121,129123,129126,129129,129132,129135,129139,129231,129234,129237,129240,129244,129367,129568,129572,129576,129579,129582,129585,129589,129592,129595,129620,129623,129626,129629,129632,129635,129639,129647,129709,129712,129770,129773,129776,129779,129782,129785,129788,129791,129828],[10,127937,127933],{"id":127938},"_8-css显示模式与背景特性",[60,127940,127942],{"id":127941},"_81-css元素显示模式","8.1 css元素显示模式",[15,127944,127945,127946,127948,127949,127951],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[115,127947,126156],{},"自己占一行，比如一行可以放多个",[115,127950,126159],{},"，HTML 元素一般分为块元素和行内元素两种类型",[89,127953,127955],{"id":127954},"_811-块元素","8.1.1 块元素",[15,127957,127958,127959,127961,127962,341,127965,341,127967,341,127969,341,127972,341,127975,127978,127979,127981],{},"常见的块元素有",[115,127960,126060],{},"~",[115,127963,127964],{},"\u003Ch6>",[115,127966,126086],{},[115,127968,126156],{},[115,127970,127971],{},"\u003Cul>",[115,127973,127974],{},"\u003Col>",[115,127976,127977],{},"\u003Cli>","等，其中 ",[115,127980,126156],{}," 标签是最典型的块元素",[15,127983,127984],{},[278,127985,127986],{},"块级元素的特点：",[15,127988,127989],{},"① 比较霸道，自己独占一行。",[15,127991,127992],{},"② 高度，宽度、外边距以及内边距都可以控制。",[15,127994,127995],{},"③ 宽度默认是容器（父级宽度）的100%。",[15,127997,127998],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[15,128000,128001],{},[278,128002,158],{},[15,128004,128005],{},"①文字类的元素内不能使用块级元素",[15,128007,77242,128008,128010,128011,128013,128014],{},[115,128009,126086],{}," 标签主要用于存放文字，因此 ",[115,128012,126086],{}," 里面不能放块级元素，特别是不能放",[115,128015,126156],{},[15,128017,128018,128019,127961,128021,128023],{},"⑥同理， ",[115,128020,126060],{},[115,128022,127964],{},"等都是文字类块级标签，里面也不能放其他块级元素",[89,128025,128027],{"id":128026},"_812-行内元素","8.1.2 行内元素",[15,128029,128030,128031,341,128033,341,128036,341,128039,341,128042,341,128045,341,128048,341,128051,341,128054,341,128057,128059,128060,128062],{},"常见的行内元素有 ",[115,128032,126318],{},[115,128034,128035],{},"\u003Cstrong>",[115,128037,128038],{},"\u003Cb>",[115,128040,128041],{},"\u003Cem>",[115,128043,128044],{},"\u003Ci>",[115,128046,128047],{},"\u003Cdel>",[115,128049,128050],{},"\u003Cs>",[115,128052,128053],{},"\u003Cins>",[115,128055,128056],{},"\u003Cu>",[115,128058,126159],{}," 等，其中 ",[115,128061,126159],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[15,128064,128065],{},[278,128066,128067],{},"特点：",[15,128069,128070],{},"① 相邻行内元素在一行上，一行可以显示多个。",[15,128072,128073],{},"② 高、宽直接设置是无效的。",[15,128075,128076],{},"③ 默认宽度就是它本身内容的宽度。",[15,128078,128079],{},"④ 行内元素只能容纳文本或其他行内元素。",[15,128081,128082],{},[278,128083,158],{},[15,128085,128086],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[15,128088,128089,128090,128092,128093,128095],{},"②特殊情况链接 ",[115,128091,126318],{}," 里面可以放块级元素，但是给 ",[115,128094,126318],{}," 转换一下块级模式最安全",[89,128097,128099],{"id":128098},"_813-行内块元素","8.1.3 行内块元素",[15,128101,128102,128103,341,128106,341,128109,128112],{},"在行内元素中有几个特殊的标签 —— ",[115,128104,128105],{},"\u003Cimg \u002F>",[115,128107,128108],{},"\u003Cinput \u002F>",[115,128110,128111],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[15,128114,128115],{},[278,128116,128117],{},"行内块元素的特点：",[15,128119,128120],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[15,128122,128123],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[15,128125,128126],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[89,128128,128130],{"id":128129},"_814-总结","8.1.4 总结",[1466,128132],{"style":126401,"src":128133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[89,128135,128137],{"id":128136},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[15,128139,128140],{},"①转换为块元素：display:block;",[109,128142,128144],{"className":126545,"code":128143,"language":126547,"meta":39,"style":39},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[115,128145,128146,128151,128157,128168,128180,128192],{"__ignoreMap":39},[118,128147,128148],{"class":120,"line":121},[118,128149,128150],{"class":187},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[118,128152,128153,128155],{"class":120,"line":40},[118,128154,21],{"class":51293},[118,128156,15577],{"class":128},[118,128158,128159,128162,128164,128166],{"class":120,"line":1183},[118,128160,128161],{"class":177},"  display",[118,128163,51430],{"class":128},[118,128165,60862],{"class":177},[118,128167,1294],{"class":128},[118,128169,128170,128172,128174,128176,128178],{"class":120,"line":1198},[118,128171,70561],{"class":177},[118,128173,51430],{"class":128},[118,128175,439],{"class":177},[118,128177,51485],{"class":124},[118,128179,1294],{"class":128},[118,128181,128182,128184,128186,128188,128190],{"class":120,"line":1204},[118,128183,70781],{"class":177},[118,128185,51430],{"class":128},[118,128187,529],{"class":177},[118,128189,51485],{"class":124},[118,128191,1294],{"class":128},[118,128193,128194],{"class":120,"line":1218},[118,128195,1569],{"class":128},[15,128197,128198],{},"②转换为行内元素：display:inline;",[109,128200,128202],{"className":126545,"code":128201,"language":126547,"meta":39,"style":39},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[115,128203,128204,128209,128215,128226],{"__ignoreMap":39},[118,128205,128206],{"class":120,"line":121},[118,128207,128208],{"class":187},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[118,128210,128211,128213],{"class":120,"line":40},[118,128212,51604],{"class":51293},[118,128214,15577],{"class":128},[118,128216,128217,128219,128221,128224],{"class":120,"line":1183},[118,128218,128161],{"class":177},[118,128220,51430],{"class":128},[118,128222,128223],{"class":177},"inline",[118,128225,1294],{"class":128},[118,128227,128228],{"class":120,"line":1198},[118,128229,1569],{"class":128},[15,128231,128232],{},"③转换为行内块：display:inline-block;",[109,128234,128236],{"className":126545,"code":128235,"language":126547,"meta":39,"style":39},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[115,128237,128238,128243,128249,128259,128271,128283],{"__ignoreMap":39},[118,128239,128240],{"class":120,"line":121},[118,128241,128242],{"class":187},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[118,128244,128245,128247],{"class":120,"line":40},[118,128246,118],{"class":51293},[118,128248,15577],{"class":128},[118,128250,128251,128253,128255,128257],{"class":120,"line":1183},[118,128252,128161],{"class":177},[118,128254,51430],{"class":128},[118,128256,72376],{"class":177},[118,128258,1294],{"class":128},[118,128260,128261,128263,128265,128267,128269],{"class":120,"line":1198},[118,128262,70561],{"class":177},[118,128264,51430],{"class":128},[118,128266,740],{"class":177},[118,128268,51485],{"class":124},[118,128270,1294],{"class":128},[118,128272,128273,128275,128277,128279,128281],{"class":120,"line":1204},[118,128274,70781],{"class":177},[118,128276,51430],{"class":128},[118,128278,1079],{"class":177},[118,128280,51485],{"class":124},[118,128282,1294],{"class":128},[118,128284,128285],{"class":120,"line":1218},[118,128286,1569],{"class":128},[89,128288,128290],{"id":128289},"_816-小米侧边栏","8.1.6 小米侧边栏",[1466,128292],{"style":126401,"src":128293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[109,128295,128297],{"className":127292,"code":128296,"language":127294,"meta":39,"style":39},"\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",[115,128298,128299,128304,128319,128338,128357,128376,128395,128414,128433,128452],{"__ignoreMap":39},[118,128300,128301],{"class":120,"line":121},[118,128302,128303],{"class":187},"\u003C!-- 小米侧边栏案例 -->\n",[118,128305,128306,128308,128310,128312,128314,128317],{"class":120,"line":40},[118,128307,1038],{"class":128},[118,128309,51604],{"class":51293},[118,128311,53479],{"class":1967},[118,128313,174],{"class":128},[118,128315,128316],{"class":233},"\"sidebar\"",[118,128318,51300],{"class":128},[118,128320,128321,128323,128325,128327,128329,128331,128334,128336],{"class":120,"line":1183},[118,128322,52137],{"class":128},[118,128324,21],{"class":51293},[118,128326,61050],{"class":1967},[118,128328,174],{"class":128},[118,128330,61055],{"class":233},[118,128332,128333],{"class":128},">手机 电话卡\u003C\u002F",[118,128335,21],{"class":51293},[118,128337,51300],{"class":128},[118,128339,128340,128342,128344,128346,128348,128350,128353,128355],{"class":120,"line":1198},[118,128341,52137],{"class":128},[118,128343,21],{"class":51293},[118,128345,61050],{"class":1967},[118,128347,174],{"class":128},[118,128349,61055],{"class":233},[118,128351,128352],{"class":128},">电视 盒子\u003C\u002F",[118,128354,21],{"class":51293},[118,128356,51300],{"class":128},[118,128358,128359,128361,128363,128365,128367,128369,128372,128374],{"class":120,"line":1204},[118,128360,52137],{"class":128},[118,128362,21],{"class":51293},[118,128364,61050],{"class":1967},[118,128366,174],{"class":128},[118,128368,61055],{"class":233},[118,128370,128371],{"class":128},">笔记本 平板\u003C\u002F",[118,128373,21],{"class":51293},[118,128375,51300],{"class":128},[118,128377,128378,128380,128382,128384,128386,128388,128391,128393],{"class":120,"line":1218},[118,128379,52137],{"class":128},[118,128381,21],{"class":51293},[118,128383,61050],{"class":1967},[118,128385,174],{"class":128},[118,128387,61055],{"class":233},[118,128389,128390],{"class":128},">出行 穿戴\u003C\u002F",[118,128392,21],{"class":51293},[118,128394,51300],{"class":128},[118,128396,128397,128399,128401,128403,128405,128407,128410,128412],{"class":120,"line":1224},[118,128398,52137],{"class":128},[118,128400,21],{"class":51293},[118,128402,61050],{"class":1967},[118,128404,174],{"class":128},[118,128406,61055],{"class":233},[118,128408,128409],{"class":128},">智能 路由器\u003C\u002F",[118,128411,21],{"class":51293},[118,128413,51300],{"class":128},[118,128415,128416,128418,128420,128422,128424,128426,128429,128431],{"class":120,"line":1315},[118,128417,52137],{"class":128},[118,128419,21],{"class":51293},[118,128421,61050],{"class":1967},[118,128423,174],{"class":128},[118,128425,61055],{"class":233},[118,128427,128428],{"class":128},">健康 儿童\u003C\u002F",[118,128430,21],{"class":51293},[118,128432,51300],{"class":128},[118,128434,128435,128437,128439,128441,128443,128445,128448,128450],{"class":120,"line":1321},[118,128436,52137],{"class":128},[118,128438,21],{"class":51293},[118,128440,61050],{"class":1967},[118,128442,174],{"class":128},[118,128444,61055],{"class":233},[118,128446,128447],{"class":128},">耳机 音响\u003C\u002F",[118,128449,21],{"class":51293},[118,128451,51300],{"class":128},[118,128453,128454,128456,128458],{"class":120,"line":1333},[118,128455,51778],{"class":128},[118,128457,51604],{"class":51293},[118,128459,51300],{"class":128},[109,128461,128463],{"className":126545,"code":128462,"language":126547,"meta":39,"style":39},".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",[115,128464,128465,128474,128484,128497,128509,128521,128533,128543,128554,128558,128568,128579],{"__ignoreMap":39},[118,128466,128467,128470,128472],{"class":120,"line":121},[118,128468,128469],{"class":1967},".sidebar",[118,128471,1402],{"class":51293},[118,128473,15577],{"class":128},[118,128475,128476,128478,128480,128482],{"class":120,"line":40},[118,128477,128161],{"class":177},[118,128479,51430],{"class":128},[118,128481,60862],{"class":177},[118,128483,1294],{"class":128},[118,128485,128486,128488,128490,128493,128495],{"class":120,"line":1183},[118,128487,70561],{"class":177},[118,128489,51430],{"class":128},[118,128491,128492],{"class":177},"234",[118,128494,51485],{"class":124},[118,128496,1294],{"class":128},[118,128498,128499,128501,128503,128505,128507],{"class":120,"line":1198},[118,128500,70781],{"class":177},[118,128502,51430],{"class":128},[118,128504,580],{"class":177},[118,128506,51485],{"class":124},[118,128508,1294],{"class":128},[118,128510,128511,128513,128515,128517,128519],{"class":120,"line":1204},[118,128512,127229],{"class":177},[118,128514,51430],{"class":128},[118,128516,580],{"class":177},[118,128518,51485],{"class":124},[118,128520,1294],{"class":128},[118,128522,128523,128525,128527,128529,128531],{"class":120,"line":1218},[118,128524,70816],{"class":177},[118,128526,51430],{"class":128},[118,128528,1079],{"class":177},[118,128530,51485],{"class":124},[118,128532,1294],{"class":128},[118,128534,128535,128537,128539,128541],{"class":120,"line":1224},[118,128536,70898],{"class":177},[118,128538,51430],{"class":128},[118,128540,60835],{"class":177},[118,128542,1294],{"class":128},[118,128544,128545,128547,128549,128552],{"class":120,"line":1315},[118,128546,70871],{"class":177},[118,128548,51430],{"class":128},[118,128550,128551],{"class":177},"#55585a",[118,128553,1294],{"class":128},[118,128555,128556],{"class":120,"line":1321},[118,128557,1569],{"class":128},[118,128559,128560,128562,128564,128566],{"class":120,"line":1333},[118,128561,128469],{"class":1967},[118,128563,1402],{"class":51293},[118,128565,60933],{"class":1967},[118,128567,15577],{"class":128},[118,128569,128570,128572,128574,128577],{"class":120,"line":1616},[118,128571,70871],{"class":177},[118,128573,51430],{"class":128},[118,128575,128576],{"class":177},"#ff6700",[118,128578,1294],{"class":128},[118,128580,128581],{"class":120,"line":1621},[118,128582,1569],{"class":128},[1466,128584],{"style":126401,"src":128585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[15,128587,128588],{},"行高=盒子高度：实现文字的垂直居中",[15,128590,128591],{},"原理讲解：",[1466,128593],{"style":126401,"src":128594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[60,128596,128598],{"id":128597},"_82-css背景","8.2 css背景",[15,128600,128601],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[89,128603,128605],{"id":128604},"_821-背景颜色","8.2.1 背景颜色",[15,128607,128608],{},"background-color:颜色值;",[15,128610,128611],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[89,128613,128615],{"id":128614},"_822-背景图片","8.2.2 背景图片",[15,128617,128618],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[109,128620,128622],{"className":126545,"code":128621,"language":126547,"meta":39,"style":39},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[115,128623,128624,128630,128646],{"__ignoreMap":39},[118,128625,128626,128628],{"class":120,"line":121},[118,128627,51604],{"class":51293},[118,128629,15577],{"class":128},[118,128631,128632,128635,128637,128639,128641,128644],{"class":120,"line":40},[118,128633,128634],{"class":177},"  background-image",[118,128636,51430],{"class":128},[118,128638,61719],{"class":177},[118,128640,129],{"class":128},[118,128642,128643],{"class":5221},"images\u002Fbg.png",[118,128645,2723],{"class":128},[118,128647,128648],{"class":120,"line":1183},[118,128649,1569],{"class":128},[266,128651,128652,128661],{},[269,128653,128654],{},[272,128655,128656,128659],{},[275,128657,128658],{"align":23741},"参数值",[275,128660,102689],{"align":23741},[313,128662,128663,128670],{},[272,128664,128665,128667],{},[318,128666,54730],{"align":23741},[318,128668,128669],{"align":23741},"无背景图（默认的）",[272,128671,128672,128674],{},[318,128673,61719],{"align":23741},[318,128675,128676],{"align":23741},"使用绝对或相对地址指定背景图像",[109,128678,128679],{"className":126545,"code":128621,"language":126547,"meta":39,"style":39},[115,128680,128681,128687,128701],{"__ignoreMap":39},[118,128682,128683,128685],{"class":120,"line":121},[118,128684,51604],{"class":51293},[118,128686,15577],{"class":128},[118,128688,128689,128691,128693,128695,128697,128699],{"class":120,"line":40},[118,128690,128634],{"class":177},[118,128692,51430],{"class":128},[118,128694,61719],{"class":177},[118,128696,129],{"class":128},[118,128698,128643],{"class":5221},[118,128700,2723],{"class":128},[118,128702,128703],{"class":120,"line":1183},[118,128704,1569],{"class":128},[15,128706,128707],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[89,128709,128711],{"id":128710},"_823-背景平铺","8.2.3 背景平铺",[109,128713,128715],{"className":126545,"code":128714,"language":126547,"meta":39,"style":39},"div {\n  background-repeat: no-repeat;\n}\n",[115,128716,128717,128723,128734],{"__ignoreMap":39},[118,128718,128719,128721],{"class":120,"line":121},[118,128720,51604],{"class":51293},[118,128722,15577],{"class":128},[118,128724,128725,128728,128730,128732],{"class":120,"line":40},[118,128726,128727],{"class":177},"  background-repeat",[118,128729,51430],{"class":128},[118,128731,61729],{"class":177},[118,128733,1294],{"class":128},[118,128735,128736],{"class":120,"line":1183},[118,128737,1569],{"class":128},[266,128739,128740,128748],{},[269,128741,128742],{},[272,128743,128744,128746],{},[275,128745,128658],{"align":23741},[275,128747,102689],{"align":23741},[313,128749,128750,128758,128765,128773],{},[272,128751,128752,128755],{},[318,128753,128754],{"align":23741},"repeat",[318,128756,128757],{"align":23741},"背景图像在纵向和横向上平铺（默认的）",[272,128759,128760,128762],{},[318,128761,61729],{"align":23741},[318,128763,128764],{"align":23741},"背景图像不平铺",[272,128766,128767,128770],{},[318,128768,128769],{"align":23741},"repeat-x",[318,128771,128772],{"align":23741},"背景图像在横向上平铺",[272,128774,128775,128778],{},[318,128776,128777],{"align":23741},"repeat-y",[318,128779,128780],{"align":23741},"背景图像在纵向平铺",[89,128782,128784],{"id":128783},"_824-背景图片位置","8.2.4 背景图片位置",[109,128786,128788],{"className":126545,"code":128787,"language":126547,"meta":39,"style":39},"\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",[115,128789,128790,128795,128801,128815,128819,128824,128830,128846,128850,128855,128861,128875],{"__ignoreMap":39},[118,128791,128792],{"class":120,"line":121},[118,128793,128794],{"class":187},"\u002F* 方位名词 *\u002F\n",[118,128796,128797,128799],{"class":120,"line":40},[118,128798,51604],{"class":51293},[118,128800,15577],{"class":128},[118,128802,128803,128806,128808,128810,128813],{"class":120,"line":1183},[118,128804,128805],{"class":177},"  background-position",[118,128807,51430],{"class":128},[118,128809,51585],{"class":177},[118,128811,128812],{"class":177}," top",[118,128814,1294],{"class":128},[118,128816,128817],{"class":120,"line":1198},[118,128818,1569],{"class":128},[118,128820,128821],{"class":120,"line":1204},[118,128822,128823],{"class":187},"\u002F* 精确单位 *\u002F\n",[118,128825,128826,128828],{"class":120,"line":1218},[118,128827,51604],{"class":51293},[118,128829,15577],{"class":128},[118,128831,128832,128834,128836,128838,128840,128842,128844],{"class":120,"line":1224},[118,128833,128805],{"class":177},[118,128835,51430],{"class":128},[118,128837,828],{"class":177},[118,128839,51485],{"class":124},[118,128841,57497],{"class":177},[118,128843,51485],{"class":124},[118,128845,1294],{"class":128},[118,128847,128848],{"class":120,"line":1315},[118,128849,1569],{"class":128},[118,128851,128852],{"class":120,"line":1321},[118,128853,128854],{"class":187},"\u002F* 混合单位 *\u002F\n",[118,128856,128857,128859],{"class":120,"line":1333},[118,128858,51604],{"class":51293},[118,128860,15577],{"class":128},[118,128862,128863,128865,128867,128869,128871,128873],{"class":120,"line":1616},[118,128864,128805],{"class":177},[118,128866,51430],{"class":128},[118,128868,828],{"class":177},[118,128870,51485],{"class":124},[118,128872,17149],{"class":177},[118,128874,1294],{"class":128},[118,128876,128877],{"class":120,"line":1621},[118,128878,1569],{"class":128},[15,128880,128881],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[266,128883,128884,128892],{},[269,128885,128886],{},[272,128887,128888,128890],{},[275,128889,128658],{"align":23741},[275,128891,25862],{"align":23741},[313,128893,128894,128901],{},[272,128895,128896,128898],{},[318,128897,51961],{"align":23741},[318,128899,128900],{"align":23741},"百分数|由浮点数和单位标识符组成的长度值",[272,128902,128903,128906],{},[318,128904,128905],{"align":23741},"position",[318,128907,128908],{"align":23741},"top|center|bottom|left|center|right 方位名词",[15,128910,128911],{},"其他说明：",[15,128913,128914],{},"①参数是方位名词",[15,128916,128917],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[15,128919,128920],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[15,128922,128923],{},"②参数是精确单位",[15,128925,128926],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[15,128928,128929],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[15,128931,128932],{},"③参数是混合单位",[15,128934,128935],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[89,128937,128939],{"id":128938},"_825-背景图片固定","8.2.5 背景图片固定",[109,128941,128943],{"className":126545,"code":128942,"language":126547,"meta":39,"style":39},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[115,128944,128945,128950,128956,128968,128972,128977,128983,128993],{"__ignoreMap":39},[118,128946,128947],{"class":120,"line":121},[118,128948,128949],{"class":187},"\u002F* 背景滚动（默认） *\u002F\n",[118,128951,128952,128954],{"class":120,"line":40},[118,128953,51604],{"class":51293},[118,128955,15577],{"class":128},[118,128957,128958,128961,128963,128966],{"class":120,"line":1183},[118,128959,128960],{"class":177},"  background-attachment",[118,128962,51430],{"class":128},[118,128964,128965],{"class":177},"scroll",[118,128967,1294],{"class":128},[118,128969,128970],{"class":120,"line":1198},[118,128971,1569],{"class":128},[118,128973,128974],{"class":120,"line":1204},[118,128975,128976],{"class":187},"\u002F* 背景固定 *\u002F\n",[118,128978,128979,128981],{"class":120,"line":1218},[118,128980,51604],{"class":51293},[118,128982,15577],{"class":128},[118,128984,128985,128987,128989,128991],{"class":120,"line":1224},[118,128986,128960],{"class":177},[118,128988,51430],{"class":128},[118,128990,86226],{"class":177},[118,128992,1294],{"class":128},[118,128994,128995],{"class":120,"line":1315},[118,128996,1569],{"class":128},[266,128998,128999,129008],{},[269,129000,129001],{},[272,129002,129003,129006],{},[275,129004,129005],{"align":23741},"参数",[275,129007,102689],{"align":23741},[313,129009,129010,129017],{},[272,129011,129012,129014],{},[318,129013,128965],{"align":23741},[318,129015,129016],{"align":23741},"背景图像是随对象内容滚动",[272,129018,129019,129021],{},[318,129020,86226],{"align":23741},[318,129022,129023],{"align":23741},"背景图像固定",[89,129025,129027],{"id":129026},"_826-背景样式合写","8.2.6 背景样式合写",[109,129029,129031],{"className":126545,"code":129030,"language":126547,"meta":39,"style":39},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[115,129032,129033,129038,129044,129072],{"__ignoreMap":39},[118,129034,129035],{"class":120,"line":121},[118,129036,129037],{"class":187},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[118,129039,129040,129042],{"class":120,"line":40},[118,129041,51604],{"class":51293},[118,129043,15577],{"class":128},[118,129045,129046,129048,129050,129052,129055,129057,129059,129061,129063,129066,129068,129070],{"class":120,"line":1183},[118,129047,70604],{"class":177},[118,129049,51430],{"class":128},[118,129051,60835],{"class":177},[118,129053,129054],{"class":177}," url",[118,129056,129],{"class":128},[118,129058,128643],{"class":5221},[118,129060,13719],{"class":128},[118,129062,61729],{"class":177},[118,129064,129065],{"class":177}," fixed",[118,129067,17149],{"class":177},[118,129069,128812],{"class":177},[118,129071,1294],{"class":128},[118,129073,129074],{"class":120,"line":1198},[118,129075,1569],{"class":128},[89,129077,129079],{"id":129078},"_827-背景色半透明","8.2.7 背景色半透明",[109,129081,129083],{"className":126545,"code":129082,"language":126547,"meta":39,"style":39},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[115,129084,129085,129091,129117],{"__ignoreMap":39},[118,129086,129087,129089],{"class":120,"line":121},[118,129088,51604],{"class":51293},[118,129090,15577],{"class":128},[118,129092,129093,129095,129097,129099,129101,129103,129105,129107,129109,129111,129113,129115],{"class":120,"line":40},[118,129094,70604],{"class":177},[118,129096,51430],{"class":128},[118,129098,55103],{"class":177},[118,129100,129],{"class":128},[118,129102,320],{"class":177},[118,129104,12440],{"class":128},[118,129106,320],{"class":177},[118,129108,12440],{"class":128},[118,129110,320],{"class":177},[118,129112,12440],{"class":128},[118,129114,100514],{"class":177},[118,129116,2723],{"class":128},[118,129118,129119],{"class":120,"line":1183},[118,129120,1569],{"class":128},[15,129122,99389],{},[15,129124,129125],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[15,129127,129128],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[15,129130,129131],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[15,129133,129134],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[89,129136,129138],{"id":129137},"_828-总结","8.2.8 总结",[266,129140,129141,129152],{},[269,129142,129143],{},[272,129144,129145,129148,129150],{},[275,129146,129147],{"align":23741},"属性",[275,129149,102689],{"align":23741},[275,129151,281],{"align":23741},[313,129153,129154,129165,129176,129187,129198,129209,129220],{},[272,129155,129156,129159,129162],{},[318,129157,129158],{"align":23741},"background-color",[318,129160,129161],{"align":23741},"背景颜色",[318,129163,129164],{"align":23741},"预定义的颜色值\u002F十六进制\u002FRGB代码",[272,129166,129167,129170,129173],{},[318,129168,129169],{"align":23741},"background-image",[318,129171,129172],{"align":23741},"背景图片",[318,129174,129175],{"align":23741},"url(图片路径)",[272,129177,129178,129181,129184],{},[318,129179,129180],{"align":23741},"background-repeat",[318,129182,129183],{"align":23741},"是否平铺",[318,129185,129186],{"align":23741},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[272,129188,129189,129192,129195],{},[318,129190,129191],{"align":23741},"background-position",[318,129193,129194],{"align":23741},"背景位置",[318,129196,129197],{"align":23741},"length\u002Fposition 分别是x和y坐标",[272,129199,129200,129203,129206],{},[318,129201,129202],{"align":23741},"background-attachment",[318,129204,129205],{"align":23741},"背景附着",[318,129207,129208],{"align":23741},"scroll(背景滚动) \u002Ffixed (背景固定)",[272,129210,129211,129214,129217],{},[318,129212,129213],{"align":23741},"背景简写",[318,129215,129216],{"align":23741},"书写更简单",[318,129218,129219],{"align":23741},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[272,129221,129222,129225,129228],{},[318,129223,129224],{"align":23741},"背景半透明",[318,129226,129227],{"align":23741},"背景颜色半透明",[318,129229,129230],{"align":23741},"background: rgba(0,0,0.3); 后面必须是4个值",[15,129232,129233],{},"颜色渐变：",[1466,129235],{"style":126401,"src":129236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1466,129238],{"style":126401,"src":129239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[89,129241,129243],{"id":129242},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[109,129245,129247],{"className":127292,"code":129246,"language":127294,"meta":39,"style":39},"\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",[115,129248,129249,129264,129283,129302,129321,129340,129359],{"__ignoreMap":39},[118,129250,129251,129253,129255,129257,129259,129262],{"class":120,"line":121},[118,129252,1038],{"class":128},[118,129254,51604],{"class":51293},[118,129256,53479],{"class":1967},[118,129258,174],{"class":128},[118,129260,129261],{"class":233},"\"nav\"",[118,129263,51300],{"class":128},[118,129265,129266,129268,129270,129272,129274,129276,129279,129281],{"class":120,"line":40},[118,129267,52137],{"class":128},[118,129269,21],{"class":51293},[118,129271,61050],{"class":1967},[118,129273,174],{"class":128},[118,129275,61055],{"class":233},[118,129277,129278],{"class":128},">五彩导航1\u003C\u002F",[118,129280,21],{"class":51293},[118,129282,51300],{"class":128},[118,129284,129285,129287,129289,129291,129293,129295,129298,129300],{"class":120,"line":1183},[118,129286,52137],{"class":128},[118,129288,21],{"class":51293},[118,129290,61050],{"class":1967},[118,129292,174],{"class":128},[118,129294,61055],{"class":233},[118,129296,129297],{"class":128},">五彩导航2\u003C\u002F",[118,129299,21],{"class":51293},[118,129301,51300],{"class":128},[118,129303,129304,129306,129308,129310,129312,129314,129317,129319],{"class":120,"line":1198},[118,129305,52137],{"class":128},[118,129307,21],{"class":51293},[118,129309,61050],{"class":1967},[118,129311,174],{"class":128},[118,129313,61055],{"class":233},[118,129315,129316],{"class":128},">五彩导航3\u003C\u002F",[118,129318,21],{"class":51293},[118,129320,51300],{"class":128},[118,129322,129323,129325,129327,129329,129331,129333,129336,129338],{"class":120,"line":1204},[118,129324,52137],{"class":128},[118,129326,21],{"class":51293},[118,129328,61050],{"class":1967},[118,129330,174],{"class":128},[118,129332,61055],{"class":233},[118,129334,129335],{"class":128},">五彩导航4\u003C\u002F",[118,129337,21],{"class":51293},[118,129339,51300],{"class":128},[118,129341,129342,129344,129346,129348,129350,129352,129355,129357],{"class":120,"line":1218},[118,129343,52137],{"class":128},[118,129345,21],{"class":51293},[118,129347,61050],{"class":1967},[118,129349,174],{"class":128},[118,129351,61055],{"class":233},[118,129353,129354],{"class":128},">五彩导航5\u003C\u002F",[118,129356,21],{"class":51293},[118,129358,51300],{"class":128},[118,129360,129361,129363,129365],{"class":120,"line":1224},[118,129362,51778],{"class":128},[118,129364,51604],{"class":51293},[118,129366,51300],{"class":128},[109,129368,129370],{"className":126545,"code":129369,"language":126547,"meta":39,"style":39},".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",[115,129371,129372,129381,129391,129403,129415,129425,129437,129447,129451,129476,129499,129522,129545],{"__ignoreMap":39},[118,129373,129374,129377,129379],{"class":120,"line":121},[118,129375,129376],{"class":1967},".nav",[118,129378,1402],{"class":51293},[118,129380,15577],{"class":128},[118,129382,129383,129385,129387,129389],{"class":120,"line":40},[118,129384,128161],{"class":177},[118,129386,51430],{"class":128},[118,129388,72376],{"class":177},[118,129390,1294],{"class":128},[118,129392,129393,129395,129397,129399,129401],{"class":120,"line":1183},[118,129394,70561],{"class":177},[118,129396,51430],{"class":128},[118,129398,945],{"class":177},[118,129400,51485],{"class":124},[118,129402,1294],{"class":128},[118,129404,129405,129407,129409,129411,129413],{"class":120,"line":1198},[118,129406,70781],{"class":177},[118,129408,51430],{"class":128},[118,129410,984],{"class":177},[118,129412,51485],{"class":124},[118,129414,1294],{"class":128},[118,129416,129417,129419,129421,129423],{"class":120,"line":1204},[118,129418,70519],{"class":177},[118,129420,51430],{"class":128},[118,129422,51585],{"class":177},[118,129424,1294],{"class":128},[118,129426,129427,129429,129431,129433,129435],{"class":120,"line":1218},[118,129428,127229],{"class":177},[118,129430,51430],{"class":128},[118,129432,984],{"class":177},[118,129434,51485],{"class":124},[118,129436,1294],{"class":128},[118,129438,129439,129441,129443,129445],{"class":120,"line":1224},[118,129440,70898],{"class":177},[118,129442,51430],{"class":128},[118,129444,60835],{"class":177},[118,129446,1294],{"class":128},[118,129448,129449],{"class":120,"line":1315},[118,129450,1569],{"class":128},[118,129452,129453,129455,129457,129460,129462,129464,129467,129469,129471,129473],{"class":120,"line":1321},[118,129454,129376],{"class":1967},[118,129456,1402],{"class":51293},[118,129458,129459],{"class":1967},":nth-child",[118,129461,129],{"class":128},[118,129463,346],{"class":177},[118,129465,129466],{"class":128},") { ",[118,129468,129158],{"class":177},[118,129470,51430],{"class":128},[118,129472,128576],{"class":177},[118,129474,129475],{"class":128},"; }\n",[118,129477,129478,129480,129482,129484,129486,129488,129490,129492,129494,129497],{"class":120,"line":1333},[118,129479,129376],{"class":1967},[118,129481,1402],{"class":51293},[118,129483,129459],{"class":1967},[118,129485,129],{"class":128},[118,129487,206],{"class":177},[118,129489,129466],{"class":128},[118,129491,129158],{"class":177},[118,129493,51430],{"class":128},[118,129495,129496],{"class":177},"#ff0000",[118,129498,129475],{"class":128},[118,129500,129501,129503,129505,129507,129509,129511,129513,129515,129517,129520],{"class":120,"line":1616},[118,129502,129376],{"class":1967},[118,129504,1402],{"class":51293},[118,129506,129459],{"class":1967},[118,129508,129],{"class":128},[118,129510,200],{"class":177},[118,129512,129466],{"class":128},[118,129514,129158],{"class":177},[118,129516,51430],{"class":128},[118,129518,129519],{"class":177},"#00a4ff",[118,129521,129475],{"class":128},[118,129523,129524,129526,129528,129530,129532,129534,129536,129538,129540,129543],{"class":120,"line":1621},[118,129525,129376],{"class":1967},[118,129527,1402],{"class":51293},[118,129529,129459],{"class":1967},[118,129531,129],{"class":128},[118,129533,421],{"class":177},[118,129535,129466],{"class":128},[118,129537,129158],{"class":177},[118,129539,51430],{"class":128},[118,129541,129542],{"class":177},"#ff00ff",[118,129544,129475],{"class":128},[118,129546,129547,129549,129551,129553,129555,129557,129559,129561,129563,129566],{"class":120,"line":1627},[118,129548,129376],{"class":1967},[118,129550,1402],{"class":51293},[118,129552,129459],{"class":1967},[118,129554,129],{"class":128},[118,129556,447],{"class":177},[118,129558,129466],{"class":128},[118,129560,129158],{"class":177},[118,129562,51430],{"class":128},[118,129564,129565],{"class":177},"#00ff00",[118,129567,129475],{"class":128},[60,129569,129571],{"id":129570},"_83-css三大特性","8.3 css三大特性",[89,129573,129575],{"id":129574},"_831-层叠性","8.3.1 层叠性",[15,129577,129578],{},"为了解决样式冲突问题",[15,129580,129581],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[15,129583,129584],{},"   ②样式不冲突，不会层叠",[89,129586,129588],{"id":129587},"_832-继承性","8.3.2 继承性",[15,129590,129591],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[15,129593,129594],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[109,129596,129598],{"className":126545,"code":129597,"language":126547,"meta":39,"style":39},"p {\n  color: #333;\n}\n",[115,129599,129600,129606,129616],{"__ignoreMap":39},[118,129601,129602,129604],{"class":120,"line":121},[118,129603,15],{"class":51293},[118,129605,15577],{"class":128},[118,129607,129608,129610,129612,129614],{"class":120,"line":40},[118,129609,70898],{"class":177},[118,129611,51430],{"class":128},[118,129613,62362],{"class":177},[118,129615,1294],{"class":128},[118,129617,129618],{"class":120,"line":1183},[118,129619,1569],{"class":128},[1466,129621],{"style":126401,"src":129622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[15,129624,129625],{},"解释：①行高可以跟单位也可以不跟单位",[15,129627,129628],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[15,129630,129631],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[15,129633,129634],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[89,129636,129638],{"id":129637},"_833-优先级","8.3.3 优先级",[72,129640,129641,129644],{},[75,129642,129643],{},"选择器相同，则执行层叠性",[75,129645,129646],{},"选择器不同，则根据选择器权重执行",[266,129648,129649,129659],{},[269,129650,129651],{},[272,129652,129653,129656],{},[275,129654,129655],{"align":23741},"选择器",[275,129657,129658],{"align":23741},"选择器权重",[313,129660,129661,129669,129677,129685,129693,129701],{},[272,129662,129663,129666],{},[318,129664,129665],{"align":23741},"继承 或者*",[318,129667,129668],{"align":23741},"0，0，0，0",[272,129670,129671,129674],{},[318,129672,129673],{"align":23741},"标签选择器",[318,129675,129676],{"align":23741},"0，0，0，1",[272,129678,129679,129682],{},[318,129680,129681],{"align":23741},"类选择器，伪类选择器",[318,129683,129684],{"align":23741},"0，0，1，0",[272,129686,129687,129690],{},[318,129688,129689],{"align":23741},"ID选择器",[318,129691,129692],{"align":23741},"0，1，0，0",[272,129694,129695,129698],{},[318,129696,129697],{"align":23741},"行内样式",[318,129699,129700],{"align":23741},"1，0，0，0",[272,129702,129703,129706],{},[318,129704,129705],{"align":23741},"！important",[318,129707,129708],{"align":23741},"无穷大",[15,129710,129711],{},"! important用法：",[109,129713,129715],{"className":126545,"code":129714,"language":126547,"meta":39,"style":39},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[115,129716,129717,129722,129728,129741,129745,129750,129756,129766],{"__ignoreMap":39},[118,129718,129719],{"class":120,"line":121},[118,129720,129721],{"class":187},"\u002F* !important 拥有最高优先级 *\u002F\n",[118,129723,129724,129726],{"class":120,"line":40},[118,129725,51604],{"class":51293},[118,129727,15577],{"class":128},[118,129729,129730,129732,129734,129736,129739],{"class":120,"line":1183},[118,129731,70898],{"class":177},[118,129733,51430],{"class":128},[118,129735,51638],{"class":177},[118,129737,129738],{"class":124}," !important",[118,129740,1294],{"class":128},[118,129742,129743],{"class":120,"line":1198},[118,129744,1569],{"class":128},[118,129746,129747],{"class":120,"line":1204},[118,129748,129749],{"class":187},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[118,129751,129752,129754],{"class":120,"line":1218},[118,129753,51604],{"class":51293},[118,129755,15577],{"class":128},[118,129757,129758,129760,129762,129764],{"class":120,"line":1224},[118,129759,70898],{"class":177},[118,129761,51430],{"class":128},[118,129763,57414],{"class":177},[118,129765,1294],{"class":128},[118,129767,129768],{"class":120,"line":1315},[118,129769,1569],{"class":128},[15,129771,129772],{},"优先级注意点：",[15,129774,129775],{},"①权重是有4组数字组成,但是不会有进位",[15,129777,129778],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[15,129780,129781],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[15,129783,129784],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[15,129786,129787],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[15,129789,129790],{},"⑥复合选择器",[266,129792,129793,129803],{},[269,129794,129795],{},[272,129796,129797,129800],{},[275,129798,129799],{"align":23741},"div ul li",[275,129801,129802],{"align":23741},"0,0,0,3",[313,129804,129805,129813,129821],{},[272,129806,129807,129810],{},[318,129808,129809],{"align":23741},".nav ul li",[318,129811,129812],{"align":23741},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[272,129814,129815,129818],{},[318,129816,129817],{"align":23741},"a:hover",[318,129819,129820],{"align":23741},"0,0,1,1",[272,129822,129823,129826],{},[318,129824,129825],{"align":23741},".nav a",[318,129827,129820],{"align":23741},[5131,129829,129830],{},"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":39,"searchDepth":40,"depth":40,"links":129832},[129833,129841,129852],{"id":127941,"depth":40,"text":127942,"children":129834},[129835,129836,129837,129838,129839,129840],{"id":127954,"depth":1183,"text":127955},{"id":128026,"depth":1183,"text":128027},{"id":128098,"depth":1183,"text":128099},{"id":128129,"depth":1183,"text":128130},{"id":128136,"depth":1183,"text":128137},{"id":128289,"depth":1183,"text":128290},{"id":128597,"depth":40,"text":128598,"children":129842},[129843,129844,129845,129846,129847,129848,129849,129850,129851],{"id":128604,"depth":1183,"text":128605},{"id":128614,"depth":1183,"text":128615},{"id":128710,"depth":1183,"text":128711},{"id":128783,"depth":1183,"text":128784},{"id":128938,"depth":1183,"text":128939},{"id":129026,"depth":1183,"text":129027},{"id":129078,"depth":1183,"text":129079},{"id":129137,"depth":1183,"text":129138},{"id":129242,"depth":1183,"text":129243},{"id":129570,"depth":40,"text":129571,"children":129853},[129854,129855,129856],{"id":129574,"depth":1183,"text":129575},{"id":129587,"depth":1183,"text":129588},{"id":129637,"depth":1183,"text":129638},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127933,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129863,"title":129864,"body":129865,"description":42,"extension":43,"meta":131455,"navigation":45,"path":131456,"seo":131457,"stem":131458,"__hash__":131459},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129866,"toc":131434},[129867,129870,129874,129877,129880,129883,129886,129889,129892,129895,129899,129907,129944,129980,129983,129997,130002,130036,130039,130132,130137,130140,130170,130173,130178,130186,130190,130197,130243,130287,130292,130295,130298,130301,130304,130307,130310,130312,130315,130319,130324,130368,130373,130376,130379,130416,130421,130424,130427,130430,130433,130465,130468,130471,130474,130506,130509,130512,130515,130519,130522,130554,130557,130561,130581,130584,130592,130595,130599,130604,130607,130639,130644,130647,130685,130689,130694,130697,130700,130731,130734,130751,130756,130808,130868,130873,130927,130965,130969,130973,130976,130980,130988,130991,130993,131004,131009,131057,131091,131094,131097,131100,131103,131147,131150,131153,131156,131159,131162,131165,131209,131212,131215,131218,131221,131224,131227,131233,131236,131280,131283,131286,131289,131292,131295,131339,131342,131344,131347,131351,131355,131393,131397,131400,131403,131407,131415,131419,131422,131425,131428,131431],[10,129868,129864],{"id":129869},"_9-css盒模型浮动与切图",[60,129871,129873],{"id":129872},"_91-盒子模型","9.1 盒子模型",[15,129875,129876],{},"利用盒子来设计网页",[15,129878,129879],{},"盒子包含：边框、外边距、内边距、实际内容",[15,129881,129882],{},"网页布局设置：",[15,129884,129885],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[15,129887,129888],{},"②利用css设置好盒子样式，然后摆放到相应位置",[15,129890,129891],{},"③往盒子里装内容",[1466,129893],{"style":126401,"src":129894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[89,129896,129898],{"id":129897},"_911-边框border","9.1.1 边框（border）",[72,129900,129901,129904],{},[75,129902,129903],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[75,129905,129906],{},"语法",[109,129908,129910],{"className":126545,"code":129909,"language":126547,"meta":39,"style":39},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[115,129911,129912,129917,129923,129940],{"__ignoreMap":39},[118,129913,129914],{"class":120,"line":121},[118,129915,129916],{"class":187},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[118,129918,129919,129921],{"class":120,"line":40},[118,129920,51604],{"class":51293},[118,129922,15577],{"class":128},[118,129924,129925,129927,129929,129931,129933,129935,129938],{"class":120,"line":1183},[118,129926,70889],{"class":177},[118,129928,51430],{"class":128},[118,129930,346],{"class":177},[118,129932,51485],{"class":124},[118,129934,51514],{"class":177},[118,129936,129937],{"class":177}," #ccc",[118,129939,1294],{"class":128},[118,129941,129942],{"class":120,"line":1198},[118,129943,1569],{"class":128},[266,129945,129946,129954],{},[269,129947,129948],{},[272,129949,129950,129952],{},[275,129951,129147],{"align":23741},[275,129953,102689],{"align":23741},[313,129955,129956,129964,129972],{},[272,129957,129958,129961],{},[318,129959,129960],{"align":23741},"border-width",[318,129962,129963],{"align":23741},"定义边框粗细，单位是px",[272,129965,129966,129969],{},[318,129967,129968],{"align":23741},"border-style",[318,129970,129971],{"align":23741},"边框的样式",[272,129973,129974,129977],{},[318,129975,129976],{"align":23741},"border-color",[318,129978,129979],{"align":23741},"边框的颜色",[15,129981,129982],{},"边框样式 border-style 可以设置如下值：",[1135,129984,129985,129988,129991,129994],{},[75,129986,129987],{},"none：没有边框即忽略所有边框的宽度（默认值）",[75,129989,129990],{},"solid：边框为单实线(最为常用的)",[75,129992,129993],{},"dashed：边框为虚线",[75,129995,129996],{},"dotted：边框为点线",[72,129998,129999],{"start":1183},[75,130000,130001],{},"边框的合写分写",[109,130003,130004],{"className":126545,"code":129909,"language":126547,"meta":39,"style":39},[115,130005,130006,130010,130016,130032],{"__ignoreMap":39},[118,130007,130008],{"class":120,"line":121},[118,130009,129916],{"class":187},[118,130011,130012,130014],{"class":120,"line":40},[118,130013,51604],{"class":51293},[118,130015,15577],{"class":128},[118,130017,130018,130020,130022,130024,130026,130028,130030],{"class":120,"line":1183},[118,130019,70889],{"class":177},[118,130021,51430],{"class":128},[118,130023,346],{"class":177},[118,130025,51485],{"class":124},[118,130027,51514],{"class":177},[118,130029,129937],{"class":177},[118,130031,1294],{"class":128},[118,130033,130034],{"class":120,"line":1198},[118,130035,1569],{"class":128},[15,130037,130038],{},"边框分开写法：",[109,130040,130042],{"className":126545,"code":130041,"language":126547,"meta":39,"style":39},"\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",[115,130043,130044,130049,130055,130073,130091,130110,130128],{"__ignoreMap":39},[118,130045,130046],{"class":120,"line":121},[118,130047,130048],{"class":187},"\u002F* 边框分开写法 *\u002F\n",[118,130050,130051,130053],{"class":120,"line":40},[118,130052,51604],{"class":51293},[118,130054,15577],{"class":128},[118,130056,130057,130060,130062,130064,130066,130068,130071],{"class":120,"line":1183},[118,130058,130059],{"class":177},"  border-top",[118,130061,51430],{"class":128},[118,130063,346],{"class":177},[118,130065,51485],{"class":124},[118,130067,51514],{"class":177},[118,130069,130070],{"class":177}," #000",[118,130072,1294],{"class":128},[118,130074,130075,130078,130080,130082,130084,130086,130089],{"class":120,"line":1198},[118,130076,130077],{"class":177},"  border-right",[118,130079,51430],{"class":128},[118,130081,206],{"class":177},[118,130083,51485],{"class":124},[118,130085,62234],{"class":177},[118,130087,130088],{"class":177}," #333",[118,130090,1294],{"class":128},[118,130092,130093,130096,130098,130100,130102,130105,130108],{"class":120,"line":1204},[118,130094,130095],{"class":177},"  border-bottom",[118,130097,51430],{"class":128},[118,130099,200],{"class":177},[118,130101,51485],{"class":124},[118,130103,130104],{"class":177}," dotted",[118,130106,130107],{"class":177}," #666",[118,130109,1294],{"class":128},[118,130111,130112,130115,130117,130119,130121,130123,130126],{"class":120,"line":1218},[118,130113,130114],{"class":177},"  border-left",[118,130116,51430],{"class":128},[118,130118,346],{"class":177},[118,130120,51485],{"class":124},[118,130122,51514],{"class":177},[118,130124,130125],{"class":177}," #999",[118,130127,1294],{"class":128},[118,130129,130130],{"class":120,"line":1224},[118,130131,1569],{"class":128},[72,130133,130134],{"start":1198},[75,130135,130136],{},"表格的细线边框",[15,130138,130139],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[109,130141,130143],{"className":126545,"code":130142,"language":126547,"meta":39,"style":39},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[115,130144,130145,130150,130156,130166],{"__ignoreMap":39},[118,130146,130147],{"class":120,"line":121},[118,130148,130149],{"class":187},"\u002F* 表格细线边框合并 *\u002F\n",[118,130151,130152,130154],{"class":120,"line":40},[118,130153,266],{"class":51293},[118,130155,15577],{"class":128},[118,130157,130158,130160,130162,130164],{"class":120,"line":1183},[118,130159,70571],{"class":177},[118,130161,51430],{"class":128},[118,130163,65028],{"class":177},[118,130165,1294],{"class":128},[118,130167,130168],{"class":120,"line":1198},[118,130169,1569],{"class":128},[15,130171,130172],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[72,130174,130175],{"start":1204},[75,130176,130177],{},"解决边框额外增加盒子的实际大小的方法：",[1135,130179,130180,130183],{},[75,130181,130182],{},"测量盒子大小的时候,不量边框",[75,130184,130185],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[89,130187,130189],{"id":130188},"_912-内边距","9.1.2 内边距",[72,130191,130192,130195],{},[75,130193,130194],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[75,130196,129906],{},[266,130198,130199,130209],{},[269,130200,130201],{},[272,130202,130203,130206],{},[275,130204,130205],{"align":23741},"值的个数",[275,130207,130208],{"align":23741},"表达意思",[313,130210,130211,130219,130227,130235],{},[272,130212,130213,130216],{},[318,130214,130215],{"align":23741},"padding: 5px;",[318,130217,130218],{"align":23741},"1个值，代表上下左右都有5个元素",[272,130220,130221,130224],{},[318,130222,130223],{"align":23741},"padding: 5px 10px;",[318,130225,130226],{"align":23741},"2个值，代表上下内边距为5像素，左右内边距为10像素",[272,130228,130229,130232],{},[318,130230,130231],{"align":23741},"padding: 5px 10px 20px;",[318,130233,130234],{"align":23741},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[272,130236,130237,130240],{},[318,130238,130239],{"align":23741},"padding: 5px 10px 20px 30px;",[318,130241,130242],{"align":23741},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[266,130244,130245,130253],{},[269,130246,130247],{},[272,130248,130249,130251],{},[275,130250,129147],{"align":23741},[275,130252,102689],{"align":23741},[313,130254,130255,130263,130271,130279],{},[272,130256,130257,130260],{},[318,130258,130259],{"align":23741},"padding-left",[318,130261,130262],{"align":23741},"左内边距",[272,130264,130265,130268],{},[318,130266,130267],{"align":23741},"padding-right",[318,130269,130270],{"align":23741},"右内边距",[272,130272,130273,130276],{},[318,130274,130275],{"align":23741},"padding-top",[318,130277,130278],{"align":23741},"上内边距",[272,130280,130281,130284],{},[318,130282,130283],{"align":23741},"padding-bottom",[318,130285,130286],{"align":23741},"下内边距",[72,130288,130289],{"start":1183},[75,130290,130291],{},"内边距会影响盒子的实际大小",[15,130293,130294],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[15,130296,130297],{},"①内容和边框有了距离，添加了内边距",[15,130299,130300],{},"②padding影响了盒子实际大小",[15,130302,130303],{},"内边距对盒子大小的影响：",[15,130305,130306],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[15,130308,130309],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[15,130311,95213],{},[15,130313,130314],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[89,130316,130318],{"id":130317},"_913-外边距","9.1.3 外边距",[72,130320,130321],{},[75,130322,130323],{},"控制盒子与盒子之间的距离",[266,130325,130326,130334],{},[269,130327,130328],{},[272,130329,130330,130332],{},[275,130331,129147],{"align":23741},[275,130333,102689],{"align":23741},[313,130335,130336,130344,130352,130360],{},[272,130337,130338,130341],{},[318,130339,130340],{"align":23741},"margin-left",[318,130342,130343],{"align":23741},"左外边距",[272,130345,130346,130349],{},[318,130347,130348],{"align":23741},"margin-right",[318,130350,130351],{"align":23741},"右外边距",[272,130353,130354,130357],{},[318,130355,130356],{"align":23741},"margin-top",[318,130358,130359],{"align":23741},"上外边距",[272,130361,130362,130365],{},[318,130363,130364],{"align":23741},"margin-bottom",[318,130366,130367],{"align":23741},"下外边距",[72,130369,130370],{"start":40},[75,130371,130372],{},"外边距可以让块级盒子水平居中的两个条件：",[15,130374,130375],{},"①盒子必须指定了宽度（width）",[15,130377,130378],{},"②盒子左右的外边距都设置为 auto",[109,130380,130382],{"className":126545,"code":130381,"language":126547,"meta":39,"style":39},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[115,130383,130384,130389,130396,130412],{"__ignoreMap":39},[118,130385,130386],{"class":120,"line":121},[118,130387,130388],{"class":187},"\u002F* margin 复合写法（同上） *\u002F\n",[118,130390,130391,130394],{"class":120,"line":40},[118,130392,130393],{"class":1967},".box",[118,130395,15577],{"class":128},[118,130397,130398,130400,130402,130404,130406,130409],{"class":120,"line":1183},[118,130399,70463],{"class":177},[118,130401,51430],{"class":128},[118,130403,320],{"class":177},[118,130405,51549],{"class":177},[118,130407,130408],{"class":128},";  ",[118,130410,130411],{"class":187},"\u002F* 块级盒子水平居中 *\u002F\n",[118,130413,130414],{"class":120,"line":1198},[118,130415,1569],{"class":128},[72,130417,130418],{"start":1183},[75,130419,130420],{},"外边距塌陷问题",[15,130422,130423],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1466,130425],{"style":126401,"src":130426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[15,130428,130429],{},"解决方案：",[15,130431,130432],{},"①可以为父亲元素定义上边距",[109,130434,130435],{"className":126545,"code":130381,"language":126547,"meta":39,"style":39},[115,130436,130437,130441,130447,130461],{"__ignoreMap":39},[118,130438,130439],{"class":120,"line":121},[118,130440,130388],{"class":187},[118,130442,130443,130445],{"class":120,"line":40},[118,130444,130393],{"class":1967},[118,130446,15577],{"class":128},[118,130448,130449,130451,130453,130455,130457,130459],{"class":120,"line":1183},[118,130450,70463],{"class":177},[118,130452,51430],{"class":128},[118,130454,320],{"class":177},[118,130456,51549],{"class":177},[118,130458,130408],{"class":128},[118,130460,130411],{"class":187},[118,130462,130463],{"class":120,"line":1198},[118,130464,1569],{"class":128},[15,130466,130467],{},"②可以为父亲元素定义上内边距",[15,130469,130470],{},"③可以为父亲元素添加overflow:hidden",[1466,130472],{"style":126401,"src":130473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[109,130475,130476],{"className":126545,"code":130381,"language":126547,"meta":39,"style":39},[115,130477,130478,130482,130488,130502],{"__ignoreMap":39},[118,130479,130480],{"class":120,"line":121},[118,130481,130388],{"class":187},[118,130483,130484,130486],{"class":120,"line":40},[118,130485,130393],{"class":1967},[118,130487,15577],{"class":128},[118,130489,130490,130492,130494,130496,130498,130500],{"class":120,"line":1183},[118,130491,70463],{"class":177},[118,130493,51430],{"class":128},[118,130495,320],{"class":177},[118,130497,51549],{"class":177},[118,130499,130408],{"class":128},[118,130501,130411],{"class":187},[118,130503,130504],{"class":120,"line":1198},[118,130505,1569],{"class":128},[1466,130507],{"style":126401,"src":130508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[15,130510,130511],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[15,130513,130514],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[89,130516,130518],{"id":130517},"_914-清除内外边距","9.1.4 清除内外边距",[15,130520,130521],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[109,130523,130524],{"className":126545,"code":130381,"language":126547,"meta":39,"style":39},[115,130525,130526,130530,130536,130550],{"__ignoreMap":39},[118,130527,130528],{"class":120,"line":121},[118,130529,130388],{"class":187},[118,130531,130532,130534],{"class":120,"line":40},[118,130533,130393],{"class":1967},[118,130535,15577],{"class":128},[118,130537,130538,130540,130542,130544,130546,130548],{"class":120,"line":1183},[118,130539,70463],{"class":177},[118,130541,51430],{"class":128},[118,130543,320],{"class":177},[118,130545,51549],{"class":177},[118,130547,130408],{"class":128},[118,130549,130411],{"class":187},[118,130551,130552],{"class":120,"line":1198},[118,130553,1569],{"class":128},[15,130555,130556],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[89,130558,130560],{"id":130559},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1135,130562,130563,130566,130569,130572,130575,130578],{},[75,130564,130565],{},"文件→打开 ：可以打开我们要测量的图片",[75,130567,130568],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[75,130570,130571],{},"右击标尺，把里面的单位改为像素",[75,130573,130574],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[75,130576,130577],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[75,130579,130580],{},"用选区拖动 可以测量大小",[1466,130582],{"style":126401,"src":130583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1135,130585,130586,130589],{},[75,130587,130588],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[75,130590,130591],{},"吸管取色工具",[1466,130593],{"style":126401,"src":130594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[89,130596,130598],{"id":130597},"_916-案例","9.1.6 案例",[72,130600,130601],{},[75,130602,130603],{},"小米商品",[1466,130605],{"style":126401,"src":130606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[109,130608,130609],{"className":126545,"code":130381,"language":126547,"meta":39,"style":39},[115,130610,130611,130615,130621,130635],{"__ignoreMap":39},[118,130612,130613],{"class":120,"line":121},[118,130614,130388],{"class":187},[118,130616,130617,130619],{"class":120,"line":40},[118,130618,130393],{"class":1967},[118,130620,15577],{"class":128},[118,130622,130623,130625,130627,130629,130631,130633],{"class":120,"line":1183},[118,130624,70463],{"class":177},[118,130626,51430],{"class":128},[118,130628,320],{"class":177},[118,130630,51549],{"class":177},[118,130632,130408],{"class":128},[118,130634,130411],{"class":187},[118,130636,130637],{"class":120,"line":1198},[118,130638,1569],{"class":128},[72,130640,130641],{"start":40},[75,130642,130643],{},"快报模块",[1466,130645],{"style":126401,"src":130646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[109,130648,130650],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[115,130651,130652,130657,130672,130677],{"__ignoreMap":39},[118,130653,130654],{"class":120,"line":121},[118,130655,130656],{"class":187},"\u003C!-- HTML 代码示例 -->\n",[118,130658,130659,130661,130663,130665,130667,130670],{"class":120,"line":40},[118,130660,1038],{"class":128},[118,130662,51604],{"class":51293},[118,130664,53479],{"class":1967},[118,130666,174],{"class":128},[118,130668,130669],{"class":233},"\"example\"",[118,130671,51300],{"class":128},[118,130673,130674],{"class":120,"line":1183},[118,130675,130676],{"class":128},"  示例内容\n",[118,130678,130679,130681,130683],{"class":120,"line":1198},[118,130680,51778],{"class":128},[118,130682,51604],{"class":51293},[118,130684,51300],{"class":128},[89,130686,130688],{"id":130687},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[72,130690,130691],{},[75,130692,130693],{},"圆角边框",[15,130695,130696],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1466,130698],{"style":126401,"src":130699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[109,130701,130703],{"className":126545,"code":130702,"language":126547,"meta":39,"style":39},"div {\n  border: 1px solid #ccc;\n}\n",[115,130704,130705,130711,130727],{"__ignoreMap":39},[118,130706,130707,130709],{"class":120,"line":121},[118,130708,51604],{"class":51293},[118,130710,15577],{"class":128},[118,130712,130713,130715,130717,130719,130721,130723,130725],{"class":120,"line":40},[118,130714,70889],{"class":177},[118,130716,51430],{"class":128},[118,130718,346],{"class":177},[118,130720,51485],{"class":124},[118,130722,51514],{"class":177},[118,130724,129937],{"class":177},[118,130726,1294],{"class":128},[118,130728,130729],{"class":120,"line":1183},[118,130730,1569],{"class":128},[15,130732,130733],{},"解释:",[1135,130735,130736,130739,130742,130745,130748],{},[75,130737,130738],{},"参数值可以为数值或百分比的形式",[75,130740,130741],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[75,130743,130744],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[75,130746,130747],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[75,130749,130750],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[72,130752,130753],{"start":40},[75,130754,130755],{},"盒子阴影",[109,130757,130759],{"className":126545,"code":130758,"language":126547,"meta":39,"style":39},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[115,130760,130761,130767,130804],{"__ignoreMap":39},[118,130762,130763,130765],{"class":120,"line":121},[118,130764,51604],{"class":51293},[118,130766,15577],{"class":128},[118,130768,130769,130772,130774,130776,130778,130780,130782,130784,130786,130788,130790,130792,130794,130796,130798,130800,130802],{"class":120,"line":40},[118,130770,130771],{"class":177},"  box-shadow",[118,130773,51430],{"class":128},[118,130775,320],{"class":177},[118,130777,14760],{"class":177},[118,130779,51485],{"class":124},[118,130781,2042],{"class":177},[118,130783,51485],{"class":124},[118,130785,78760],{"class":177},[118,130787,129],{"class":128},[118,130789,320],{"class":177},[118,130791,12440],{"class":128},[118,130793,320],{"class":177},[118,130795,12440],{"class":128},[118,130797,320],{"class":177},[118,130799,12440],{"class":128},[118,130801,86203],{"class":177},[118,130803,2723],{"class":128},[118,130805,130806],{"class":120,"line":1183},[118,130807,1569],{"class":128},[266,130809,130810,130818],{},[269,130811,130812],{},[272,130813,130814,130816],{},[275,130815,281],{"align":23741},[275,130817,27482],{"align":23741},[313,130819,130820,130828,130836,130844,130852,130860],{},[272,130821,130822,130825],{},[318,130823,130824],{"align":23741},"h-shadow",[318,130826,130827],{"align":23741},"必需,水平阴影的位置,允许负值",[272,130829,130830,130833],{},[318,130831,130832],{"align":23741},"v-shadow",[318,130834,130835],{"align":23741},"必需,垂直阴影的位置,允许负值",[272,130837,130838,130841],{},[318,130839,130840],{"align":23741},"blur",[318,130842,130843],{"align":23741},"可选,模糊距离,就是影子的虚实",[272,130845,130846,130849],{},[318,130847,130848],{"align":23741},"spread",[318,130850,130851],{"align":23741},"可选,阴影尺寸",[272,130853,130854,130857],{},[318,130855,130856],{"align":23741},"color",[318,130858,130859],{"align":23741},"可选,阴影的颜色",[272,130861,130862,130865],{},[318,130863,130864],{"align":23741},"inset",[318,130866,130867],{"align":23741},"可选,将外部阴影(outset)改为内部阴影",[72,130869,130870],{"start":1183},[75,130871,130872],{},"文字阴影",[109,130874,130876],{"className":126545,"code":130875,"language":126547,"meta":39,"style":39},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[115,130877,130878,130884,130923],{"__ignoreMap":39},[118,130879,130880,130882],{"class":120,"line":121},[118,130881,15],{"class":51293},[118,130883,15577],{"class":128},[118,130885,130886,130889,130891,130893,130895,130897,130899,130901,130903,130905,130907,130909,130911,130913,130915,130917,130919,130921],{"class":120,"line":40},[118,130887,130888],{"class":177},"  text-shadow",[118,130890,51430],{"class":128},[118,130892,346],{"class":177},[118,130894,51485],{"class":124},[118,130896,25123],{"class":177},[118,130898,51485],{"class":124},[118,130900,14760],{"class":177},[118,130902,51485],{"class":124},[118,130904,78760],{"class":177},[118,130906,129],{"class":128},[118,130908,320],{"class":177},[118,130910,12440],{"class":128},[118,130912,320],{"class":177},[118,130914,12440],{"class":128},[118,130916,320],{"class":177},[118,130918,12440],{"class":128},[118,130920,100514],{"class":177},[118,130922,2723],{"class":128},[118,130924,130925],{"class":120,"line":1183},[118,130926,1569],{"class":128},[266,130928,130929,130937],{},[269,130930,130931],{},[272,130932,130933,130935],{},[275,130934,281],{"align":23741},[275,130936,27482],{"align":23741},[313,130938,130939,130945,130952,130959],{},[272,130940,130941,130943],{},[318,130942,130824],{"align":23741},[318,130944,130827],{"align":23741},[272,130946,130947,130949],{},[318,130948,130832],{"align":23741},[318,130950,130951],{"align":23741},"必需,垂直阴影位置,允许负值",[272,130953,130954,130956],{},[318,130955,130840],{"align":23741},[318,130957,130958],{"align":23741},"可选,模糊的距离",[272,130960,130961,130963],{},[318,130962,130856],{"align":23741},[318,130964,130859],{"align":23741},[60,130966,130968],{"id":130967},"_92-浮动","9.2 浮动",[89,130970,130972],{"id":130971},"_921-浮动介绍","9.2.1 浮动介绍",[15,130974,130975],{},"在16.2中详细介绍",[89,130977,130979],{"id":130978},"_922-清除浮动","9.2.2 清除浮动",[72,130981,130982,130985],{},[75,130983,130984],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[75,130986,130987],{},"清除浮动的本质",[15,130989,130990],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[15,130992,9030],{},[1135,130994,130995,130998,131001],{},[75,130996,130997],{},"如果父盒子本身有高度，则不需要清除浮动",[75,130999,131000],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[75,131002,131003],{},"父级有了高度，就不会影响下面的标准流了",[72,131005,131006],{"start":1183},[75,131007,131008],{},"清除浮动样式",[109,131010,131012],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[115,131013,131014,131021,131032,131036,131043,131053],{"__ignoreMap":39},[118,131015,131016,131019],{"class":120,"line":121},[118,131017,131018],{"class":1967},".left",[118,131020,15577],{"class":128},[118,131022,131023,131026,131028,131030],{"class":120,"line":40},[118,131024,131025],{"class":177},"  float",[118,131027,51430],{"class":128},[118,131029,23741],{"class":177},[118,131031,1294],{"class":128},[118,131033,131034],{"class":120,"line":1183},[118,131035,1569],{"class":128},[118,131037,131038,131041],{"class":120,"line":1198},[118,131039,131040],{"class":1967},".right",[118,131042,15577],{"class":128},[118,131044,131045,131047,131049,131051],{"class":120,"line":1204},[118,131046,131025],{"class":177},[118,131048,51430],{"class":128},[118,131050,72515],{"class":177},[118,131052,1294],{"class":128},[118,131054,131055],{"class":120,"line":1218},[118,131056,1569],{"class":128},[266,131058,131059,131067],{},[269,131060,131061],{},[272,131062,131063,131065],{},[275,131064,127009],{"align":23741},[275,131066,27482],{"align":23741},[313,131068,131069,131076,131083],{},[272,131070,131071,131073],{},[318,131072,23741],{"align":23741},[318,131074,131075],{"align":23741},"不允许左侧有浮动元素（清除左侧浮动的影响）",[272,131077,131078,131080],{},[318,131079,72515],{"align":23741},[318,131081,131082],{"align":23741},"不允许右侧有浮动元素（清除右侧浮动的影响）",[272,131084,131085,131088],{},[318,131086,131087],{"align":23741},"both",[318,131089,131090],{"align":23741},"同时清除左右侧浮动的影响",[15,131092,131093],{},"法一",[15,131095,131096],{},"额外标签法也称为隔墙法",[15,131098,131099],{},"使用方式：",[15,131101,131102],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[109,131104,131105],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},[115,131106,131107,131113,131123,131127,131133,131143],{"__ignoreMap":39},[118,131108,131109,131111],{"class":120,"line":121},[118,131110,131018],{"class":1967},[118,131112,15577],{"class":128},[118,131114,131115,131117,131119,131121],{"class":120,"line":40},[118,131116,131025],{"class":177},[118,131118,51430],{"class":128},[118,131120,23741],{"class":177},[118,131122,1294],{"class":128},[118,131124,131125],{"class":120,"line":1183},[118,131126,1569],{"class":128},[118,131128,131129,131131],{"class":120,"line":1198},[118,131130,131040],{"class":1967},[118,131132,15577],{"class":128},[118,131134,131135,131137,131139,131141],{"class":120,"line":1204},[118,131136,131025],{"class":177},[118,131138,51430],{"class":128},[118,131140,72515],{"class":177},[118,131142,1294],{"class":128},[118,131144,131145],{"class":120,"line":1218},[118,131146,1569],{"class":128},[15,131148,131149],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[15,131151,131152],{},"优点： 通俗易懂，书写方便",[15,131154,131155],{},"缺点： 添加许多无意义的标签，结构化较差",[15,131157,131158],{},"注意： 要求这个新的空标签必须是块级元素。",[15,131160,131161],{},"法二",[15,131163,131164],{},"父级添加overflow属性",[109,131166,131167],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},[115,131168,131169,131175,131185,131189,131195,131205],{"__ignoreMap":39},[118,131170,131171,131173],{"class":120,"line":121},[118,131172,131018],{"class":1967},[118,131174,15577],{"class":128},[118,131176,131177,131179,131181,131183],{"class":120,"line":40},[118,131178,131025],{"class":177},[118,131180,51430],{"class":128},[118,131182,23741],{"class":177},[118,131184,1294],{"class":128},[118,131186,131187],{"class":120,"line":1183},[118,131188,1569],{"class":128},[118,131190,131191,131193],{"class":120,"line":1198},[118,131192,131040],{"class":1967},[118,131194,15577],{"class":128},[118,131196,131197,131199,131201,131203],{"class":120,"line":1204},[118,131198,131025],{"class":177},[118,131200,51430],{"class":128},[118,131202,72515],{"class":177},[118,131204,1294],{"class":128},[118,131206,131207],{"class":120,"line":1218},[118,131208,1569],{"class":128},[15,131210,131211],{},"overflow: hidden;",[15,131213,131214],{},"优点：代码简洁",[15,131216,131217],{},"缺点：无法显示溢出的部分",[15,131219,131220],{},"注意：是给父元素添加代码",[15,131222,131223],{},"法三",[15,131225,131226],{},"父级添加after伪元素",[15,131228,131229,131232],{},[131230,131231],"after",{}," 方式是额外标签法的升级版",[15,131234,131235],{},"使用的时候复制就可以",[109,131237,131238],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},[115,131239,131240,131246,131256,131260,131266,131276],{"__ignoreMap":39},[118,131241,131242,131244],{"class":120,"line":121},[118,131243,131018],{"class":1967},[118,131245,15577],{"class":128},[118,131247,131248,131250,131252,131254],{"class":120,"line":40},[118,131249,131025],{"class":177},[118,131251,51430],{"class":128},[118,131253,23741],{"class":177},[118,131255,1294],{"class":128},[118,131257,131258],{"class":120,"line":1183},[118,131259,1569],{"class":128},[118,131261,131262,131264],{"class":120,"line":1198},[118,131263,131040],{"class":1967},[118,131265,15577],{"class":128},[118,131267,131268,131270,131272,131274],{"class":120,"line":1204},[118,131269,131025],{"class":177},[118,131271,51430],{"class":128},[118,131273,72515],{"class":177},[118,131275,1294],{"class":128},[118,131277,131278],{"class":120,"line":1218},[118,131279,1569],{"class":128},[15,131281,131282],{},"优点：没有增加标签，结构更简单",[15,131284,131285],{},"缺点：照顾低版本浏览器",[15,131287,131288],{},"代表网站： 百度、淘宝网、网易等",[15,131290,131291],{},"法四",[15,131293,131294],{},"父级添加双伪元素",[109,131296,131297],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},[115,131298,131299,131305,131315,131319,131325,131335],{"__ignoreMap":39},[118,131300,131301,131303],{"class":120,"line":121},[118,131302,131018],{"class":1967},[118,131304,15577],{"class":128},[118,131306,131307,131309,131311,131313],{"class":120,"line":40},[118,131308,131025],{"class":177},[118,131310,51430],{"class":128},[118,131312,23741],{"class":177},[118,131314,1294],{"class":128},[118,131316,131317],{"class":120,"line":1183},[118,131318,1569],{"class":128},[118,131320,131321,131323],{"class":120,"line":1198},[118,131322,131040],{"class":1967},[118,131324,15577],{"class":128},[118,131326,131327,131329,131331,131333],{"class":120,"line":1204},[118,131328,131025],{"class":177},[118,131330,51430],{"class":128},[118,131332,72515],{"class":177},[118,131334,1294],{"class":128},[118,131336,131337],{"class":120,"line":1218},[118,131338,1569],{"class":128},[15,131340,131341],{},"优点：代码更简洁",[15,131343,131285],{},[15,131345,131346],{},"代表网站：小米、腾讯等",[60,131348,131350],{"id":131349},"_93-ps切图","9.3 PS切图",[89,131352,131354],{"id":131353},"_931-常见图片格式","9.3.1 常见图片格式",[266,131356,131357,131367],{},[269,131358,131359],{},[272,131360,131361,131364],{},[275,131362,131363],{"align":23741},"jpg图像格式",[275,131365,131366],{"align":23741},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[313,131368,131369,131377,131385],{},[272,131370,131371,131374],{},[318,131372,131373],{"align":23741},"gif图像格式",[318,131375,131376],{"align":23741},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[272,131378,131379,131382],{},[318,131380,131381],{"align":23741},"png图像格式",[318,131383,131384],{"align":23741},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[272,131386,131387,131390],{},[318,131388,131389],{"align":23741},"PSD图像格式",[318,131391,131392],{"align":23741},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[89,131394,131396],{"id":131395},"_932-图层切图","9.3.2 图层切图",[15,131398,131399],{},"最简单的切图方式：右击图层 → 导出 → 切片",[15,131401,131402],{},"按住shift选中两个图层->图层菜单->合并图层",[89,131404,131406],{"id":131405},"_933-切片切图","9.3.3 切片切图",[1135,131408,131409,131412],{},[75,131410,131411],{},"利用切片工具手动划出",[75,131413,131414],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[89,131416,131418],{"id":131417},"_934-切图步骤","9.3.4 切图步骤",[15,131420,131421],{},"用切片工具选中：",[1466,131423],{"style":126401,"src":131424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[15,131426,131427],{},"文件 -> 导出",[1466,131429],{"style":126401,"src":131430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5131,131432,131433],{},"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":39,"searchDepth":40,"depth":40,"links":131435},[131436,131445,131449],{"id":129872,"depth":40,"text":129873,"children":131437},[131438,131439,131440,131441,131442,131443,131444],{"id":129897,"depth":1183,"text":129898},{"id":130188,"depth":1183,"text":130189},{"id":130317,"depth":1183,"text":130318},{"id":130517,"depth":1183,"text":130518},{"id":130559,"depth":1183,"text":130560},{"id":130597,"depth":1183,"text":130598},{"id":130687,"depth":1183,"text":130688},{"id":130967,"depth":40,"text":130968,"children":131446},[131447,131448],{"id":130971,"depth":1183,"text":130972},{"id":130978,"depth":1183,"text":130979},{"id":131349,"depth":40,"text":131350,"children":131450},[131451,131452,131453,131454],{"id":131353,"depth":1183,"text":131354},{"id":131395,"depth":1183,"text":131396},{"id":131405,"depth":1183,"text":131406},{"id":131417,"depth":1183,"text":131418},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129864,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131461,"title":131462,"body":131463,"description":42,"extension":43,"meta":132104,"navigation":45,"path":132105,"seo":132106,"stem":132107,"__hash__":132108},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131464,"toc":132092},[131465,131468,131472,131498,131532,131536,131540,131543,131585,131592,131602,131610,131612,131615,131618,131621,131628,131642,131646,131649,131678,131682,131685,131699,131703,131706,131734,131738,131741,131767,131771,131776,131809,131814,131842,131846,131863,131909,131914,131958,131975,132082,132090],[10,131466,131462],{"id":131467},"_10-css规范与学成在线案例",[60,131469,131471],{"id":131470},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[72,131473,131474,131480,131486,131492],{},[75,131475,131476,131479],{},[278,131477,131478],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[75,131481,131482,131485],{},[278,131483,131484],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[75,131487,131488,131491],{},[278,131489,131490],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[75,131493,131494,131497],{},[278,131495,131496],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[109,131499,131500],{"className":126545,"code":129909,"language":126547,"meta":39,"style":39},[115,131501,131502,131506,131512,131528],{"__ignoreMap":39},[118,131503,131504],{"class":120,"line":121},[118,131505,129916],{"class":187},[118,131507,131508,131510],{"class":120,"line":40},[118,131509,51604],{"class":51293},[118,131511,15577],{"class":128},[118,131513,131514,131516,131518,131520,131522,131524,131526],{"class":120,"line":1183},[118,131515,70889],{"class":177},[118,131517,51430],{"class":128},[118,131519,346],{"class":177},[118,131521,51485],{"class":124},[118,131523,51514],{"class":177},[118,131525,129937],{"class":177},[118,131527,1294],{"class":128},[118,131529,131530],{"class":120,"line":1198},[118,131531,1569],{"class":128},[60,131533,131535],{"id":131534},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[89,131537,131539],{"id":131538},"_1021-header头部制作","10.2.1 header头部制作",[1466,131541],{"style":126401,"src":131542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1135,131544,131545,131552,131559,131565,131572,131579],{},[75,131546,131547,131548,131551],{},"1号是版心盒子 ",[278,131549,131550],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[75,131553,131554,131555,131558],{},"版心盒子 里面包含 2号盒子 ",[278,131556,131557],{},"logo"," 图标",[75,131560,131561,131562,131564],{},"版心盒子 里面包含 3号盒子 ",[278,131563,53706],{}," 导航栏",[75,131566,131567,131568,131571],{},"版心盒子 里面包含 4号盒子 ",[278,131569,131570],{},"search"," 搜索框",[75,131573,131574,131575,131578],{},"版心盒子 里面包含 5号盒子 ",[278,131576,131577],{},"user"," 个人信息",[75,131580,131581,131582],{},"注意，要求里面的 ",[278,131583,131584],{},"4个子盒子 必须都浮动",[72,131586,131587],{},[75,131588,131589],{},[278,131590,131591],{},"导航栏注意点:",[15,131593,131594,131595,131598,131599],{},"实际开发中， ",[278,131596,131597],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[278,131600,131601],{},"用 li 包含链接(li+a)的做法",[1135,131603,131604,131607],{},[75,131605,131606],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[75,131608,131609],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[15,131611,9030],{},[15,131613,131614],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[15,131616,131617],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[15,131619,131620],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[72,131622,131623],{"start":40},[75,131624,131625],{},[278,131626,131627],{},"4号盒子search的细节：",[1135,131629,131630,131633,131636],{},[75,131631,131632],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[75,131634,131635],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[75,131637,131638,131641],{},[115,131639,131640],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[89,131643,131645],{"id":131644},"_1022-banner制作","10.2.2 banner制作",[1466,131647],{"style":126401,"src":131648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1135,131650,131651,131658,131664,131671],{},[75,131652,131653,131654,131657],{},"1号盒子是通栏的大盒子 ",[278,131655,131656],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[75,131659,131660,131661,131663],{},"2号盒子是版心 ",[278,131662,923],{}," ， 要水平居中对齐",[75,131665,131666,131667,131670],{},"3号盒子版心内，左对齐 ",[278,131668,131669],{},"subnav"," 侧导航栏",[75,131672,131673,131674,131677],{},"4号盒子版心内，右对齐 ",[278,131675,131676],{},"course"," 课程",[89,131679,131681],{"id":131680},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1466,131683],{"style":126401,"src":131684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1135,131686,131687,131690,131693,131696],{},[75,131688,131689],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[75,131691,131692],{},"1号盒子是标题 H3 左侧浮动",[75,131694,131695],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[75,131697,131698],{},"3号盒子 右浮动 mod 修改",[89,131700,131702],{"id":131701},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1466,131704],{"style":126401,"src":131705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1135,131707,131708,131714,131721,131728,131731],{},[75,131709,131710,131711,131713],{},"1号盒子为最大的盒子 ",[278,131712,53707],{}," 版心水平居中对齐",[75,131715,131716,131717,131720],{},"2号盒子为上面部分 ",[278,131718,131719],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[75,131722,131723,131724,131727],{},"3号盒子为底下部分 ",[278,131725,131726],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[75,131729,131730],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[75,131732,131733],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[89,131735,131737],{"id":131736},"_1025-底部模块制作","10.2.5 底部模块制作",[1466,131739],{"style":126401,"src":131740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1135,131742,131743,131750,131753,131760],{},[75,131744,131745,131746,131749],{},"1号盒子通栏大盒子 底部 ",[278,131747,131748],{},"footer"," 给高度 底色是白色",[75,131751,131752],{},"2号盒子版心水平居中",[75,131754,131755,131756,131759],{},"3号盒子版权 ",[278,131757,131758],{},"copyright"," 左对齐",[75,131761,131762,131763,131766],{},"4号盒子 链接组 ",[278,131764,131765],{},"links"," 右对齐",[89,131768,131770],{"id":131769},"_1026-代码模块","10.2.6 代码模块",[72,131772,131773],{},[75,131774,131775],{},"html部分",[109,131777,131779],{"className":127292,"code":131778,"language":127294,"meta":39,"style":39},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[115,131780,131781],{"__ignoreMap":39},[118,131782,131783,131785,131787,131789,131791,131794,131797,131799,131802,131805,131807],{"class":120,"line":121},[118,131784,1038],{"class":128},[118,131786,21],{"class":51293},[118,131788,61050],{"class":1967},[118,131790,174],{"class":128},[118,131792,131793],{"class":233},"\"https:\u002F\u002Fexample.com\"",[118,131795,131796],{"class":1967}," target",[118,131798,174],{"class":128},[118,131800,131801],{"class":233},"\"_blank\"",[118,131803,131804],{"class":128},">链接文字\u003C\u002F",[118,131806,21],{"class":51293},[118,131808,51300],{"class":128},[72,131810,131811],{"start":40},[75,131812,131813],{},"css部分",[109,131815,131816],{"className":127292,"code":131778,"language":127294,"meta":39,"style":39},[115,131817,131818],{"__ignoreMap":39},[118,131819,131820,131822,131824,131826,131828,131830,131832,131834,131836,131838,131840],{"class":120,"line":121},[118,131821,1038],{"class":128},[118,131823,21],{"class":51293},[118,131825,61050],{"class":1967},[118,131827,174],{"class":128},[118,131829,131793],{"class":233},[118,131831,131796],{"class":1967},[118,131833,174],{"class":128},[118,131835,131801],{"class":233},[118,131837,131804],{"class":128},[118,131839,21],{"class":51293},[118,131841,51300],{"class":128},[89,131843,131845],{"id":131844},"_1027-收获","10.2.7 收获",[72,131847,131848,131851,131854,131857,131860],{},[75,131849,131850],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[75,131852,131853],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[75,131855,131856],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[75,131858,131859],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[75,131861,131862],{},"遗忘代码",[109,131864,131866],{"className":126545,"code":131865,"language":126547,"meta":39,"style":39},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[115,131867,131868,131890,131895,131905],{"__ignoreMap":39},[118,131869,131870,131872,131874,131876,131878,131880,131882,131884,131886,131888],{"class":120,"line":121},[118,131871,51604],{"class":51293},[118,131873,12440],{"class":128},[118,131875,15],{"class":51293},[118,131877,12440],{"class":128},[118,131879,10],{"class":51293},[118,131881,12440],{"class":128},[118,131883,1135],{"class":51293},[118,131885,12440],{"class":128},[118,131887,75],{"class":51293},[118,131889,15577],{"class":128},[118,131891,131892],{"class":120,"line":40},[118,131893,131894],{"class":187},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[118,131896,131897,131899,131901,131903],{"class":120,"line":1183},[118,131898,128161],{"class":177},[118,131900,51430],{"class":128},[118,131902,60862],{"class":177},[118,131904,1294],{"class":128},[118,131906,131907],{"class":120,"line":1198},[118,131908,1569],{"class":128},[72,131910,131911],{"start":1218},[75,131912,131913],{},"html引css的程序",[109,131915,131916],{"className":126545,"code":131865,"language":126547,"meta":39,"style":39},[115,131917,131918,131940,131944,131954],{"__ignoreMap":39},[118,131919,131920,131922,131924,131926,131928,131930,131932,131934,131936,131938],{"class":120,"line":121},[118,131921,51604],{"class":51293},[118,131923,12440],{"class":128},[118,131925,15],{"class":51293},[118,131927,12440],{"class":128},[118,131929,10],{"class":51293},[118,131931,12440],{"class":128},[118,131933,1135],{"class":51293},[118,131935,12440],{"class":128},[118,131937,75],{"class":51293},[118,131939,15577],{"class":128},[118,131941,131942],{"class":120,"line":40},[118,131943,131894],{"class":187},[118,131945,131946,131948,131950,131952],{"class":120,"line":1183},[118,131947,128161],{"class":177},[118,131949,51430],{"class":128},[118,131951,60862],{"class":177},[118,131953,1294],{"class":128},[118,131955,131956],{"class":120,"line":1198},[118,131957,1569],{"class":128},[72,131959,131960,131963,131966,131969,131972],{"start":1224},[75,131961,131962],{},"浮动的盒子不会有外边距合并问题",[75,131964,131965],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[75,131967,131968],{},"ctrl+g快速定位行；shift+alt多个光标",[75,131970,131971],{},"学习上方各个模块的选择器起名方法，以后就这样用",[75,131973,131974],{},"在写选择器时尽量写全一些，例如",[109,131976,131978],{"className":126545,"code":131977,"language":126547,"meta":39,"style":39},"\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",[115,131979,131980,131985,132001,132006,132021,132026,132041,132046,132061,132066],{"__ignoreMap":39},[118,131981,131982],{"class":120,"line":121},[118,131983,131984],{"class":187},"\u002F* 静态定位（默认） *\u002F\n",[118,131986,131987,131990,131992,131994,131996,131999],{"class":120,"line":40},[118,131988,131989],{"class":1967},".static",[118,131991,79800],{"class":128},[118,131993,128905],{"class":177},[118,131995,51430],{"class":128},[118,131997,131998],{"class":177},"static",[118,132000,129475],{"class":128},[118,132002,132003],{"class":120,"line":1183},[118,132004,132005],{"class":187},"\u002F* 相对定位 *\u002F\n",[118,132007,132008,132011,132013,132015,132017,132019],{"class":120,"line":1198},[118,132009,132010],{"class":1967},".relative",[118,132012,79800],{"class":128},[118,132014,128905],{"class":177},[118,132016,51430],{"class":128},[118,132018,54757],{"class":177},[118,132020,129475],{"class":128},[118,132022,132023],{"class":120,"line":1204},[118,132024,132025],{"class":187},"\u002F* 绝对定位 *\u002F\n",[118,132027,132028,132031,132033,132035,132037,132039],{"class":120,"line":1218},[118,132029,132030],{"class":1967},".absolute",[118,132032,79800],{"class":128},[118,132034,128905],{"class":177},[118,132036,51430],{"class":128},[118,132038,54824],{"class":177},[118,132040,129475],{"class":128},[118,132042,132043],{"class":120,"line":1224},[118,132044,132045],{"class":187},"\u002F* 固定定位 *\u002F\n",[118,132047,132048,132051,132053,132055,132057,132059],{"class":120,"line":1315},[118,132049,132050],{"class":1967},".fixed",[118,132052,79800],{"class":128},[118,132054,128905],{"class":177},[118,132056,51430],{"class":128},[118,132058,86226],{"class":177},[118,132060,129475],{"class":128},[118,132062,132063],{"class":120,"line":1321},[118,132064,132065],{"class":187},"\u002F* 粘性定位 *\u002F\n",[118,132067,132068,132071,132073,132075,132077,132080],{"class":120,"line":1333},[118,132069,132070],{"class":1967},".sticky",[118,132072,79800],{"class":128},[118,132074,128905],{"class":177},[118,132076,51430],{"class":128},[118,132078,132079],{"class":177},"sticky",[118,132081,129475],{"class":128},[72,132083,132084,132087],{"start":1621},[75,132085,132086],{},"一定要用好注释",[75,132088,132089],{},"浮动的盒子不会有外边距合并的问题",[5131,132091,131433],{},{"title":39,"searchDepth":40,"depth":40,"links":132093},[132094,132095],{"id":131470,"depth":40,"text":131471},{"id":131534,"depth":40,"text":131535,"children":132096},[132097,132098,132099,132100,132101,132102,132103],{"id":131538,"depth":1183,"text":131539},{"id":131644,"depth":1183,"text":131645},{"id":131680,"depth":1183,"text":131681},{"id":131701,"depth":1183,"text":131702},{"id":131736,"depth":1183,"text":131737},{"id":131769,"depth":1183,"text":131770},{"id":131844,"depth":1183,"text":131845},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131462,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132110,"title":132111,"body":132112,"description":42,"extension":43,"meta":133598,"navigation":45,"path":133599,"seo":133600,"stem":133601,"__hash__":133602},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132113,"toc":133590},[132114,132117,132121,132125,132136,132140,132157,132201,132234,132237,132254,132257,132260,132304,132308,132312,132315,132318,132322,132325,132336,132399,132440,132443,132458,132512,132520,132523,132534,132588,132614,132617,132630,132684,132716,132770,132793,132847,132850,132853,132860,132914,132935,132989,132992,132995,133080,133088,133145,133168,133172,133175,133193,133197,133216,133270,133308,133312,133315,133318,133340,133344,133352,133355,133360,133371,133374,133378,133392,133436,133439,133443,133446,133451,133477,133482,133559,133562,133566,133569,133572,133575,133578,133581,133584,133587],[10,132115,132111],{"id":132116},"_11-传统布局与定位体系",[60,132118,132120],{"id":132119},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[89,132122,132124],{"id":132123},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1135,132126,132127,132130,132133],{},[75,132128,132129],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[75,132131,132132],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[75,132134,132135],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[89,132137,132139],{"id":132138},"_1112-浮动","11.1.2 浮动",[1135,132141,132142,132145,132148,132151,132154],{},[75,132143,132144],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[75,132146,132147],{},"浮动可以改变元素标签默认的排列方式",[75,132149,132150],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[75,132152,132153],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[75,132155,132156],{},"在使用行内块转换时盒子之间是有空隙的",[109,132158,132159],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},[115,132160,132161,132167,132177,132181,132187,132197],{"__ignoreMap":39},[118,132162,132163,132165],{"class":120,"line":121},[118,132164,131018],{"class":1967},[118,132166,15577],{"class":128},[118,132168,132169,132171,132173,132175],{"class":120,"line":40},[118,132170,131025],{"class":177},[118,132172,51430],{"class":128},[118,132174,23741],{"class":177},[118,132176,1294],{"class":128},[118,132178,132179],{"class":120,"line":1183},[118,132180,1569],{"class":128},[118,132182,132183,132185],{"class":120,"line":1198},[118,132184,131040],{"class":1967},[118,132186,15577],{"class":128},[118,132188,132189,132191,132193,132195],{"class":120,"line":1204},[118,132190,131025],{"class":177},[118,132192,51430],{"class":128},[118,132194,72515],{"class":177},[118,132196,1294],{"class":128},[118,132198,132199],{"class":120,"line":1218},[118,132200,1569],{"class":128},[266,132202,132203,132211],{},[269,132204,132205],{},[272,132206,132207,132209],{},[275,132208,127009],{"align":23741},[275,132210,27482],{"align":23741},[313,132212,132213,132220,132227],{},[272,132214,132215,132217],{},[318,132216,54730],{"align":23741},[318,132218,132219],{"align":23741},"元素不浮动（默认值）",[272,132221,132222,132224],{},[318,132223,23741],{"align":23741},[318,132225,132226],{"align":23741},"元素向左浮动",[272,132228,132229,132231],{},[318,132230,72515],{"align":23741},[318,132232,132233],{"align":23741},"元素向右浮动",[15,132235,132236],{},"浮动重点：",[1135,132238,132239,132242,132245,132248,132251],{},[75,132240,132241],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[75,132243,132244],{},"浮动的元素会一行内显示并且元素顶部对齐",[75,132246,132247],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[75,132249,132250],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[75,132252,132253],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[15,132255,132256],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[15,132258,132259],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[109,132261,132262],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},[115,132263,132264,132270,132280,132284,132290,132300],{"__ignoreMap":39},[118,132265,132266,132268],{"class":120,"line":121},[118,132267,131018],{"class":1967},[118,132269,15577],{"class":128},[118,132271,132272,132274,132276,132278],{"class":120,"line":40},[118,132273,131025],{"class":177},[118,132275,51430],{"class":128},[118,132277,23741],{"class":177},[118,132279,1294],{"class":128},[118,132281,132282],{"class":120,"line":1183},[118,132283,1569],{"class":128},[118,132285,132286,132288],{"class":120,"line":1198},[118,132287,131040],{"class":1967},[118,132289,15577],{"class":128},[118,132291,132292,132294,132296,132298],{"class":120,"line":1204},[118,132293,131025],{"class":177},[118,132295,51430],{"class":128},[118,132297,72515],{"class":177},[118,132299,1294],{"class":128},[118,132301,132302],{"class":120,"line":1218},[118,132303,1569],{"class":128},[89,132305,132307],{"id":132306},"_1113-定位","11.1.3 定位",[22003,132309,132311],{"id":132310},"_11131-使用场景","11.1.3.1 使用场景",[15,132313,132314],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[15,132316,132317],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22003,132319,132321],{"id":132320},"_11132-定位组成","11.1.3.2 定位组成",[15,132323,132324],{},"定位 = 定位模式 + 边偏移",[72,132326,132327],{},[75,132328,132329,132332,132333],{},[278,132330,132331],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[278,132334,132335],{},"定位模式",[109,132337,132339],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[115,132340,132341,132347,132361,132378,132395],{"__ignoreMap":39},[118,132342,132343,132345],{"class":120,"line":121},[118,132344,130393],{"class":1967},[118,132346,15577],{"class":128},[118,132348,132349,132352,132354,132356,132358],{"class":120,"line":40},[118,132350,132351],{"class":177},"  position",[118,132353,51430],{"class":128},[118,132355,54757],{"class":177},[118,132357,130408],{"class":128},[118,132359,132360],{"class":187},"\u002F* 定位模式 *\u002F\n",[118,132362,132363,132366,132368,132370,132372,132375],{"class":120,"line":1183},[118,132364,132365],{"class":177},"  top",[118,132367,51430],{"class":128},[118,132369,574],{"class":177},[118,132371,51485],{"class":124},[118,132373,132374],{"class":128},";           ",[118,132376,132377],{"class":187},"\u002F* 边偏移：上 *\u002F\n",[118,132379,132380,132383,132385,132387,132389,132392],{"class":120,"line":1198},[118,132381,132382],{"class":177},"  left",[118,132384,51430],{"class":128},[118,132386,828],{"class":177},[118,132388,51485],{"class":124},[118,132390,132391],{"class":128},";          ",[118,132393,132394],{"class":187},"\u002F* 边偏移：左 *\u002F\n",[118,132396,132397],{"class":120,"line":1204},[118,132398,1569],{"class":128},[266,132400,132401,132410],{},[269,132402,132403],{},[272,132404,132405,132407],{},[275,132406,281],{"align":23741},[275,132408,132409],{"align":23741},"语义",[313,132411,132412,132419,132426,132433],{},[272,132413,132414,132416],{},[318,132415,131998],{"align":23741},[318,132417,132418],{"align":23741},"静态定位",[272,132420,132421,132423],{},[318,132422,54757],{"align":23741},[318,132424,132425],{"align":23741},"相对定位",[272,132427,132428,132430],{},[318,132429,54824],{"align":23741},[318,132431,132432],{"align":23741},"绝对定位",[272,132434,132435,132437],{},[318,132436,86226],{"align":23741},[318,132438,132439],{"align":23741},"固定定位",[15,132441,132442],{},"（1）静态定位：",[1135,132444,132445,132456],{},[75,132446,132447,132448,132451,132452,132455],{},"静态定位是元素的 ",[278,132449,132450],{},"默认定位方式"," ， ",[278,132453,132454],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[75,132457,5186],{},[109,132459,132460],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},[115,132461,132462,132468,132480,132494,132508],{"__ignoreMap":39},[118,132463,132464,132466],{"class":120,"line":121},[118,132465,130393],{"class":1967},[118,132467,15577],{"class":128},[118,132469,132470,132472,132474,132476,132478],{"class":120,"line":40},[118,132471,132351],{"class":177},[118,132473,51430],{"class":128},[118,132475,54757],{"class":177},[118,132477,130408],{"class":128},[118,132479,132360],{"class":187},[118,132481,132482,132484,132486,132488,132490,132492],{"class":120,"line":1183},[118,132483,132365],{"class":177},[118,132485,51430],{"class":128},[118,132487,574],{"class":177},[118,132489,51485],{"class":124},[118,132491,132374],{"class":128},[118,132493,132377],{"class":187},[118,132495,132496,132498,132500,132502,132504,132506],{"class":120,"line":1198},[118,132497,132382],{"class":177},[118,132499,51430],{"class":128},[118,132501,828],{"class":177},[118,132503,51485],{"class":124},[118,132505,132391],{"class":128},[118,132507,132394],{"class":187},[118,132509,132510],{"class":120,"line":1204},[118,132511,1569],{"class":128},[1135,132513,132514,132517],{},[75,132515,132516],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[75,132518,132519],{},"静态定位在布局时我们几乎不用的",[15,132521,132522],{},"（2）相对定位",[1135,132524,132525,132532],{},[75,132526,132527,132528,132531],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[278,132529,132530],{},"原来的位置"," 来说的（自恋型）",[75,132533,5186],{},[109,132535,132536],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},[115,132537,132538,132544,132556,132570,132584],{"__ignoreMap":39},[118,132539,132540,132542],{"class":120,"line":121},[118,132541,130393],{"class":1967},[118,132543,15577],{"class":128},[118,132545,132546,132548,132550,132552,132554],{"class":120,"line":40},[118,132547,132351],{"class":177},[118,132549,51430],{"class":128},[118,132551,54757],{"class":177},[118,132553,130408],{"class":128},[118,132555,132360],{"class":187},[118,132557,132558,132560,132562,132564,132566,132568],{"class":120,"line":1183},[118,132559,132365],{"class":177},[118,132561,51430],{"class":128},[118,132563,574],{"class":177},[118,132565,51485],{"class":124},[118,132567,132374],{"class":128},[118,132569,132377],{"class":187},[118,132571,132572,132574,132576,132578,132580,132582],{"class":120,"line":1198},[118,132573,132382],{"class":177},[118,132575,51430],{"class":128},[118,132577,828],{"class":177},[118,132579,51485],{"class":124},[118,132581,132391],{"class":128},[118,132583,132394],{"class":187},[118,132585,132586],{"class":120,"line":1204},[118,132587,1569],{"class":128},[1135,132589,132590],{},[75,132591,132592,132593,132595,132596,132598,132599,132602,132603,132606,132607,132609,132610,132613],{},"相对定位的特点：",[53709,132594],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53709,132597],{},"  ② ",[278,132600,132601],{},"原来"," 在标准流的 ",[278,132604,132605],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53709,132608],{},"  ③因此， ",[278,132611,132612],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[15,132615,132616],{},"（3）绝对定位",[1135,132618,132619,132628],{},[75,132620,132621,132623,132624,132627],{},[278,132622,132432],{}," 是元素在移动位置的时候，是相对于它 ",[278,132625,132626],{},"祖先元素"," 来说的（拼爹型）",[75,132629,5186],{},[109,132631,132632],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},[115,132633,132634,132640,132652,132666,132680],{"__ignoreMap":39},[118,132635,132636,132638],{"class":120,"line":121},[118,132637,130393],{"class":1967},[118,132639,15577],{"class":128},[118,132641,132642,132644,132646,132648,132650],{"class":120,"line":40},[118,132643,132351],{"class":177},[118,132645,51430],{"class":128},[118,132647,54757],{"class":177},[118,132649,130408],{"class":128},[118,132651,132360],{"class":187},[118,132653,132654,132656,132658,132660,132662,132664],{"class":120,"line":1183},[118,132655,132365],{"class":177},[118,132657,51430],{"class":128},[118,132659,574],{"class":177},[118,132661,51485],{"class":124},[118,132663,132374],{"class":128},[118,132665,132377],{"class":187},[118,132667,132668,132670,132672,132674,132676,132678],{"class":120,"line":1198},[118,132669,132382],{"class":177},[118,132671,51430],{"class":128},[118,132673,828],{"class":177},[118,132675,51485],{"class":124},[118,132677,132391],{"class":128},[118,132679,132394],{"class":187},[118,132681,132682],{"class":120,"line":1204},[118,132683,1569],{"class":128},[1135,132685,132686,132701,132710,132713],{},[75,132687,132688,132689,132691,132692,132694,132695,132697,132698,132700],{},"绝对定位的特点：",[53709,132690],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53709,132693],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53709,132696],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53709,132699],{},"  (4)固定定位",[75,132702,132703,132705,132706,132709],{},[278,132704,132439],{}," 是元素 ",[278,132707,132708],{},"固定于浏览器可视区的位置"," 。（认死理型）",[75,132711,132712],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[75,132714,132715],{},"语法:",[109,132717,132718],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},[115,132719,132720,132726,132738,132752,132766],{"__ignoreMap":39},[118,132721,132722,132724],{"class":120,"line":121},[118,132723,130393],{"class":1967},[118,132725,15577],{"class":128},[118,132727,132728,132730,132732,132734,132736],{"class":120,"line":40},[118,132729,132351],{"class":177},[118,132731,51430],{"class":128},[118,132733,54757],{"class":177},[118,132735,130408],{"class":128},[118,132737,132360],{"class":187},[118,132739,132740,132742,132744,132746,132748,132750],{"class":120,"line":1183},[118,132741,132365],{"class":177},[118,132743,51430],{"class":128},[118,132745,574],{"class":177},[118,132747,51485],{"class":124},[118,132749,132374],{"class":128},[118,132751,132377],{"class":187},[118,132753,132754,132756,132758,132760,132762,132764],{"class":120,"line":1198},[118,132755,132382],{"class":177},[118,132757,51430],{"class":128},[118,132759,828],{"class":177},[118,132761,51485],{"class":124},[118,132763,132391],{"class":128},[118,132765,132394],{"class":187},[118,132767,132768],{"class":120,"line":1204},[118,132769,1569],{"class":128},[1135,132771,132772,132781],{},[75,132773,132774,132775,132777,132778,132780],{},"特点:",[53709,132776],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53709,132779],{},"  ②固定定位不再占有原先的位置,完全脱标",[75,132782,132783,132784,132786,132787,132789,132790,132792],{},"固定在版心位置的方法:",[53709,132785],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53709,132788],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53709,132791],{},"  实例：",[109,132794,132795],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},[115,132796,132797,132803,132815,132829,132843],{"__ignoreMap":39},[118,132798,132799,132801],{"class":120,"line":121},[118,132800,130393],{"class":1967},[118,132802,15577],{"class":128},[118,132804,132805,132807,132809,132811,132813],{"class":120,"line":40},[118,132806,132351],{"class":177},[118,132808,51430],{"class":128},[118,132810,54757],{"class":177},[118,132812,130408],{"class":128},[118,132814,132360],{"class":187},[118,132816,132817,132819,132821,132823,132825,132827],{"class":120,"line":1183},[118,132818,132365],{"class":177},[118,132820,51430],{"class":128},[118,132822,574],{"class":177},[118,132824,51485],{"class":124},[118,132826,132374],{"class":128},[118,132828,132377],{"class":187},[118,132830,132831,132833,132835,132837,132839,132841],{"class":120,"line":1198},[118,132832,132382],{"class":177},[118,132834,51430],{"class":128},[118,132836,828],{"class":177},[118,132838,51485],{"class":124},[118,132840,132391],{"class":128},[118,132842,132394],{"class":187},[118,132844,132845],{"class":120,"line":1204},[118,132846,1569],{"class":128},[1466,132848],{"style":126401,"src":132849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[15,132851,132852],{},"(5)粘性定位",[1135,132854,132855,132858],{},[75,132856,132857],{},"粘性定位可以被认为是相对定位和固定定位的混合",[75,132859,5186],{},[109,132861,132862],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},[115,132863,132864,132870,132882,132896,132910],{"__ignoreMap":39},[118,132865,132866,132868],{"class":120,"line":121},[118,132867,130393],{"class":1967},[118,132869,15577],{"class":128},[118,132871,132872,132874,132876,132878,132880],{"class":120,"line":40},[118,132873,132351],{"class":177},[118,132875,51430],{"class":128},[118,132877,54757],{"class":177},[118,132879,130408],{"class":128},[118,132881,132360],{"class":187},[118,132883,132884,132886,132888,132890,132892,132894],{"class":120,"line":1183},[118,132885,132365],{"class":177},[118,132887,51430],{"class":128},[118,132889,574],{"class":177},[118,132891,51485],{"class":124},[118,132893,132374],{"class":128},[118,132895,132377],{"class":187},[118,132897,132898,132900,132902,132904,132906,132908],{"class":120,"line":1198},[118,132899,132382],{"class":177},[118,132901,51430],{"class":128},[118,132903,828],{"class":177},[118,132905,51485],{"class":124},[118,132907,132391],{"class":128},[118,132909,132394],{"class":187},[118,132911,132912],{"class":120,"line":1204},[118,132913,1569],{"class":128},[1135,132915,132916],{},[75,132917,132918,132919,132921,132922,132924,132925,132927,132928,132931,132932,132934],{},"粘性定位的特点：",[53709,132920],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53709,132923],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53709,132926],{},"  ③必须添加 top 、left、right、bottom ",[278,132929,132930],{},"其中一个"," 才有效",[53709,132933],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[109,132936,132937],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},[115,132938,132939,132945,132957,132971,132985],{"__ignoreMap":39},[118,132940,132941,132943],{"class":120,"line":121},[118,132942,130393],{"class":1967},[118,132944,15577],{"class":128},[118,132946,132947,132949,132951,132953,132955],{"class":120,"line":40},[118,132948,132351],{"class":177},[118,132950,51430],{"class":128},[118,132952,54757],{"class":177},[118,132954,130408],{"class":128},[118,132956,132360],{"class":187},[118,132958,132959,132961,132963,132965,132967,132969],{"class":120,"line":1183},[118,132960,132365],{"class":177},[118,132962,51430],{"class":128},[118,132964,574],{"class":177},[118,132966,51485],{"class":124},[118,132968,132374],{"class":128},[118,132970,132377],{"class":187},[118,132972,132973,132975,132977,132979,132981,132983],{"class":120,"line":1198},[118,132974,132382],{"class":177},[118,132976,51430],{"class":128},[118,132978,828],{"class":177},[118,132980,51485],{"class":124},[118,132982,132391],{"class":128},[118,132984,132394],{"class":187},[118,132986,132987],{"class":120,"line":1204},[118,132988,1569],{"class":128},[1466,132990],{"style":126401,"src":132991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[15,132993,132994],{},"(6)总结",[266,132996,132997,133012],{},[269,132998,132999],{},[272,133000,133001,133003,133006,133009],{},[275,133002,132335],{"align":23741},[275,133004,133005],{"align":23741},"是否脱标",[275,133007,133008],{"align":23741},"移动位置",[275,133010,133011],{"align":23741},"是否常用",[313,133013,133014,133027,133041,133055,133068],{},[272,133015,133016,133019,133021,133024],{},[318,133017,133018],{"align":23741},"Static 静态定位",[318,133020,104671],{"align":23741},[318,133022,133023],{"align":23741},"不能使用边偏移",[318,133025,133026],{"align":23741},"很少",[272,133028,133029,133032,133035,133038],{},[318,133030,133031],{"align":23741},"Relative 相对定位",[318,133033,133034],{"align":23741},"否(占有位置)",[318,133036,133037],{"align":23741},"相对于自身位置移动",[318,133039,133040],{"align":23741},"基本单独使用",[272,133042,133043,133046,133049,133052],{},[318,133044,133045],{"align":23741},"Absolute 绝对定位",[318,133047,133048],{"align":23741},"是(不占有位置)",[318,133050,133051],{"align":23741},"带有定位的父级",[318,133053,133054],{"align":23741},"要和定位父级元素搭配使用",[272,133056,133057,133060,133062,133065],{},[318,133058,133059],{"align":23741},"Fixed 固定定位",[318,133061,133048],{"align":23741},[318,133063,133064],{"align":23741},"浏览器可视区",[318,133066,133067],{"align":23741},"单独使用,不需要父级",[272,133069,133070,133073,133075,133077],{},[318,133071,133072],{"align":23741},"Sticky 粘性定位",[318,133074,133034],{"align":23741},[318,133076,133064],{"align":23741},[318,133078,133079],{"align":23741},"当前阶段少",[72,133081,133082],{"start":40},[75,133083,133084,133087],{},[278,133085,133086],{},"边偏移"," 则决定了该元素的最终位置",[266,133089,133090,133101],{},[269,133091,133092],{},[272,133093,133094,133097,133099],{},[275,133095,133096],{"align":23741},"边偏移属性",[275,133098,27485],{"align":23741},[275,133100,27482],{"align":23741},[313,133102,133103,133114,133125,133135],{},[272,133104,133105,133108,133111],{},[318,133106,133107],{"align":23741},"top",[318,133109,133110],{"align":23741},"top: 80px;",[318,133112,133113],{"align":23741},"顶端偏移量，定义元素相对于父元素上边线的距离",[272,133115,133116,133119,133122],{},[318,133117,133118],{"align":23741},"bottom",[318,133120,133121],{"align":23741},"bottom: 80px ;",[318,133123,133124],{"align":23741},"底部偏移量，定义元素相对于其父元素下边线的距离",[272,133126,133127,133129,133132],{},[318,133128,23741],{"align":23741},[318,133130,133131],{"align":23741},"left: 80px ;",[318,133133,133134],{"align":23741},"左侧偏移量，定义元素相对于其父元素左边线的距离",[272,133136,133137,133139,133142],{},[318,133138,72515],{"align":23741},[318,133140,133141],{"align":23741},"right: 80px ;",[318,133143,133144],{"align":23741},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1135,133146,133147],{},[75,133148,9030,133149,133151,133152,133154,133155,133157,133158,133161,133162,133164,133165,133167],{},[53709,133150],{},"  ① ",[278,133153,133086],{}," 需要和 ",[278,133156,132335],{}," 联合使用， ",[278,133159,133160],{},"单独使用无效"," ；",[53709,133163],{},"  ②top和bottom不要同时使用",[53709,133166],{},"  ③left和right不要同时使用",[22003,133169,133171],{"id":133170},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[15,133173,133174],{},"子级是绝对定位的话，父级要用相对定位",[1135,133176,133177,133180,133183,133186],{},[75,133178,133179],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[75,133181,133182],{},"父盒子需要加定位限制子盒子在父盒子内显示",[75,133184,133185],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[75,133187,133188,133189,133192],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[278,133190,133191],{},"子绝父绝"," 也会遇到",[22003,133194,133196],{"id":133195},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1135,133198,133199,133214],{},[75,133200,133201,133202,133205,133206,133209,133210,133213],{},"在使用 ",[278,133203,133204],{},"定位"," 布局时，可能会 ",[278,133207,133208],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[278,133211,133212],{},"z-index"," 来控制盒子的前后次序 (z轴)",[75,133215,5186],{},[109,133217,133218],{"className":126545,"code":132338,"language":126547,"meta":39,"style":39},[115,133219,133220,133226,133238,133252,133266],{"__ignoreMap":39},[118,133221,133222,133224],{"class":120,"line":121},[118,133223,130393],{"class":1967},[118,133225,15577],{"class":128},[118,133227,133228,133230,133232,133234,133236],{"class":120,"line":40},[118,133229,132351],{"class":177},[118,133231,51430],{"class":128},[118,133233,54757],{"class":177},[118,133235,130408],{"class":128},[118,133237,132360],{"class":187},[118,133239,133240,133242,133244,133246,133248,133250],{"class":120,"line":1183},[118,133241,132365],{"class":177},[118,133243,51430],{"class":128},[118,133245,574],{"class":177},[118,133247,51485],{"class":124},[118,133249,132374],{"class":128},[118,133251,132377],{"class":187},[118,133253,133254,133256,133258,133260,133262,133264],{"class":120,"line":1198},[118,133255,132382],{"class":177},[118,133257,51430],{"class":128},[118,133259,828],{"class":177},[118,133261,51485],{"class":124},[118,133263,132391],{"class":128},[118,133265,132394],{"class":187},[118,133267,133268],{"class":120,"line":1204},[118,133269,1569],{"class":128},[1135,133271,133272],{},[75,133273,133274,133275,133151,133277,133279,133280,127708,133283,82532,133286,133288,133289,133291,133292,133295,133296,133161,133299,133301,133302,133305,133307],{},"z-index的特性",[53709,133276],{},[278,133278,127009],{}," ： ",[278,133281,133282],{},"正整数",[278,133284,133285],{},"负整数",[278,133287,320],{}," ，默认值是 0，数值越大，盒子越靠上；",[53709,133290],{},"  ②如果 ",[278,133293,133294],{},"属性值相同"," ，则按照书写顺序， ",[278,133297,133298],{},"后来居上",[53709,133300],{},"  ③数字后面 ",[278,133303,133304],{},"不能加单位",[53709,133306],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22003,133309,133311],{"id":133310},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[15,133313,133314],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[15,133316,133317],{},"方法:",[1135,133319,133320,133330],{},[75,133321,133322,133323,133326,133327],{},"left: 50%; 让 ",[278,133324,133325],{},"盒子的左侧"," 移动到 ",[278,133328,133329],{},"父级元素的水平中心位置",[75,133331,133332,133333,133336,133337],{},"margin-left: -100px; 让盒子 ",[278,133334,133335],{},"向左"," 移动 ",[278,133338,133339],{},"自身宽度的一半",[22003,133341,133343],{"id":133342},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[72,133345,133346,133349],{},[75,133347,133348],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[75,133350,133351],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[15,133353,133354],{},"也就是说绝对定位和固定定位和浮动类似",[72,133356,133357],{"start":1183},[75,133358,133359],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1135,133361,133362,133365,133368],{},[75,133363,133364],{},"可以用inline-block 转换为行内块",[75,133366,133367],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[75,133369,133370],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[15,133372,133373],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22003,133375,133377],{"id":133376},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[72,133379,133380,133383,133386,133389],{},[75,133381,133382],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[75,133384,133385],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[75,133387,133388],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[75,133390,133391],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[109,133393,133394],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},[115,133395,133396,133402,133412,133416,133422,133432],{"__ignoreMap":39},[118,133397,133398,133400],{"class":120,"line":121},[118,133399,131018],{"class":1967},[118,133401,15577],{"class":128},[118,133403,133404,133406,133408,133410],{"class":120,"line":40},[118,133405,131025],{"class":177},[118,133407,51430],{"class":128},[118,133409,23741],{"class":177},[118,133411,1294],{"class":128},[118,133413,133414],{"class":120,"line":1183},[118,133415,1569],{"class":128},[118,133417,133418,133420],{"class":120,"line":1198},[118,133419,131040],{"class":1967},[118,133421,15577],{"class":128},[118,133423,133424,133426,133428,133430],{"class":120,"line":1204},[118,133425,131025],{"class":177},[118,133427,51430],{"class":128},[118,133429,72515],{"class":177},[118,133431,1294],{"class":128},[118,133433,133434],{"class":120,"line":1218},[118,133435,1569],{"class":128},[1466,133437],{"style":126401,"src":133438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22003,133440,133442],{"id":133441},"_11138-轮播图","11.1.3.8 轮播图",[1466,133444],{"style":126401,"src":133445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[72,133447,133448],{},[75,133449,133450],{},"制作顺序:",[1135,133452,133453,133456,133459,133468],{},[75,133454,133455],{},"大盒子我们类名为： tb-promo 淘宝广告",[75,133457,133458],{},"里面先放一张图片",[75,133460,133461,133462,133464,133465,133467],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53709,133463],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53709,133466],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[75,133469,133470,133471,133473,133474,133476],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53709,133472],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53709,133475],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[72,133478,133479],{"start":40},[75,133480,133481],{},"代码模块",[109,133483,133485],{"className":126545,"code":133484,"language":126547,"meta":39,"style":39},"\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",[115,133486,133487,133492,133499,133509,133519,133529,133533,133538,133545,133555],{"__ignoreMap":39},[118,133488,133489],{"class":120,"line":121},[118,133490,133491],{"class":187},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[118,133493,133494,133497],{"class":120,"line":40},[118,133495,133496],{"class":1967},".son",[118,133498,15577],{"class":128},[118,133500,133501,133503,133505,133507],{"class":120,"line":1183},[118,133502,132351],{"class":177},[118,133504,51430],{"class":128},[118,133506,54824],{"class":177},[118,133508,1294],{"class":128},[118,133510,133511,133513,133515,133517],{"class":120,"line":1198},[118,133512,132365],{"class":177},[118,133514,51430],{"class":128},[118,133516,320],{"class":177},[118,133518,1294],{"class":128},[118,133520,133521,133523,133525,133527],{"class":120,"line":1204},[118,133522,132382],{"class":177},[118,133524,51430],{"class":128},[118,133526,320],{"class":177},[118,133528,1294],{"class":128},[118,133530,133531],{"class":120,"line":1218},[118,133532,1569],{"class":128},[118,133534,133535],{"class":120,"line":1224},[118,133536,133537],{"class":187},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[118,133539,133540,133543],{"class":120,"line":1315},[118,133541,133542],{"class":1967},".father",[118,133544,15577],{"class":128},[118,133546,133547,133549,133551,133553],{"class":120,"line":1321},[118,133548,132351],{"class":177},[118,133550,51430],{"class":128},[118,133552,54757],{"class":177},[118,133554,1294],{"class":128},[118,133556,133557],{"class":120,"line":1333},[118,133558,1569],{"class":128},[15,133560,133561],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[89,133563,133565],{"id":133564},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1466,133567],{"style":126401,"src":133568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[15,133570,133571],{},"✨ 黄金口诀：",[15,133573,133574],{},"\"TOP正下负上，LEFT正右负左\"",[15,133576,133577],{},"\"RIGHT正左负右，BOTTOM正上负下",[15,133579,133580],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[15,133582,133583],{},"✨ 简单记：",[15,133585,133586],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5131,133588,133589],{},"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":39,"searchDepth":40,"depth":40,"links":133591},[133592],{"id":132119,"depth":40,"text":132120,"children":133593},[133594,133595,133596,133597],{"id":132123,"depth":1183,"text":132124},{"id":132138,"depth":1183,"text":132139},{"id":132306,"depth":1183,"text":132307},{"id":133564,"depth":1183,"text":133565},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132111,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133604,"title":133605,"body":133606,"description":42,"extension":43,"meta":135029,"navigation":45,"path":135030,"seo":135031,"stem":135032,"__hash__":135033},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133607,"toc":135008},[133608,133611,133615,133623,133627,133632,133640,133652,133656,133661,133669,133680,133684,133689,133730,133738,133742,133745,133748,133751,133845,133848,133942,133945,134039,134042,134045,134080,134083,134086,134116,134119,134122,134125,134128,134131,134134,134137,134207,134210,134214,134218,134259,134263,134269,134272,134275,134279,134282,134285,134288,134369,134372,134375,134379,134383,134386,134389,134392,134395,134398,134404,134413,134417,134436,134440,134450,134453,134456,134459,134462,134465,134468,134471,134474,134483,134487,134496,134499,134504,134557,134562,134728,134731,134734,134739,134742,134745,134748,134751,134756,134904,134907,134910,134915,134918,134923,134957,134960,134963,134967,134970,134977,134980,134983,134986,134989,134992,134995,134998,135002,135005],[10,133609,133605],{"id":133610},"_12-显示隐藏与图形资源",[60,133612,133614],{"id":133613},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1135,133616,133617,133620],{},[75,133618,133619],{},"目的:让一个元素在页面中消失或者显示出来",[75,133621,133622],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[89,133624,133626],{"id":133625},"_1211-display-显示","12.1.1 display 显示",[72,133628,133629],{},[75,133630,133631],{},"display 设置或检索对象是否及如何显示",[1135,133633,133634,133637],{},[75,133635,133636],{},"display: none;隐藏对象",[75,133638,133639],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[72,133641,133642,133649],{"start":40},[75,133643,133644,133645,133648],{},"特点： display 隐藏元素后， ",[278,133646,133647],{},"不再占"," 有原来的位置",[75,133650,133651],{},"在js中使用非常的广泛",[89,133653,133655],{"id":133654},"_1212-visibility可见性","12.1.2 visibility可见性",[72,133657,133658],{},[75,133659,133660],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1135,133662,133663,133666],{},[75,133664,133665],{},"visibility： visible；元素可见",[75,133667,133668],{},"visibility：hidden；元素隐藏",[72,133670,133671,133674,133677],{"start":40},[75,133672,133673],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[75,133675,133676],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[75,133678,133679],{},"隐藏后继续占有原有位置",[89,133681,133683],{"id":133682},"_1213-overflow溢出","12.1.3 overflow溢出",[1135,133685,133686],{},[75,133687,133688],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[266,133690,133691,133699],{},[269,133692,133693],{},[272,133694,133695,133697],{},[275,133696,127009],{"align":23741},[275,133698,27482],{"align":23741},[313,133700,133701,133709,133716,133723],{},[272,133702,133703,133706],{},[318,133704,133705],{"align":23741},"visible",[318,133707,133708],{"align":23741},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[272,133710,133711,133713],{},[318,133712,61707],{"align":23741},[318,133714,133715],{"align":23741},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[272,133717,133718,133720],{},[318,133719,128965],{"align":23741},[318,133721,133722],{"align":23741},"不管超出内容否，总是显示滚动条",[272,133724,133725,133727],{},[318,133726,72656],{"align":23741},[318,133728,133729],{"align":23741},"超出自动显示滚动条，不超出不显示滚动条",[1135,133731,133732,133735],{},[75,133733,133734],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[75,133736,133737],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[89,133739,133741],{"id":133740},"_1214-案例收获","12.1.4 案例收获",[1466,133743],{"style":126401,"src":133744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[15,133746,133747],{},"问题：没做出来动态效果，使用hover没实现",[15,133749,133750],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[109,133752,133753],{"className":126545,"code":131977,"language":126547,"meta":39,"style":39},[115,133754,133755,133759,133773,133777,133791,133795,133809,133813,133827,133831],{"__ignoreMap":39},[118,133756,133757],{"class":120,"line":121},[118,133758,131984],{"class":187},[118,133760,133761,133763,133765,133767,133769,133771],{"class":120,"line":40},[118,133762,131989],{"class":1967},[118,133764,79800],{"class":128},[118,133766,128905],{"class":177},[118,133768,51430],{"class":128},[118,133770,131998],{"class":177},[118,133772,129475],{"class":128},[118,133774,133775],{"class":120,"line":1183},[118,133776,132005],{"class":187},[118,133778,133779,133781,133783,133785,133787,133789],{"class":120,"line":1198},[118,133780,132010],{"class":1967},[118,133782,79800],{"class":128},[118,133784,128905],{"class":177},[118,133786,51430],{"class":128},[118,133788,54757],{"class":177},[118,133790,129475],{"class":128},[118,133792,133793],{"class":120,"line":1204},[118,133794,132025],{"class":187},[118,133796,133797,133799,133801,133803,133805,133807],{"class":120,"line":1218},[118,133798,132030],{"class":1967},[118,133800,79800],{"class":128},[118,133802,128905],{"class":177},[118,133804,51430],{"class":128},[118,133806,54824],{"class":177},[118,133808,129475],{"class":128},[118,133810,133811],{"class":120,"line":1224},[118,133812,132045],{"class":187},[118,133814,133815,133817,133819,133821,133823,133825],{"class":120,"line":1315},[118,133816,132050],{"class":1967},[118,133818,79800],{"class":128},[118,133820,128905],{"class":177},[118,133822,51430],{"class":128},[118,133824,86226],{"class":177},[118,133826,129475],{"class":128},[118,133828,133829],{"class":120,"line":1321},[118,133830,132065],{"class":187},[118,133832,133833,133835,133837,133839,133841,133843],{"class":120,"line":1333},[118,133834,132070],{"class":1967},[118,133836,79800],{"class":128},[118,133838,128905],{"class":177},[118,133840,51430],{"class":128},[118,133842,132079],{"class":177},[118,133844,129475],{"class":128},[15,133846,133847],{},"完整代码：",[109,133849,133850],{"className":126545,"code":131977,"language":126547,"meta":39,"style":39},[115,133851,133852,133856,133870,133874,133888,133892,133906,133910,133924,133928],{"__ignoreMap":39},[118,133853,133854],{"class":120,"line":121},[118,133855,131984],{"class":187},[118,133857,133858,133860,133862,133864,133866,133868],{"class":120,"line":40},[118,133859,131989],{"class":1967},[118,133861,79800],{"class":128},[118,133863,128905],{"class":177},[118,133865,51430],{"class":128},[118,133867,131998],{"class":177},[118,133869,129475],{"class":128},[118,133871,133872],{"class":120,"line":1183},[118,133873,132005],{"class":187},[118,133875,133876,133878,133880,133882,133884,133886],{"class":120,"line":1198},[118,133877,132010],{"class":1967},[118,133879,79800],{"class":128},[118,133881,128905],{"class":177},[118,133883,51430],{"class":128},[118,133885,54757],{"class":177},[118,133887,129475],{"class":128},[118,133889,133890],{"class":120,"line":1204},[118,133891,132025],{"class":187},[118,133893,133894,133896,133898,133900,133902,133904],{"class":120,"line":1218},[118,133895,132030],{"class":1967},[118,133897,79800],{"class":128},[118,133899,128905],{"class":177},[118,133901,51430],{"class":128},[118,133903,54824],{"class":177},[118,133905,129475],{"class":128},[118,133907,133908],{"class":120,"line":1224},[118,133909,132045],{"class":187},[118,133911,133912,133914,133916,133918,133920,133922],{"class":120,"line":1315},[118,133913,132050],{"class":1967},[118,133915,79800],{"class":128},[118,133917,128905],{"class":177},[118,133919,51430],{"class":128},[118,133921,86226],{"class":177},[118,133923,129475],{"class":128},[118,133925,133926],{"class":120,"line":1321},[118,133927,132065],{"class":187},[118,133929,133930,133932,133934,133936,133938,133940],{"class":120,"line":1333},[118,133931,132070],{"class":1967},[118,133933,79800],{"class":128},[118,133935,128905],{"class":177},[118,133937,51430],{"class":128},[118,133939,132079],{"class":177},[118,133941,129475],{"class":128},[15,133943,133944],{},"分布思路重点详解：",[109,133946,133947],{"className":126545,"code":131977,"language":126547,"meta":39,"style":39},[115,133948,133949,133953,133967,133971,133985,133989,134003,134007,134021,134025],{"__ignoreMap":39},[118,133950,133951],{"class":120,"line":121},[118,133952,131984],{"class":187},[118,133954,133955,133957,133959,133961,133963,133965],{"class":120,"line":40},[118,133956,131989],{"class":1967},[118,133958,79800],{"class":128},[118,133960,128905],{"class":177},[118,133962,51430],{"class":128},[118,133964,131998],{"class":177},[118,133966,129475],{"class":128},[118,133968,133969],{"class":120,"line":1183},[118,133970,132005],{"class":187},[118,133972,133973,133975,133977,133979,133981,133983],{"class":120,"line":1198},[118,133974,132010],{"class":1967},[118,133976,79800],{"class":128},[118,133978,128905],{"class":177},[118,133980,51430],{"class":128},[118,133982,54757],{"class":177},[118,133984,129475],{"class":128},[118,133986,133987],{"class":120,"line":1204},[118,133988,132025],{"class":187},[118,133990,133991,133993,133995,133997,133999,134001],{"class":120,"line":1218},[118,133992,132030],{"class":1967},[118,133994,79800],{"class":128},[118,133996,128905],{"class":177},[118,133998,51430],{"class":128},[118,134000,54824],{"class":177},[118,134002,129475],{"class":128},[118,134004,134005],{"class":120,"line":1224},[118,134006,132045],{"class":187},[118,134008,134009,134011,134013,134015,134017,134019],{"class":120,"line":1315},[118,134010,132050],{"class":1967},[118,134012,79800],{"class":128},[118,134014,128905],{"class":177},[118,134016,51430],{"class":128},[118,134018,86226],{"class":177},[118,134020,129475],{"class":128},[118,134022,134023],{"class":120,"line":1321},[118,134024,132065],{"class":187},[118,134026,134027,134029,134031,134033,134035,134037],{"class":120,"line":1333},[118,134028,132070],{"class":1967},[118,134030,79800],{"class":128},[118,134032,128905],{"class":177},[118,134034,51430],{"class":128},[118,134036,132079],{"class":177},[118,134038,129475],{"class":128},[1466,134040],{"style":126401,"src":134041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[15,134043,134044],{},"图片太大，盒子太小，此时需要修改图片的大小",[109,134046,134048],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[115,134049,134050],{"__ignoreMap":39},[118,134051,134052,134054,134056,134058,134060,134063,134065,134067,134070,134073,134075,134078],{"class":120,"line":121},[118,134053,1038],{"class":128},[118,134055,1466],{"class":51293},[118,134057,55232],{"class":1967},[118,134059,174],{"class":128},[118,134061,134062],{"class":233},"\"images\u002Fpic.jpg\"",[118,134064,55240],{"class":1967},[118,134066,174],{"class":128},[118,134068,134069],{"class":233},"\"描述文字\"",[118,134071,134072],{"class":1967}," title",[118,134074,174],{"class":128},[118,134076,134077],{"class":233},"\"悬停提示\"",[118,134079,51300],{"class":128},[1466,134081],{"style":126401,"src":134082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[15,134084,134085],{},"制造遮罩层",[109,134087,134088],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,134089,134090],{"__ignoreMap":39},[118,134091,134092,134094,134096,134098,134100,134102,134104,134106,134108,134110,134112,134114],{"class":120,"line":121},[118,134093,1038],{"class":128},[118,134095,1466],{"class":51293},[118,134097,55232],{"class":1967},[118,134099,174],{"class":128},[118,134101,134062],{"class":233},[118,134103,55240],{"class":1967},[118,134105,174],{"class":128},[118,134107,134069],{"class":233},[118,134109,134072],{"class":1967},[118,134111,174],{"class":128},[118,134113,134077],{"class":233},[118,134115,51300],{"class":128},[15,134117,134118],{},"此时是这样的为标准流",[1466,134120],{"style":126401,"src":134121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[15,134123,134124],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[15,134126,134127],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[15,134129,134130],{},"让他在中间，用center(background-position)",[15,134132,134133],{},"将需要变的尽可能放到一个盒子中",[15,134135,134136],{},"放大盒子上内部盒子发生变化",[109,134138,134140],{"className":126545,"code":134139,"language":126547,"meta":39,"style":39},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[115,134141,134142,134148,134158,134162,134169,134179,134191,134203],{"__ignoreMap":39},[118,134143,134144,134146],{"class":120,"line":121},[118,134145,127612],{"class":1967},[118,134147,15577],{"class":128},[118,134149,134150,134152,134154,134156],{"class":120,"line":40},[118,134151,132351],{"class":177},[118,134153,51430],{"class":128},[118,134155,54757],{"class":177},[118,134157,1294],{"class":128},[118,134159,134160],{"class":120,"line":1183},[118,134161,1569],{"class":128},[118,134163,134164,134167],{"class":120,"line":1198},[118,134165,134166],{"class":1967},".child",[118,134168,15577],{"class":128},[118,134170,134171,134173,134175,134177],{"class":120,"line":1204},[118,134172,132351],{"class":177},[118,134174,51430],{"class":128},[118,134176,54824],{"class":177},[118,134178,1294],{"class":128},[118,134180,134181,134183,134185,134187,134189],{"class":120,"line":1218},[118,134182,132365],{"class":177},[118,134184,51430],{"class":128},[118,134186,784],{"class":177},[118,134188,456],{"class":124},[118,134190,1294],{"class":128},[118,134192,134193,134195,134197,134199,134201],{"class":120,"line":1224},[118,134194,132382],{"class":177},[118,134196,51430],{"class":128},[118,134198,784],{"class":177},[118,134200,456],{"class":124},[118,134202,1294],{"class":128},[118,134204,134205],{"class":120,"line":1315},[118,134206,1569],{"class":128},[15,134208,134209],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[60,134211,134213],{"id":134212},"_122-精灵图","12.2 精灵图",[89,134215,134217],{"id":134216},"_1221-理解","12.2.1 理解",[72,134219,134220,134238],{},[75,134221,134222,134223,132451,134226,134229,134230,134233,134234,134237],{},"目的： ",[278,134224,134225],{},"为了有效地减少服务器接收和发送请求的次数",[278,134227,134228],{},"提高"," 页面的 ",[278,134231,134232],{},"加载速度"," ，出现了 ",[278,134235,134236],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[75,134239,134240,134241,134243,134244,134246,134247,134249,134250,134252,134253,134255,134256,134258],{},"使用精灵图核心：",[53709,134242],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53709,134245],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53709,134248],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53709,134251],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53709,134254],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53709,134257],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[89,134260,134262],{"id":134261},"_1222-扒图","12.2.2 扒图",[109,134264,134267],{"className":134265,"code":134266,"language":5192},[5190],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[115,134268,134266],{"__ignoreMap":39},[1466,134270],{"style":126401,"src":134271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1466,134273],{"style":126401,"src":134274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[89,134276,134278],{"id":134277},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1466,134280],{"style":126401,"src":134281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[15,134283,134284],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1466,134286],{"style":126401,"src":134287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[109,134289,134291],{"className":126545,"code":134290,"language":126547,"meta":39,"style":39},"\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",[115,134292,134293,134298,134305,134317,134329,134348,134365],{"__ignoreMap":39},[118,134294,134295],{"class":120,"line":121},[118,134296,134297],{"class":187},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[118,134299,134300,134303],{"class":120,"line":40},[118,134301,134302],{"class":1967},".icon",[118,134304,15577],{"class":128},[118,134306,134307,134309,134311,134313,134315],{"class":120,"line":1183},[118,134308,70561],{"class":177},[118,134310,51430],{"class":128},[118,134312,828],{"class":177},[118,134314,51485],{"class":124},[118,134316,1294],{"class":128},[118,134318,134319,134321,134323,134325,134327],{"class":120,"line":1198},[118,134320,70781],{"class":177},[118,134322,51430],{"class":128},[118,134324,828],{"class":177},[118,134326,51485],{"class":124},[118,134328,1294],{"class":128},[118,134330,134331,134333,134335,134337,134339,134342,134344,134346],{"class":120,"line":1204},[118,134332,70604],{"class":177},[118,134334,51430],{"class":128},[118,134336,61719],{"class":177},[118,134338,129],{"class":128},[118,134340,134341],{"class":5221},"sprites.png",[118,134343,13719],{"class":128},[118,134345,61729],{"class":177},[118,134347,1294],{"class":128},[118,134349,134350,134352,134354,134356,134358,134361,134363],{"class":120,"line":1218},[118,134351,128805],{"class":177},[118,134353,51430],{"class":128},[118,134355,51756],{"class":177},[118,134357,51485],{"class":124},[118,134359,134360],{"class":177}," -20",[118,134362,51485],{"class":124},[118,134364,1294],{"class":128},[118,134366,134367],{"class":120,"line":1224},[118,134368,1569],{"class":128},[1466,134370],{"style":126401,"src":134371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[15,134373,134374],{},"在前端中坐标轴的正方向是右和下",[60,134376,134378],{"id":134377},"_123-字体图标","12.3 字体图标",[89,134380,134382],{"id":134381},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[15,134384,134385],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[15,134387,134388],{},"精灵图是有诸多优点的，但是缺点很明显。",[15,134390,134391],{},"1.图片文件还是比较大的。",[15,134393,134394],{},"2.图片本身放大和缩小会失真。",[15,134396,134397],{},"3.一旦图片制作完毕想要更换非常复杂。",[15,134399,134400,134401,25733],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[278,134402,134403],{},"字体图标 iconfont",[15,134405,134406,134409,134410,28378],{},[278,134407,134408],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[278,134411,134412],{},"展示的是图标，本质属于字体",[89,134414,134416],{"id":134415},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1135,134418,134419,134424,134427,134430,134433],{},[75,134420,134421,134423],{},[278,134422,25869],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[75,134425,134426],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[75,134428,134429],{},"兼容性：几乎支持所有的浏览器，请放心使用",[75,134431,134432],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[75,134434,134435],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[89,134437,134439],{"id":134438},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1135,134441,134442],{},[75,134443,134444,134445],{},"icomoon字体库：",[21,134446,134449],{"href":134447,"rel":134448},"http:\u002F\u002Ficomoon.io\u002F",[25],"http:\u002F\u002Ficomoon.io",[15,134451,134452],{},"进去之后点icomoon app",[1466,134454],{"style":126401,"src":134455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[15,134457,134458],{},"可以对其编辑：",[1466,134460],{"style":126401,"src":134461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[15,134463,134464],{},"生成字体：",[1466,134466],{"style":126401,"src":134467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[15,134469,134470],{},"下载：",[1466,134472],{"style":126401,"src":134473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1135,134475,134476],{},[75,134477,134478,134479],{},"阿里iconfont字体库： ",[21,134480,134481],{"href":134481,"rel":134482},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25],[89,134484,134486],{"id":134485},"_1234-字体图标的引入","12.3.4 字体图标的引入",[72,134488,134489],{},[75,134490,134491,134492,134495],{},"把下载包里面的 ",[278,134493,134494],{},"fonts"," 文件夹放入页面根目录下",[1466,134497],{"style":126401,"src":134498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[72,134500,134501],{"start":40},[75,134502,134503],{},"字体文件格式",[266,134505,134506,134515],{},[269,134507,134508],{},[272,134509,134510,134513],{},[275,134511,134512],{"align":23741},"格式",[275,134514,23745],{"align":23741},[313,134516,134517,134527,134537,134547],{},[272,134518,134519,134524],{},[318,134520,134521],{"align":23741},[278,134522,134523],{},".ttf",[318,134525,134526],{"align":23741},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[272,134528,134529,134534],{},[318,134530,134531],{"align":23741},[278,134532,134533],{},".woff",[318,134535,134536],{"align":23741},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[272,134538,134539,134544],{},[318,134540,134541],{"align":23741},[278,134542,134543],{},".eot",[318,134545,134546],{"align":23741},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[272,134548,134549,134554],{},[318,134550,134551],{"align":23741},[278,134552,134553],{},"svg",[318,134555,134556],{"align":23741},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[72,134558,134559],{"start":1183},[75,134560,134561],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[109,134563,134565],{"className":126545,"code":134564,"language":126547,"meta":39,"style":39},"\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",[115,134566,134567,134572,134579,134591,134607,134632,134653,134673,134693,134697,134703,134713,134724],{"__ignoreMap":39},[118,134568,134569],{"class":120,"line":121},[118,134570,134571],{"class":187},"\u002F* 引入字体图标 *\u002F\n",[118,134573,134574,134577],{"class":120,"line":40},[118,134575,134576],{"class":124},"@font-face",[118,134578,15577],{"class":128},[118,134580,134581,134584,134586,134589],{"class":120,"line":1183},[118,134582,134583],{"class":177},"  font-family",[118,134585,51430],{"class":128},[118,134587,134588],{"class":233},"'icomoon'",[118,134590,1294],{"class":128},[118,134592,134593,134596,134598,134600,134602,134605],{"class":120,"line":1198},[118,134594,134595],{"class":177},"  src",[118,134597,51430],{"class":128},[118,134599,61719],{"class":177},[118,134601,129],{"class":128},[118,134603,134604],{"class":233},"'fonts\u002Ficomoon.eot'",[118,134606,2723],{"class":128},[118,134608,134609,134611,134613,134615,134617,134620,134622,134625,134627,134630],{"class":120,"line":1204},[118,134610,134595],{"class":177},[118,134612,51430],{"class":128},[118,134614,61719],{"class":177},[118,134616,129],{"class":128},[118,134618,134619],{"class":233},"'fonts\u002Ficomoon.eot?#iefix'",[118,134621,13719],{"class":128},[118,134623,134624],{"class":177},"format",[118,134626,129],{"class":128},[118,134628,134629],{"class":233},"'embedded-opentype'",[118,134631,38040],{"class":128},[118,134633,134634,134637,134639,134642,134644,134646,134648,134651],{"class":120,"line":1218},[118,134635,134636],{"class":177},"       url",[118,134638,129],{"class":128},[118,134640,134641],{"class":233},"'fonts\u002Ficomoon.woff'",[118,134643,13719],{"class":128},[118,134645,134624],{"class":177},[118,134647,129],{"class":128},[118,134649,134650],{"class":233},"'woff'",[118,134652,38040],{"class":128},[118,134654,134655,134657,134659,134662,134664,134666,134668,134671],{"class":120,"line":1224},[118,134656,134636],{"class":177},[118,134658,129],{"class":128},[118,134660,134661],{"class":233},"'fonts\u002Ficomoon.ttf'",[118,134663,13719],{"class":128},[118,134665,134624],{"class":177},[118,134667,129],{"class":128},[118,134669,134670],{"class":233},"'truetype'",[118,134672,38040],{"class":128},[118,134674,134675,134677,134679,134682,134684,134686,134688,134691],{"class":120,"line":1315},[118,134676,134636],{"class":177},[118,134678,129],{"class":128},[118,134680,134681],{"class":233},"'fonts\u002Ficomoon.svg#icomoon'",[118,134683,13719],{"class":128},[118,134685,134624],{"class":177},[118,134687,129],{"class":128},[118,134689,134690],{"class":233},"'svg'",[118,134692,2723],{"class":128},[118,134694,134695],{"class":120,"line":1321},[118,134696,1569],{"class":128},[118,134698,134699,134701],{"class":120,"line":1333},[118,134700,134302],{"class":1967},[118,134702,15577],{"class":128},[118,134704,134705,134707,134709,134711],{"class":120,"line":1616},[118,134706,134583],{"class":177},[118,134708,51430],{"class":128},[118,134710,134588],{"class":233},[118,134712,1294],{"class":128},[118,134714,134715,134718,134720,134722],{"class":120,"line":1621},[118,134716,134717],{"class":177},"  font-style",[118,134719,51430],{"class":128},[118,134721,63834],{"class":177},[118,134723,1294],{"class":128},[118,134725,134726],{"class":120,"line":1627},[118,134727,1569],{"class":128},[15,134729,134730],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1466,134732],{"style":126401,"src":134733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[72,134735,134736],{"start":1198},[75,134737,134738],{},"添加字体",[1466,134740],{"style":126401,"src":134741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[15,134743,134744],{},"复制：",[1466,134746],{"style":126401,"src":134747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[15,134749,134750],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[72,134752,134753],{"start":1204},[75,134754,134755],{},"代码展示：",[109,134757,134758],{"className":126545,"code":134564,"language":126547,"meta":39,"style":39},[115,134759,134760,134764,134770,134780,134794,134816,134834,134852,134870,134874,134880,134890,134900],{"__ignoreMap":39},[118,134761,134762],{"class":120,"line":121},[118,134763,134571],{"class":187},[118,134765,134766,134768],{"class":120,"line":40},[118,134767,134576],{"class":124},[118,134769,15577],{"class":128},[118,134771,134772,134774,134776,134778],{"class":120,"line":1183},[118,134773,134583],{"class":177},[118,134775,51430],{"class":128},[118,134777,134588],{"class":233},[118,134779,1294],{"class":128},[118,134781,134782,134784,134786,134788,134790,134792],{"class":120,"line":1198},[118,134783,134595],{"class":177},[118,134785,51430],{"class":128},[118,134787,61719],{"class":177},[118,134789,129],{"class":128},[118,134791,134604],{"class":233},[118,134793,2723],{"class":128},[118,134795,134796,134798,134800,134802,134804,134806,134808,134810,134812,134814],{"class":120,"line":1204},[118,134797,134595],{"class":177},[118,134799,51430],{"class":128},[118,134801,61719],{"class":177},[118,134803,129],{"class":128},[118,134805,134619],{"class":233},[118,134807,13719],{"class":128},[118,134809,134624],{"class":177},[118,134811,129],{"class":128},[118,134813,134629],{"class":233},[118,134815,38040],{"class":128},[118,134817,134818,134820,134822,134824,134826,134828,134830,134832],{"class":120,"line":1218},[118,134819,134636],{"class":177},[118,134821,129],{"class":128},[118,134823,134641],{"class":233},[118,134825,13719],{"class":128},[118,134827,134624],{"class":177},[118,134829,129],{"class":128},[118,134831,134650],{"class":233},[118,134833,38040],{"class":128},[118,134835,134836,134838,134840,134842,134844,134846,134848,134850],{"class":120,"line":1224},[118,134837,134636],{"class":177},[118,134839,129],{"class":128},[118,134841,134661],{"class":233},[118,134843,13719],{"class":128},[118,134845,134624],{"class":177},[118,134847,129],{"class":128},[118,134849,134670],{"class":233},[118,134851,38040],{"class":128},[118,134853,134854,134856,134858,134860,134862,134864,134866,134868],{"class":120,"line":1315},[118,134855,134636],{"class":177},[118,134857,129],{"class":128},[118,134859,134681],{"class":233},[118,134861,13719],{"class":128},[118,134863,134624],{"class":177},[118,134865,129],{"class":128},[118,134867,134690],{"class":233},[118,134869,2723],{"class":128},[118,134871,134872],{"class":120,"line":1321},[118,134873,1569],{"class":128},[118,134875,134876,134878],{"class":120,"line":1333},[118,134877,134302],{"class":1967},[118,134879,15577],{"class":128},[118,134881,134882,134884,134886,134888],{"class":120,"line":1616},[118,134883,134583],{"class":177},[118,134885,51430],{"class":128},[118,134887,134588],{"class":233},[118,134889,1294],{"class":128},[118,134891,134892,134894,134896,134898],{"class":120,"line":1621},[118,134893,134717],{"class":177},[118,134895,51430],{"class":128},[118,134897,63834],{"class":177},[118,134899,1294],{"class":128},[118,134901,134902],{"class":120,"line":1627},[118,134903,1569],{"class":128},[1466,134905],{"style":126401,"src":134906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[15,134908,134909],{},"更加细节展示：",[72,134911,134912],{},[75,134913,134914],{},"html 标签内添加小图标",[1466,134916],{"style":126401,"src":134917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[72,134919,134920],{"start":40},[75,134921,134922],{},"给标签定义字体",[109,134924,134925],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,134926,134927,134931,134945,134949],{"__ignoreMap":39},[118,134928,134929],{"class":120,"line":121},[118,134930,130656],{"class":187},[118,134932,134933,134935,134937,134939,134941,134943],{"class":120,"line":40},[118,134934,1038],{"class":128},[118,134936,51604],{"class":51293},[118,134938,53479],{"class":1967},[118,134940,174],{"class":128},[118,134942,130669],{"class":233},[118,134944,51300],{"class":128},[118,134946,134947],{"class":120,"line":1183},[118,134948,130676],{"class":128},[118,134950,134951,134953,134955],{"class":120,"line":1198},[118,134952,51778],{"class":128},[118,134954,51604],{"class":51293},[118,134956,51300],{"class":128},[15,134958,134959],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1466,134961],{"style":126401,"src":134962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[89,134964,134966],{"id":134965},"_1235-字体图标的追加","12.3.5 字体图标的追加",[15,134968,134969],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[15,134971,134972,134973,134976],{},"把压缩包里面的 ",[278,134974,134975],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[15,134978,134979],{},"打开网站，点下方：",[1466,134981],{"style":126401,"src":134982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1466,134984],{"style":126401,"src":134985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1466,134987],{"style":126401,"src":134988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[15,134990,134991],{},"点yes重新加载",[15,134993,134994],{},"然后重复之前的操作就可以实现了",[15,134996,134997],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[89,134999,135001],{"id":135000},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1466,135003],{"style":126401,"src":135004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5131,135006,135007],{},"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":39,"searchDepth":40,"depth":40,"links":135009},[135010,135016,135021],{"id":133613,"depth":40,"text":133614,"children":135011},[135012,135013,135014,135015],{"id":133625,"depth":1183,"text":133626},{"id":133654,"depth":1183,"text":133655},{"id":133682,"depth":1183,"text":133683},{"id":133740,"depth":1183,"text":133741},{"id":134212,"depth":40,"text":134213,"children":135017},[135018,135019,135020],{"id":134216,"depth":1183,"text":134217},{"id":134261,"depth":1183,"text":134262},{"id":134277,"depth":1183,"text":134278},{"id":134377,"depth":40,"text":134378,"children":135022},[135023,135024,135025,135026,135027,135028],{"id":134381,"depth":1183,"text":134382},{"id":134415,"depth":1183,"text":134416},{"id":134438,"depth":1183,"text":134439},{"id":134485,"depth":1183,"text":134486},{"id":134965,"depth":1183,"text":134966},{"id":135000,"depth":1183,"text":135001},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133605,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135035,"title":135036,"body":135037,"description":42,"extension":43,"meta":136264,"navigation":45,"path":136265,"seo":136266,"stem":136267,"__hash__":136268},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135038,"toc":136245},[135039,135042,135046,135049,135063,135131,135161,135164,135168,135172,135274,135321,135325,135328,135331,135365,135368,135371,135374,135377,135380,135383,135386,135388,135391,135394,135397,135400,135403,135406,135409,135437,135440,135444,135447,135454,135457,135460,135486,135489,135493,135496,135499,135506,135510,135513,135515,135547,135550,135553,135565,135571,135574,135577,135580,135582,135586,135589,135592,135595,135640,135644,135646,135649,135656,135698,135701,135705,135710,135724,135728,135731,135734,135737,135740,135743,135777,135780,135783,135837,135840,135843,135846,135849,135901,135904,135907,135956,135960,135962,135965,135968,135971,135974,135977,136035,136038,136044,136047,136050,136082,136085,136089,136093,136096,136128,136132,136135,136179,136183,136186,136189,136192,136195,136198,136201,136204,136206,136209,136211,136214,136217,136220,136223,136228,136231,136233,136236,136239,136242],[10,135040,135036],{"id":135041},"_13-界面样式与布局技巧",[60,135043,135045],{"id":135044},"_131-css三角","13.1 css三角",[15,135047,135048],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1135,135050,135051,135054,135057,135060],{},[75,135052,135053],{},"用css 边框可以模拟三角效果",[75,135055,135056],{},"宽度高度为0",[75,135058,135059],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[75,135061,135062],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[109,135064,135066],{"className":126545,"code":135065,"language":126547,"meta":39,"style":39},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[115,135067,135068,135073,135080,135090,135100,135116,135127],{"__ignoreMap":39},[118,135069,135070],{"class":120,"line":121},[118,135071,135072],{"class":187},"\u002F* CSS 实现三角形 *\u002F\n",[118,135074,135075,135078],{"class":120,"line":40},[118,135076,135077],{"class":1967},".triangle",[118,135079,15577],{"class":128},[118,135081,135082,135084,135086,135088],{"class":120,"line":1183},[118,135083,70561],{"class":177},[118,135085,51430],{"class":128},[118,135087,320],{"class":177},[118,135089,1294],{"class":128},[118,135091,135092,135094,135096,135098],{"class":120,"line":1198},[118,135093,70781],{"class":177},[118,135095,51430],{"class":128},[118,135097,320],{"class":177},[118,135099,1294],{"class":128},[118,135101,135102,135104,135106,135108,135110,135112,135114],{"class":120,"line":1204},[118,135103,70889],{"class":177},[118,135105,51430],{"class":128},[118,135107,574],{"class":177},[118,135109,51485],{"class":124},[118,135111,51514],{"class":177},[118,135113,63984],{"class":177},[118,135115,1294],{"class":128},[118,135117,135118,135121,135123,135125],{"class":120,"line":1218},[118,135119,135120],{"class":177},"  border-bottom-color",[118,135122,51430],{"class":128},[118,135124,62362],{"class":177},[118,135126,1294],{"class":128},[118,135128,135129],{"class":120,"line":1224},[118,135130,1569],{"class":128},[109,135132,135133],{"className":126545,"code":130702,"language":126547,"meta":39,"style":39},[115,135134,135135,135141,135157],{"__ignoreMap":39},[118,135136,135137,135139],{"class":120,"line":121},[118,135138,51604],{"class":51293},[118,135140,15577],{"class":128},[118,135142,135143,135145,135147,135149,135151,135153,135155],{"class":120,"line":40},[118,135144,70889],{"class":177},[118,135146,51430],{"class":128},[118,135148,346],{"class":177},[118,135150,51485],{"class":124},[118,135152,51514],{"class":177},[118,135154,129937],{"class":177},[118,135156,1294],{"class":128},[118,135158,135159],{"class":120,"line":1183},[118,135160,1569],{"class":128},[1466,135162],{"style":126401,"src":135163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[60,135165,135167],{"id":135166},"_132-css用户界面样式","13.2 css用户界面样式",[89,135169,135171],{"id":135170},"_1321-鼠标样式","13.2.1 鼠标样式",[109,135173,135175],{"className":126545,"code":135174,"language":126547,"meta":39,"style":39},"\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",[115,135176,135177,135182,135201,135219,135238,135255],{"__ignoreMap":39},[118,135178,135179],{"class":120,"line":121},[118,135180,135181],{"class":187},"\u002F* 鼠标样式 *\u002F\n",[118,135183,135184,135186,135188,135191,135193,135195,135198],{"class":120,"line":40},[118,135185,51604],{"class":51293},[118,135187,79800],{"class":128},[118,135189,135190],{"class":177},"cursor",[118,135192,51430],{"class":128},[118,135194,62023],{"class":177},[118,135196,135197],{"class":128},"; }   ",[118,135199,135200],{"class":187},"\u002F* 手型 *\u002F\n",[118,135202,135203,135205,135207,135209,135211,135214,135216],{"class":120,"line":1183},[118,135204,51604],{"class":51293},[118,135206,79800],{"class":128},[118,135208,135190],{"class":177},[118,135210,51430],{"class":128},[118,135212,135213],{"class":177},"default",[118,135215,135197],{"class":128},[118,135217,135218],{"class":187},"\u002F* 默认 *\u002F\n",[118,135220,135221,135223,135225,135227,135229,135232,135235],{"class":120,"line":1198},[118,135222,51604],{"class":51293},[118,135224,79800],{"class":128},[118,135226,135190],{"class":177},[118,135228,51430],{"class":128},[118,135230,135231],{"class":177},"move",[118,135233,135234],{"class":128},"; }      ",[118,135236,135237],{"class":187},"\u002F* 移动 *\u002F\n",[118,135239,135240,135242,135244,135246,135248,135250,135252],{"class":120,"line":1204},[118,135241,51604],{"class":51293},[118,135243,79800],{"class":128},[118,135245,135190],{"class":177},[118,135247,51430],{"class":128},[118,135249,5192],{"class":177},[118,135251,135234],{"class":128},[118,135253,135254],{"class":187},"\u002F* 文本 *\u002F\n",[118,135256,135257,135259,135261,135263,135265,135268,135271],{"class":120,"line":1218},[118,135258,51604],{"class":51293},[118,135260,79800],{"class":128},[118,135262,135190],{"class":177},[118,135264,51430],{"class":128},[118,135266,135267],{"class":177},"not-allowed",[118,135269,135270],{"class":128},"; } ",[118,135272,135273],{"class":187},"\u002F* 禁止 *\u002F\n",[266,135275,135276,135284],{},[269,135277,135278],{},[272,135279,135280,135282],{},[275,135281,127009],{"align":23741},[275,135283,27482],{"align":23741},[313,135285,135286,135293,135300,135307,135314],{},[272,135287,135288,135290],{},[318,135289,135213],{"align":23741},[318,135291,135292],{"align":23741},"小白 默认",[272,135294,135295,135297],{},[318,135296,62023],{"align":23741},[318,135298,135299],{"align":23741},"小手",[272,135301,135302,135304],{},[318,135303,135231],{"align":23741},[318,135305,135306],{"align":23741},"移动",[272,135308,135309,135311],{},[318,135310,5192],{"align":23741},[318,135312,135313],{"align":23741},"文本",[272,135315,135316,135318],{},[318,135317,135267],{"align":23741},[318,135319,135320],{"align":23741},"禁止",[89,135322,135324],{"id":135323},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[15,135326,135327],{},"去除表单轮廓线",[15,135329,135330],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[109,135332,135333],{"className":126545,"code":129909,"language":126547,"meta":39,"style":39},[115,135334,135335,135339,135345,135361],{"__ignoreMap":39},[118,135336,135337],{"class":120,"line":121},[118,135338,129916],{"class":187},[118,135340,135341,135343],{"class":120,"line":40},[118,135342,51604],{"class":51293},[118,135344,15577],{"class":128},[118,135346,135347,135349,135351,135353,135355,135357,135359],{"class":120,"line":1183},[118,135348,70889],{"class":177},[118,135350,51430],{"class":128},[118,135352,346],{"class":177},[118,135354,51485],{"class":124},[118,135356,51514],{"class":177},[118,135358,129937],{"class":177},[118,135360,1294],{"class":128},[118,135362,135363],{"class":120,"line":1198},[118,135364,1569],{"class":128},[15,135366,135367],{},"文本域：",[1466,135369],{"style":126401,"src":135370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[15,135372,135373],{},"此时会有一个空白区域",[1466,135375],{"style":126401,"src":135376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[15,135378,135379],{},"写在同一行就不会出现这个问题",[1466,135381],{"style":126401,"src":135382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[15,135384,135385],{},"文本域是行内块元素，一定记住！！！",[15,135387,98226],{},[1466,135389],{"style":126401,"src":135390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[15,135392,135393],{},"文本域尽量放在一行",[15,135395,135396],{},"知识回顾：cols是列，rols是行",[1466,135398],{"style":126401,"src":135399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[15,135401,135402],{},"它可以进行拖动，显然这是我们不愿意看到的",[1466,135404],{"style":126401,"src":135405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[15,135407,135408],{},"使用resize进行解决",[109,135410,135412],{"className":126545,"code":135411,"language":126547,"meta":39,"style":39},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[115,135413,135414,135420,135433],{"__ignoreMap":39},[118,135415,135416,135418],{"class":120,"line":121},[118,135417,53814],{"class":51293},[118,135419,15577],{"class":128},[118,135421,135422,135424,135426,135428,135430],{"class":120,"line":40},[118,135423,70791],{"class":177},[118,135425,51430],{"class":128},[118,135427,54730],{"class":177},[118,135429,130408],{"class":128},[118,135431,135432],{"class":187},"\u002F* 取消表单轮廓线 *\u002F\n",[118,135434,135435],{"class":120,"line":1183},[118,135436,1569],{"class":128},[15,135438,135439],{},"此时就无法通过右下方实现拖动了",[89,135441,135443],{"id":135442},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[15,135445,135446],{},"实现一个盒子中的文字和图片对齐",[15,135448,135449,135450,135453],{},"用于设置一个元素的 ",[278,135451,135452],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[15,135455,135456],{},"图片和文字默认是基线对齐",[1466,135458],{"style":126401,"src":135459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[109,135461,135462],{"className":126545,"code":135411,"language":126547,"meta":39,"style":39},[115,135463,135464,135470,135482],{"__ignoreMap":39},[118,135465,135466,135468],{"class":120,"line":121},[118,135467,53814],{"class":51293},[118,135469,15577],{"class":128},[118,135471,135472,135474,135476,135478,135480],{"class":120,"line":40},[118,135473,70791],{"class":177},[118,135475,51430],{"class":128},[118,135477,54730],{"class":177},[118,135479,130408],{"class":128},[118,135481,135432],{"class":187},[118,135483,135484],{"class":120,"line":1183},[118,135485,1569],{"class":128},[1466,135487],{"style":126401,"src":135488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22003,135490,135492],{"id":135491},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[15,135494,135495],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1466,135497],{"style":126401,"src":135498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[15,135500,135501,135502,135505],{},"此时可以给图片、表单这些行内块元素的 ",[278,135503,135504],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22003,135507,135509],{"id":135508},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[15,135511,135512],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[15,135514,14638],{},[109,135516,135518],{"className":126545,"code":135517,"language":126547,"meta":39,"style":39},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[115,135519,135520,135525,135531,135543],{"__ignoreMap":39},[118,135521,135522],{"class":120,"line":121},[118,135523,135524],{"class":187},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[118,135526,135527,135529],{"class":120,"line":40},[118,135528,1466],{"class":51293},[118,135530,15577],{"class":128},[118,135532,135533,135536,135538,135541],{"class":120,"line":1183},[118,135534,135535],{"class":177},"  vertical-align",[118,135537,51430],{"class":128},[118,135539,135540],{"class":177},"middle",[118,135542,1294],{"class":128},[118,135544,135545],{"class":120,"line":1198},[118,135546,1569],{"class":128},[1466,135548],{"style":126401,"src":135549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[15,135551,135552],{},"主要解决方法有两种：",[72,135554,135555],{},[75,135556,135557,135560,135561,135564],{},[278,135558,135559],{},"给图片"," 添加 ",[278,135562,135563],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[15,135566,135567,135568],{},"2.把图片转换为块级元素 ",[278,135569,135570],{},"display: block",[15,135572,135573],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[15,135575,135576],{},"img {",[15,135578,135579],{},"vertical-align:middle;",[15,135581,1074],{},[89,135583,135585],{"id":135584},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[15,135587,135588],{},"效果：",[1466,135590],{"style":126401,"src":135591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[15,135593,135594],{},"单行文本溢出显示省略号--必须满足三个条件：",[109,135596,135598],{"className":126545,"code":135597,"language":126547,"meta":39,"style":39},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[115,135599,135600,135605,135611,135621,135626,135636],{"__ignoreMap":39},[118,135601,135602],{"class":120,"line":121},[118,135603,135604],{"class":187},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[118,135606,135607,135609],{"class":120,"line":40},[118,135608,1466],{"class":51293},[118,135610,15577],{"class":128},[118,135612,135613,135615,135617,135619],{"class":120,"line":1183},[118,135614,135535],{"class":177},[118,135616,51430],{"class":128},[118,135618,135540],{"class":177},[118,135620,1294],{"class":128},[118,135622,135623],{"class":120,"line":1198},[118,135624,135625],{"class":187},"  \u002F* 或 *\u002F\n",[118,135627,135628,135630,135632,135634],{"class":120,"line":1204},[118,135629,128161],{"class":177},[118,135631,51430],{"class":128},[118,135633,60862],{"class":177},[118,135635,1294],{"class":128},[118,135637,135638],{"class":120,"line":1218},[118,135639,1569],{"class":128},[89,135641,135643],{"id":135642},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[15,135645,135588],{},[1466,135647],{"style":126401,"src":135648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[15,135650,135651,135652,135655],{},"多行文本溢出显示省略号， ",[278,135653,135654],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[109,135657,135658],{"className":126545,"code":135597,"language":126547,"meta":39,"style":39},[115,135659,135660,135664,135670,135680,135684,135694],{"__ignoreMap":39},[118,135661,135662],{"class":120,"line":121},[118,135663,135604],{"class":187},[118,135665,135666,135668],{"class":120,"line":40},[118,135667,1466],{"class":51293},[118,135669,15577],{"class":128},[118,135671,135672,135674,135676,135678],{"class":120,"line":1183},[118,135673,135535],{"class":177},[118,135675,51430],{"class":128},[118,135677,135540],{"class":177},[118,135679,1294],{"class":128},[118,135681,135682],{"class":120,"line":1198},[118,135683,135625],{"class":187},[118,135685,135686,135688,135690,135692],{"class":120,"line":1204},[118,135687,128161],{"class":177},[118,135689,51430],{"class":128},[118,135691,60862],{"class":177},[118,135693,1294],{"class":128},[118,135695,135696],{"class":120,"line":1218},[118,135697,1569],{"class":128},[15,135699,135700],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[60,135702,135704],{"id":135703},"_133-常见布局技巧","13.3 常见布局技巧",[15,135706,135707],{},[278,135708,135709],{},"巧妙利用一个技术更快更好的布局：",[72,135711,135712,135715,135718,135721],{},[75,135713,135714],{},"margin负值的运用",[75,135716,135717],{},"文字围绕浮动元素",[75,135719,135720],{},"行内块的巧妙运用",[75,135722,135723],{},"CSS三角强化",[89,135725,135727],{"id":135726},"_1331-margin负值的运用","13.3.1 margin负值的运用",[15,135729,135730],{},"应用场景：",[1466,135732],{"style":126401,"src":135733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1466,135735],{"style":126401,"src":135736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[15,135738,135739],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[15,135741,135742],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[109,135744,135745],{"className":126545,"code":129909,"language":126547,"meta":39,"style":39},[115,135746,135747,135751,135757,135773],{"__ignoreMap":39},[118,135748,135749],{"class":120,"line":121},[118,135750,129916],{"class":187},[118,135752,135753,135755],{"class":120,"line":40},[118,135754,51604],{"class":51293},[118,135756,15577],{"class":128},[118,135758,135759,135761,135763,135765,135767,135769,135771],{"class":120,"line":1183},[118,135760,70889],{"class":177},[118,135762,51430],{"class":128},[118,135764,346],{"class":177},[118,135766,51485],{"class":124},[118,135768,51514],{"class":177},[118,135770,129937],{"class":177},[118,135772,1294],{"class":128},[118,135774,135775],{"class":120,"line":1198},[118,135776,1569],{"class":128},[1466,135778],{"style":126401,"src":135779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[15,135781,135782],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[109,135784,135786],{"className":126545,"code":135785,"language":126547,"meta":39,"style":39},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[115,135787,135788,135793,135799,135809,135821,135833],{"__ignoreMap":39},[118,135789,135790],{"class":120,"line":121},[118,135791,135792],{"class":187},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[118,135794,135795,135797],{"class":120,"line":40},[118,135796,130393],{"class":1967},[118,135798,15577],{"class":128},[118,135800,135801,135803,135805,135807],{"class":120,"line":1183},[118,135802,132351],{"class":177},[118,135804,51430],{"class":128},[118,135806,54757],{"class":177},[118,135808,1294],{"class":128},[118,135810,135811,135813,135815,135817,135819],{"class":120,"line":1198},[118,135812,132365],{"class":177},[118,135814,51430],{"class":128},[118,135816,574],{"class":177},[118,135818,51485],{"class":124},[118,135820,1294],{"class":128},[118,135822,135823,135825,135827,135829,135831],{"class":120,"line":1204},[118,135824,132382],{"class":177},[118,135826,51430],{"class":128},[118,135828,828],{"class":177},[118,135830,51485],{"class":124},[118,135832,1294],{"class":128},[118,135834,135835],{"class":120,"line":1218},[118,135836,1569],{"class":128},[15,135838,135839],{},"加上上述代码会发现：",[1466,135841],{"style":126401,"src":135842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[15,135844,135845],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[15,135847,135848],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[109,135850,135851],{"className":126545,"code":135785,"language":126547,"meta":39,"style":39},[115,135852,135853,135857,135863,135873,135885,135897],{"__ignoreMap":39},[118,135854,135855],{"class":120,"line":121},[118,135856,135792],{"class":187},[118,135858,135859,135861],{"class":120,"line":40},[118,135860,130393],{"class":1967},[118,135862,15577],{"class":128},[118,135864,135865,135867,135869,135871],{"class":120,"line":1183},[118,135866,132351],{"class":177},[118,135868,51430],{"class":128},[118,135870,54757],{"class":177},[118,135872,1294],{"class":128},[118,135874,135875,135877,135879,135881,135883],{"class":120,"line":1198},[118,135876,132365],{"class":177},[118,135878,51430],{"class":128},[118,135880,574],{"class":177},[118,135882,51485],{"class":124},[118,135884,1294],{"class":128},[118,135886,135887,135889,135891,135893,135895],{"class":120,"line":1204},[118,135888,132382],{"class":177},[118,135890,51430],{"class":128},[118,135892,828],{"class":177},[118,135894,51485],{"class":124},[118,135896,1294],{"class":128},[118,135898,135899],{"class":120,"line":1218},[118,135900,1569],{"class":128},[15,135902,135903],{},"解决方式2：",[15,135905,135906],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[109,135908,135910],{"className":126545,"code":135909,"language":126547,"meta":39,"style":39},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[115,135911,135912,135918,135928,135940,135952],{"__ignoreMap":39},[118,135913,135914,135916],{"class":120,"line":121},[118,135915,51604],{"class":51293},[118,135917,15577],{"class":128},[118,135919,135920,135922,135924,135926],{"class":120,"line":40},[118,135921,132351],{"class":177},[118,135923,51430],{"class":128},[118,135925,54757],{"class":177},[118,135927,1294],{"class":128},[118,135929,135930,135932,135934,135936,135938],{"class":120,"line":1183},[118,135931,132365],{"class":177},[118,135933,51430],{"class":128},[118,135935,574],{"class":177},[118,135937,51485],{"class":124},[118,135939,1294],{"class":128},[118,135941,135942,135944,135946,135948,135950],{"class":120,"line":1198},[118,135943,132382],{"class":177},[118,135945,51430],{"class":128},[118,135947,828],{"class":177},[118,135949,51485],{"class":124},[118,135951,1294],{"class":128},[118,135953,135954],{"class":120,"line":1204},[118,135955,1569],{"class":128},[89,135957,135959],{"id":135958},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[15,135961,135730],{},[1466,135963],{"style":126401,"src":135964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[15,135966,135967],{},"实现结构图：",[1466,135969],{"style":126401,"src":135970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[15,135972,135973],{},"巧妙运用浮动元素不会压住文字的特性",[15,135975,135976],{},"代码显示：",[109,135978,135980],{"className":126545,"code":135979,"language":126547,"meta":39,"style":39},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[115,135981,135982,135988,135998,136002,136007,136011,136017,136031],{"__ignoreMap":39},[118,135983,135984,135986],{"class":120,"line":121},[118,135985,130393],{"class":1967},[118,135987,15577],{"class":128},[118,135989,135990,135992,135994,135996],{"class":120,"line":40},[118,135991,131025],{"class":177},[118,135993,51430],{"class":128},[118,135995,23741],{"class":177},[118,135997,1294],{"class":128},[118,135999,136000],{"class":120,"line":1183},[118,136001,1569],{"class":128},[118,136003,136004],{"class":120,"line":1198},[118,136005,136006],{"class":128},"```Css\n",[118,136008,136009],{"class":120,"line":1204},[118,136010,130388],{"class":187},[118,136012,136013,136015],{"class":120,"line":1218},[118,136014,130393],{"class":1967},[118,136016,15577],{"class":128},[118,136018,136019,136021,136023,136025,136027,136029],{"class":120,"line":1224},[118,136020,70463],{"class":177},[118,136022,51430],{"class":128},[118,136024,320],{"class":177},[118,136026,51549],{"class":177},[118,136028,130408],{"class":128},[118,136030,130411],{"class":187},[118,136032,136033],{"class":120,"line":1315},[118,136034,1569],{"class":128},[15,136036,136037],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[109,136039,136042],{"className":136040,"code":136041,"language":5192},[5190],"\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",[115,136043,136041],{"__ignoreMap":39},[1466,136045],{"style":126401,"src":136046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[15,136048,136049],{},"最终展示结果：",[109,136051,136052],{"className":126545,"code":130381,"language":126547,"meta":39,"style":39},[115,136053,136054,136058,136064,136078],{"__ignoreMap":39},[118,136055,136056],{"class":120,"line":121},[118,136057,130388],{"class":187},[118,136059,136060,136062],{"class":120,"line":40},[118,136061,130393],{"class":1967},[118,136063,15577],{"class":128},[118,136065,136066,136068,136070,136072,136074,136076],{"class":120,"line":1183},[118,136067,70463],{"class":177},[118,136069,51430],{"class":128},[118,136071,320],{"class":177},[118,136073,51549],{"class":177},[118,136075,130408],{"class":128},[118,136077,130411],{"class":187},[118,136079,136080],{"class":120,"line":1198},[118,136081,1569],{"class":128},[1466,136083],{"style":126401,"src":136084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[60,136086,136088],{"id":136087},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[89,136090,136092],{"id":136091},"_1341-原理","13.4.1 原理",[1466,136094],{"style":126401,"src":136095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[109,136097,136098],{"className":126545,"code":130381,"language":126547,"meta":39,"style":39},[115,136099,136100,136104,136110,136124],{"__ignoreMap":39},[118,136101,136102],{"class":120,"line":121},[118,136103,130388],{"class":187},[118,136105,136106,136108],{"class":120,"line":40},[118,136107,130393],{"class":1967},[118,136109,15577],{"class":128},[118,136111,136112,136114,136116,136118,136120,136122],{"class":120,"line":1183},[118,136113,70463],{"class":177},[118,136115,51430],{"class":128},[118,136117,320],{"class":177},[118,136119,51549],{"class":177},[118,136121,130408],{"class":128},[118,136123,130411],{"class":187},[118,136125,136126],{"class":120,"line":1198},[118,136127,1569],{"class":128},[89,136129,136131],{"id":136130},"_1342-实例","13.4.2 实例",[1466,136133],{"style":126401,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[109,136136,136137],{"className":126545,"code":131011,"language":126547,"meta":39,"style":39},[115,136138,136139,136145,136155,136159,136165,136175],{"__ignoreMap":39},[118,136140,136141,136143],{"class":120,"line":121},[118,136142,131018],{"class":1967},[118,136144,15577],{"class":128},[118,136146,136147,136149,136151,136153],{"class":120,"line":40},[118,136148,131025],{"class":177},[118,136150,51430],{"class":128},[118,136152,23741],{"class":177},[118,136154,1294],{"class":128},[118,136156,136157],{"class":120,"line":1183},[118,136158,1569],{"class":128},[118,136160,136161,136163],{"class":120,"line":1198},[118,136162,131040],{"class":1967},[118,136164,15577],{"class":128},[118,136166,136167,136169,136171,136173],{"class":120,"line":1204},[118,136168,131025],{"class":177},[118,136170,51430],{"class":128},[118,136172,72515],{"class":177},[118,136174,1294],{"class":128},[118,136176,136177],{"class":120,"line":1218},[118,136178,1569],{"class":128},[60,136180,136182],{"id":136181},"_135-css的初始化","13.5 css的初始化",[15,136184,136185],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[15,136187,136188],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[15,136190,136191],{},"每个网页都必须首先进行 CSS初始化。",[15,136193,136194],{},"这里我们以 京东CSS初始化代码为例。",[15,136196,136197],{},"在网页右键查看网页源代码",[15,136199,136200],{},"找到css的link引入语句",[15,136202,136203],{},"然后ctrl+f 输入body",[15,136205,77219],{},[1466,136207],{"style":126401,"src":136208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[15,136210,77242],{},[1466,136212],{"style":126401,"src":136213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[15,136215,136216],{},"③打开了网页上传压缩的代码",[1466,136218],{"style":126401,"src":136219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[15,136221,136222],{},"④从body前可以查看这个网页的初始化代码",[15,136224,136225],{},[278,136226,136227],{},"Unicode编码字体：",[15,136229,136230],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[15,136232,83200],{},[15,136234,136235],{},"黑体 \\9ED1\\4F53",[15,136237,136238],{},"宋体 \\5B8B\\4F53",[15,136240,136241],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5131,136243,136244],{},"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":39,"searchDepth":40,"depth":40,"links":136246},[136247,136248,136255,136259,136263],{"id":135044,"depth":40,"text":135045},{"id":135166,"depth":40,"text":135167,"children":136249},[136250,136251,136252,136253,136254],{"id":135170,"depth":1183,"text":135171},{"id":135323,"depth":1183,"text":135324},{"id":135442,"depth":1183,"text":135443},{"id":135584,"depth":1183,"text":135585},{"id":135642,"depth":1183,"text":135643},{"id":135703,"depth":40,"text":135704,"children":136256},[136257,136258],{"id":135726,"depth":1183,"text":135727},{"id":135958,"depth":1183,"text":135959},{"id":136087,"depth":40,"text":136088,"children":136260},[136261,136262],{"id":136091,"depth":1183,"text":136092},{"id":136130,"depth":1183,"text":136131},{"id":136181,"depth":40,"text":136182},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135036,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136270,"title":136271,"body":136272,"description":42,"extension":43,"meta":137958,"navigation":45,"path":137959,"seo":137960,"stem":137961,"__hash__":137962},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136273,"toc":137947},[136274,136277,136281,136285,136288,136295,136298,136301,136339,136342,136344,136358,136362,136371,136375,136380,136383,136386,136389,136424,136429,136432,136462,136465,136470,136473,136476,136506,136509,136563,136566,136570,136575,136587,136590,136594,136624,136627,136632,136635,136665,136668,136672,136689,136693,136697,136700,136733,136736,136740,136743,136746,136749,136752,136755,136866,136869,136872,136875,136977,136980,136984,136988,136992,136995,137035,137038,137040,137056,137060,137063,137068,137149,137152,137155,137281,137286,137289,137297,137300,137305,137390,137393,137397,137400,137403,137407,137427,137432,137516,137519,137524,137527,137530,137608,137611,137614,137617,137620,137623,137628,137631,137634,137706,137709,137714,137717,137814,137817,137823,137826,137829,137832,137835,137838,137841,137844,137847,137851,137856,137859,137892,137897,137900,137941,137944],[10,136275,136271],{"id":136276},"_14-html5与css3新特性",[60,136278,136280],{"id":136279},"_141-html5的新特性","14.1 HTML5的新特性",[89,136282,136284],{"id":136283},"_1411-基本标签","14.1.1 基本标签",[15,136286,136287],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[15,136289,136290,136291,136294],{},"这些新特性都有兼容性问题，基本是 ",[278,136292,136293],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[15,136296,136297],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[15,136299,136300],{},"现在使用的是新特性：",[1135,136302,136303,136309,136315,136321,136327,136333],{},[75,136304,136305,136308],{},[115,136306,136307],{},"\u003Cheader>"," 头部标签",[75,136310,136311,136314],{},[115,136312,136313],{},"\u003Cnav>"," 导航标签",[75,136316,136317,136320],{},[115,136318,136319],{},"\u003Carticle>"," 内容标签",[75,136322,136323,136326],{},[115,136324,136325],{},"\u003Csection>"," 定义文档某个区域",[75,136328,136329,136332],{},[115,136330,136331],{},"\u003Caside>"," 侧边栏标签",[75,136334,136335,136338],{},[115,136336,136337],{},"\u003Cfooter>"," 尾部标签",[1466,136340],{"style":126401,"src":136341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[15,136343,158],{},[1135,136345,136346,136349,136352,136355],{},[75,136347,136348],{},"这种语义化标准主要是针对搜索引擎的",[75,136350,136351],{},"这些标签页面中可以经常使用",[75,136353,136354],{},"在IE9中，需要把这些元素转换为块级元素",[75,136356,136357],{},"移动端更喜欢使用这些标签",[89,136359,136361],{"id":136360},"_1412-多媒体标签","14.1.2 多媒体标签",[15,136363,136364,136365,136367,136368,136370],{},"音频 ",[278,136366,28167],{}," 和视频 ",[278,136369,28176],{}," 两个标签",[22003,136372,136374],{"id":136373},"_14121-视频标签-video","14.1.2.1 视频标签- video",[72,136376,136377],{},[75,136378,136379],{},"支持格式：",[1466,136381],{"style":126401,"src":136382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[15,136384,136385],{},"尽量使用MP4，兼容性好",[15,136387,136388],{},"用MP4就可以",[109,136390,136392],{"className":127292,"code":136391,"language":127294,"meta":39,"style":39},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[115,136393,136394],{"__ignoreMap":39},[118,136395,136396,136398,136400,136402,136404,136407,136409,136412,136415,136418,136420,136422],{"class":120,"line":121},[118,136397,1038],{"class":128},[118,136399,28176],{"class":51293},[118,136401,55232],{"class":1967},[118,136403,174],{"class":128},[118,136405,136406],{"class":233},"\"movie.mp4\"",[118,136408,92416],{"class":1967},[118,136410,136411],{"class":1967}," autoplay",[118,136413,136414],{"class":1967}," muted",[118,136416,136417],{"class":1967}," loop",[118,136419,55307],{"class":128},[118,136421,28176],{"class":51293},[118,136423,51300],{"class":128},[72,136425,136426],{"start":40},[75,136427,136428],{},"兼容写法",[15,136430,136431],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[109,136433,136434],{"className":127292,"code":136391,"language":127294,"meta":39,"style":39},[115,136435,136436],{"__ignoreMap":39},[118,136437,136438,136440,136442,136444,136446,136448,136450,136452,136454,136456,136458,136460],{"class":120,"line":121},[118,136439,1038],{"class":128},[118,136441,28176],{"class":51293},[118,136443,55232],{"class":1967},[118,136445,174],{"class":128},[118,136447,136406],{"class":233},[118,136449,92416],{"class":1967},[118,136451,136411],{"class":1967},[118,136453,136414],{"class":1967},[118,136455,136417],{"class":1967},[118,136457,55307],{"class":128},[118,136459,28176],{"class":51293},[118,136461,51300],{"class":128},[15,136463,136464],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[72,136466,136467],{"start":1183},[75,136468,136469],{},"video常用属性",[1466,136471],{"style":126401,"src":136472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[15,136474,136475],{},"poster属性后面是跟的等待加载图片的地址",[109,136477,136478],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,136479,136480],{"__ignoreMap":39},[118,136481,136482,136484,136486,136488,136490,136492,136494,136496,136498,136500,136502,136504],{"class":120,"line":121},[118,136483,1038],{"class":128},[118,136485,1466],{"class":51293},[118,136487,55232],{"class":1967},[118,136489,174],{"class":128},[118,136491,134062],{"class":233},[118,136493,55240],{"class":1967},[118,136495,174],{"class":128},[118,136497,134069],{"class":233},[118,136499,134072],{"class":1967},[118,136501,174],{"class":128},[118,136503,134077],{"class":233},[118,136505,51300],{"class":128},[15,136507,136508],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[109,136510,136512],{"className":126545,"code":136511,"language":126547,"meta":39,"style":39},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[115,136513,136514,136519,136525,136549,136554,136559],{"__ignoreMap":39},[118,136515,136516],{"class":120,"line":121},[118,136517,136518],{"class":187},"\u002F* 2D 位移 *\u002F\n",[118,136520,136521,136523],{"class":120,"line":40},[118,136522,51604],{"class":51293},[118,136524,15577],{"class":128},[118,136526,136527,136530,136532,136535,136537,136539,136541,136543,136545,136547],{"class":120,"line":1183},[118,136528,136529],{"class":177},"  transform",[118,136531,51430],{"class":128},[118,136533,136534],{"class":177},"translate",[118,136536,129],{"class":128},[118,136538,439],{"class":177},[118,136540,51485],{"class":124},[118,136542,12440],{"class":128},[118,136544,784],{"class":177},[118,136546,51485],{"class":124},[118,136548,2723],{"class":128},[118,136550,136551],{"class":120,"line":1198},[118,136552,136553],{"class":187},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[118,136555,136556],{"class":120,"line":1204},[118,136557,136558],{"class":187},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[118,136560,136561],{"class":120,"line":1218},[118,136562,1569],{"class":128},[15,136564,136565],{},"muted:自动静音属性",[22003,136567,136569],{"id":136568},"_14122-音频标签audio","14.1.2.2 音频标签audio",[72,136571,136572],{},[75,136573,136574],{},"基本使用",[15,136576,136577,136578,136583,136584],{},"当前 ",[278,136579,136580],{},[115,136581,136582],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[278,136585,136586],{},"mp3格式",[1466,136588],{"style":126401,"src":136589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[72,136591,136592],{"start":40},[75,136593,136428],{},[109,136595,136596],{"className":127292,"code":136391,"language":127294,"meta":39,"style":39},[115,136597,136598],{"__ignoreMap":39},[118,136599,136600,136602,136604,136606,136608,136610,136612,136614,136616,136618,136620,136622],{"class":120,"line":121},[118,136601,1038],{"class":128},[118,136603,28176],{"class":51293},[118,136605,55232],{"class":1967},[118,136607,174],{"class":128},[118,136609,136406],{"class":233},[118,136611,92416],{"class":1967},[118,136613,136411],{"class":1967},[118,136615,136414],{"class":1967},[118,136617,136417],{"class":1967},[118,136619,55307],{"class":128},[118,136621,28176],{"class":51293},[118,136623,51300],{"class":128},[15,136625,136626],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[72,136628,136629],{"start":1183},[75,136630,136631],{},"常用属性",[1466,136633],{"style":126401,"src":136634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[109,136636,136637],{"className":127292,"code":136391,"language":127294,"meta":39,"style":39},[115,136638,136639],{"__ignoreMap":39},[118,136640,136641,136643,136645,136647,136649,136651,136653,136655,136657,136659,136661,136663],{"class":120,"line":121},[118,136642,1038],{"class":128},[118,136644,28176],{"class":51293},[118,136646,55232],{"class":1967},[118,136648,174],{"class":128},[118,136650,136406],{"class":233},[118,136652,92416],{"class":1967},[118,136654,136411],{"class":1967},[118,136656,136414],{"class":1967},[118,136658,136417],{"class":1967},[118,136660,55307],{"class":128},[118,136662,28176],{"class":51293},[118,136664,51300],{"class":128},[15,136666,136667],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22003,136669,136671],{"id":136670},"_14123-总结","14.1.2.3 总结",[1135,136673,136674,136677,136680,136683,136686],{},[75,136675,136676],{},"音频标签和视频标签使用方式基本一致",[75,136678,136679],{},"浏览器支持情况不同",[75,136681,136682],{},"谷歌浏览器把音频和视频自动播放禁止了",[75,136684,136685],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[75,136687,136688],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[89,136690,136692],{"id":136691},"_1413-表单元素","14.1.3 表单元素",[22003,136694,136696],{"id":136695},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1466,136698],{"style":126401,"src":136699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[109,136701,136703],{"className":127292,"code":136702,"language":127294,"meta":39,"style":39},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[115,136704,136705],{"__ignoreMap":39},[118,136706,136707,136709,136711,136713,136715,136717,136719,136721,136724,136726,136728,136731],{"class":120,"line":121},[118,136708,1038],{"class":128},[118,136710,53814],{"class":51293},[118,136712,53817],{"class":1967},[118,136714,174],{"class":128},[118,136716,62692],{"class":233},[118,136718,14925],{"class":1967},[118,136720,174],{"class":128},[118,136722,136723],{"class":233},"\"username\"",[118,136725,61013],{"class":1967},[118,136727,174],{"class":128},[118,136729,136730],{"class":233},"\"请输入用户名\"",[118,136732,51300],{"class":128},[1466,136734],{"style":126401,"src":136735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22003,136737,136739],{"id":136738},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1466,136741],{"style":126401,"src":136742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[15,136744,136745],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[15,136747,136748],{},"快捷操作：",[1466,136750],{"style":126401,"src":136751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[15,136753,136754],{},"例子1：",[109,136756,136758],{"className":127292,"code":136757,"language":127294,"meta":39,"style":39},"\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",[115,136759,136760,136783,136810,136839,136858],{"__ignoreMap":39},[118,136761,136762,136764,136766,136768,136770,136773,136776,136778,136781],{"class":120,"line":121},[118,136763,1038],{"class":128},[118,136765,66618],{"class":51293},[118,136767,66621],{"class":1967},[118,136769,174],{"class":128},[118,136771,136772],{"class":233},"\"\u002Fsubmit\"",[118,136774,136775],{"class":1967}," method",[118,136777,174],{"class":128},[118,136779,136780],{"class":233},"\"post\"",[118,136782,51300],{"class":128},[118,136784,136785,136787,136789,136791,136793,136795,136797,136799,136801,136803,136805,136808],{"class":120,"line":40},[118,136786,52137],{"class":128},[118,136788,53814],{"class":51293},[118,136790,53817],{"class":1967},[118,136792,174],{"class":128},[118,136794,62692],{"class":233},[118,136796,14925],{"class":1967},[118,136798,174],{"class":128},[118,136800,136723],{"class":233},[118,136802,61013],{"class":1967},[118,136804,174],{"class":128},[118,136806,136807],{"class":233},"\"用户名\"",[118,136809,51300],{"class":128},[118,136811,136812,136814,136816,136818,136820,136823,136825,136827,136830,136832,136834,136837],{"class":120,"line":1183},[118,136813,52137],{"class":128},[118,136815,53814],{"class":51293},[118,136817,53817],{"class":1967},[118,136819,174],{"class":128},[118,136821,136822],{"class":233},"\"password\"",[118,136824,14925],{"class":1967},[118,136826,174],{"class":128},[118,136828,136829],{"class":233},"\"pwd\"",[118,136831,61013],{"class":1967},[118,136833,174],{"class":128},[118,136835,136836],{"class":233},"\"密码\"",[118,136838,51300],{"class":128},[118,136840,136841,136843,136845,136847,136849,136851,136854,136856],{"class":120,"line":1198},[118,136842,52137],{"class":128},[118,136844,53880],{"class":51293},[118,136846,53817],{"class":1967},[118,136848,174],{"class":128},[118,136850,66641],{"class":233},[118,136852,136853],{"class":128},">提交\u003C\u002F",[118,136855,53880],{"class":51293},[118,136857,51300],{"class":128},[118,136859,136860,136862,136864],{"class":120,"line":1204},[118,136861,51778],{"class":128},[118,136863,66618],{"class":51293},[118,136865,51300],{"class":128},[1466,136867],{"style":126401,"src":136868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[15,136870,136871],{},"value是表单域的内容",[15,136873,136874],{},"例子2：",[109,136876,136877],{"className":127292,"code":136757,"language":127294,"meta":39,"style":39},[115,136878,136879,136899,136925,136951,136969],{"__ignoreMap":39},[118,136880,136881,136883,136885,136887,136889,136891,136893,136895,136897],{"class":120,"line":121},[118,136882,1038],{"class":128},[118,136884,66618],{"class":51293},[118,136886,66621],{"class":1967},[118,136888,174],{"class":128},[118,136890,136772],{"class":233},[118,136892,136775],{"class":1967},[118,136894,174],{"class":128},[118,136896,136780],{"class":233},[118,136898,51300],{"class":128},[118,136900,136901,136903,136905,136907,136909,136911,136913,136915,136917,136919,136921,136923],{"class":120,"line":40},[118,136902,52137],{"class":128},[118,136904,53814],{"class":51293},[118,136906,53817],{"class":1967},[118,136908,174],{"class":128},[118,136910,62692],{"class":233},[118,136912,14925],{"class":1967},[118,136914,174],{"class":128},[118,136916,136723],{"class":233},[118,136918,61013],{"class":1967},[118,136920,174],{"class":128},[118,136922,136807],{"class":233},[118,136924,51300],{"class":128},[118,136926,136927,136929,136931,136933,136935,136937,136939,136941,136943,136945,136947,136949],{"class":120,"line":1183},[118,136928,52137],{"class":128},[118,136930,53814],{"class":51293},[118,136932,53817],{"class":1967},[118,136934,174],{"class":128},[118,136936,136822],{"class":233},[118,136938,14925],{"class":1967},[118,136940,174],{"class":128},[118,136942,136829],{"class":233},[118,136944,61013],{"class":1967},[118,136946,174],{"class":128},[118,136948,136836],{"class":233},[118,136950,51300],{"class":128},[118,136952,136953,136955,136957,136959,136961,136963,136965,136967],{"class":120,"line":1198},[118,136954,52137],{"class":128},[118,136956,53880],{"class":51293},[118,136958,53817],{"class":1967},[118,136960,174],{"class":128},[118,136962,66641],{"class":233},[118,136964,136853],{"class":128},[118,136966,53880],{"class":51293},[118,136968,51300],{"class":128},[118,136970,136971,136973,136975],{"class":120,"line":1204},[118,136972,51778],{"class":128},[118,136974,66618],{"class":51293},[118,136976,51300],{"class":128},[1466,136978],{"style":126401,"src":136979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[60,136981,136983],{"id":136982},"_142-css新特性","14.2 CSS新特性",[89,136985,136987],{"id":136986},"_1421-新增选择器","14.2.1 新增选择器",[22003,136989,136991],{"id":136990},"_14211-属性选择器","14.2.1.1 属性选择器",[1466,136993],{"style":126401,"src":136994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[109,136996,136998],{"className":126545,"code":136997,"language":126547,"meta":39,"style":39},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[115,136999,137000,137015,137031],{"__ignoreMap":39},[118,137001,137002,137004,137006,137008,137010,137012],{"class":120,"line":121},[118,137003,53814],{"class":51293},[118,137005,1018],{"class":128},[118,137007,103100],{"class":1967},[118,137009,174],{"class":124},[118,137011,62692],{"class":233},[118,137013,137014],{"class":128},"] {\n",[118,137016,137017,137019,137021,137023,137025,137027,137029],{"class":120,"line":40},[118,137018,70889],{"class":177},[118,137020,51430],{"class":128},[118,137022,346],{"class":177},[118,137024,51485],{"class":124},[118,137026,51514],{"class":177},[118,137028,130125],{"class":177},[118,137030,1294],{"class":128},[118,137032,137033],{"class":120,"line":1183},[118,137034,1569],{"class":128},[1466,137036],{"style":126401,"src":137037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[15,137039,158],{},[1135,137041,137042,137045,137048,137051],{},[75,137043,137044],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[75,137046,137047],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[75,137049,137050],{},"属性选择器也可以选择出来自定义的属性",[75,137052,137053,137055],{},[278,137054,9030],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22003,137057,137059],{"id":137058},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1466,137061],{"style":126401,"src":137062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[72,137064,137065],{},[75,137066,137067],{},"fist-child",[109,137069,137071],{"className":126545,"code":137070,"language":126547,"meta":39,"style":39},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[115,137072,137073,137078,137093,137113,137131],{"__ignoreMap":39},[118,137074,137075],{"class":120,"line":121},[118,137076,137077],{"class":187},"\u002F* 属性选择器 *\u002F\n",[118,137079,137080,137082,137084,137086,137088,137090],{"class":120,"line":40},[118,137081,53814],{"class":51293},[118,137083,1018],{"class":128},[118,137085,103100],{"class":1967},[118,137087,174],{"class":124},[118,137089,62692],{"class":233},[118,137091,137092],{"class":128},"] { }\n",[118,137094,137095,137097,137099,137101,137104,137107,137110],{"class":120,"line":1183},[118,137096,53814],{"class":51293},[118,137098,1018],{"class":128},[118,137100,14699],{"class":1967},[118,137102,137103],{"class":124},"^=",[118,137105,137106],{"class":233},"\"icon\"",[118,137108,137109],{"class":128},"] { }  ",[118,137111,137112],{"class":187},"\u002F* 以 icon 开头 *\u002F\n",[118,137114,137115,137117,137119,137121,137124,137126,137128],{"class":120,"line":1198},[118,137116,53814],{"class":51293},[118,137118,1018],{"class":128},[118,137120,14699],{"class":1967},[118,137122,137123],{"class":124},"$=",[118,137125,137106],{"class":233},[118,137127,137109],{"class":128},[118,137129,137130],{"class":187},"\u002F* 以 icon 结尾 *\u002F\n",[118,137132,137133,137135,137137,137139,137142,137144,137146],{"class":120,"line":1204},[118,137134,53814],{"class":51293},[118,137136,1018],{"class":128},[118,137138,14699],{"class":1967},[118,137140,137141],{"class":124},"*=",[118,137143,137106],{"class":233},[118,137145,137109],{"class":128},[118,137147,137148],{"class":187},"\u002F* 包含 icon *\u002F\n",[15,137150,137151],{},"ul的第一个儿子文本为红色",[15,137153,137154],{},"一定要在冒号前加空格，不然就是选中所有的了",[109,137156,137158],{"className":126545,"code":137157,"language":126547,"meta":39,"style":39},".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",[115,137159,137160,137166,137176,137180,137184,137189,137202,137215,137231,137248,137265],{"__ignoreMap":39},[118,137161,137162,137164],{"class":120,"line":121},[118,137163,126836],{"class":1967},[118,137165,15577],{"class":128},[118,137167,137168,137170,137172,137174],{"class":120,"line":40},[118,137169,70898],{"class":177},[118,137171,51430],{"class":128},[118,137173,57414],{"class":177},[118,137175,1294],{"class":128},[118,137177,137178],{"class":120,"line":1183},[118,137179,1569],{"class":128},[118,137181,137182],{"class":120,"line":1198},[118,137183,136006],{"class":128},[118,137185,137186],{"class":120,"line":1204},[118,137187,137188],{"class":187},"\u002F* 结构伪类选择器 *\u002F\n",[118,137190,137191,137193,137196,137199],{"class":120,"line":1218},[118,137192,75],{"class":51293},[118,137194,137195],{"class":1967},":first-child",[118,137197,137198],{"class":128}," { }           ",[118,137200,137201],{"class":187},"\u002F* 第一个 *\u002F\n",[118,137203,137204,137206,137209,137212],{"class":120,"line":1224},[118,137205,75],{"class":51293},[118,137207,137208],{"class":1967},":last-child",[118,137210,137211],{"class":128}," { }            ",[118,137213,137214],{"class":187},"\u002F* 最后一个 *\u002F\n",[118,137216,137217,137219,137221,137223,137225,137228],{"class":120,"line":1315},[118,137218,75],{"class":51293},[118,137220,129459],{"class":1967},[118,137222,129],{"class":128},[118,137224,206],{"class":177},[118,137226,137227],{"class":128},") { }          ",[118,137229,137230],{"class":187},"\u002F* 第2个 *\u002F\n",[118,137232,137233,137235,137237,137239,137242,137245],{"class":120,"line":1321},[118,137234,75],{"class":51293},[118,137236,129459],{"class":1967},[118,137238,129],{"class":128},[118,137240,137241],{"class":177},"2n",[118,137243,137244],{"class":128},") { }         ",[118,137246,137247],{"class":187},"\u002F* 偶数 *\u002F\n",[118,137249,137250,137252,137254,137256,137259,137262],{"class":120,"line":1333},[118,137251,75],{"class":51293},[118,137253,129459],{"class":1967},[118,137255,129],{"class":128},[118,137257,137258],{"class":177},"2n+1",[118,137260,137261],{"class":128},") { }       ",[118,137263,137264],{"class":187},"\u002F* 奇数 *\u002F\n",[118,137266,137267,137269,137271,137273,137276,137278],{"class":120,"line":1616},[118,137268,75],{"class":51293},[118,137270,129459],{"class":1967},[118,137272,129],{"class":128},[118,137274,137275],{"class":177},"-n+3",[118,137277,137261],{"class":128},[118,137279,137280],{"class":187},"\u002F* 前3个 *\u002F\n",[51604,137282,137285],{"className":137283},[137284],"example","\n  示例内容\n",[15,137287,137288],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1135,137290,137291],{},[75,137292,137293,137296],{},[115,137294,137295],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[15,137298,137299],{},"也就是说它选择的是熊大",[72,137301,137302],{"start":1218},[75,137303,137304],{},"权重",[109,137306,137308],{"className":126545,"code":137307,"language":126547,"meta":39,"style":39},"\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",[115,137309,137310,137314,137324,137334,137348,137362,137376],{"__ignoreMap":39},[118,137311,137312],{"class":120,"line":121},[118,137313,137188],{"class":187},[118,137315,137316,137318,137320,137322],{"class":120,"line":40},[118,137317,75],{"class":51293},[118,137319,137195],{"class":1967},[118,137321,137198],{"class":128},[118,137323,137201],{"class":187},[118,137325,137326,137328,137330,137332],{"class":120,"line":1183},[118,137327,75],{"class":51293},[118,137329,137208],{"class":1967},[118,137331,137211],{"class":128},[118,137333,137214],{"class":187},[118,137335,137336,137338,137340,137342,137344,137346],{"class":120,"line":1198},[118,137337,75],{"class":51293},[118,137339,129459],{"class":1967},[118,137341,129],{"class":128},[118,137343,206],{"class":177},[118,137345,137227],{"class":128},[118,137347,137230],{"class":187},[118,137349,137350,137352,137354,137356,137358,137360],{"class":120,"line":1204},[118,137351,75],{"class":51293},[118,137353,129459],{"class":1967},[118,137355,129],{"class":128},[118,137357,137241],{"class":177},[118,137359,137244],{"class":128},[118,137361,137247],{"class":187},[118,137363,137364,137366,137368,137370,137372,137374],{"class":120,"line":1218},[118,137365,75],{"class":51293},[118,137367,129459],{"class":1967},[118,137369,129],{"class":128},[118,137371,137258],{"class":177},[118,137373,137261],{"class":128},[118,137375,137264],{"class":187},[118,137377,137378,137380,137382,137384,137386,137388],{"class":120,"line":1224},[118,137379,75],{"class":51293},[118,137381,129459],{"class":1967},[118,137383,129],{"class":128},[118,137385,137275],{"class":177},[118,137387,137261],{"class":128},[118,137389,137280],{"class":187},[15,137391,137392],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22003,137394,137396],{"id":137395},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[15,137398,137399],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1466,137401],{"style":126401,"src":137402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[72,137404,137405],{},[75,137406,158],{},[1135,137408,137409,137412,137415,137418,137421,137424],{},[75,137410,137411],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[75,137413,137414],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[75,137416,137417],{},"语法： element::before {}",[75,137419,137420],{},"before 和 after 必须有 content 属性",[75,137422,137423],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[75,137425,137426],{},"伪元素选择器和标签选择器一样，权重为 1",[72,137428,137429],{"start":40},[75,137430,137431],{},"实例",[109,137433,137434],{"className":126545,"code":137307,"language":126547,"meta":39,"style":39},[115,137435,137436,137440,137450,137460,137474,137488,137502],{"__ignoreMap":39},[118,137437,137438],{"class":120,"line":121},[118,137439,137188],{"class":187},[118,137441,137442,137444,137446,137448],{"class":120,"line":40},[118,137443,75],{"class":51293},[118,137445,137195],{"class":1967},[118,137447,137198],{"class":128},[118,137449,137201],{"class":187},[118,137451,137452,137454,137456,137458],{"class":120,"line":1183},[118,137453,75],{"class":51293},[118,137455,137208],{"class":1967},[118,137457,137211],{"class":128},[118,137459,137214],{"class":187},[118,137461,137462,137464,137466,137468,137470,137472],{"class":120,"line":1198},[118,137463,75],{"class":51293},[118,137465,129459],{"class":1967},[118,137467,129],{"class":128},[118,137469,206],{"class":177},[118,137471,137227],{"class":128},[118,137473,137230],{"class":187},[118,137475,137476,137478,137480,137482,137484,137486],{"class":120,"line":1204},[118,137477,75],{"class":51293},[118,137479,129459],{"class":1967},[118,137481,129],{"class":128},[118,137483,137241],{"class":177},[118,137485,137244],{"class":128},[118,137487,137247],{"class":187},[118,137489,137490,137492,137494,137496,137498,137500],{"class":120,"line":1218},[118,137491,75],{"class":51293},[118,137493,129459],{"class":1967},[118,137495,129],{"class":128},[118,137497,137258],{"class":177},[118,137499,137261],{"class":128},[118,137501,137264],{"class":187},[118,137503,137504,137506,137508,137510,137512,137514],{"class":120,"line":1224},[118,137505,75],{"class":51293},[118,137507,129459],{"class":1967},[118,137509,129],{"class":128},[118,137511,137275],{"class":177},[118,137513,137261],{"class":128},[118,137515,137280],{"class":187},[1466,137517],{"style":126401,"src":137518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[72,137520,137521],{"start":1183},[75,137522,137523],{},"使用场景1",[1466,137525],{"style":126401,"src":137526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[15,137528,137529],{},"不需要再加盒子来整红色那部分了",[109,137531,137533],{"className":126545,"code":137532,"language":126547,"meta":39,"style":39},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[115,137534,137535,137540,137549,137560,137570,137574,137583,137594,137604],{"__ignoreMap":39},[118,137536,137537],{"class":120,"line":121},[118,137538,137539],{"class":187},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[118,137541,137542,137544,137547],{"class":120,"line":40},[118,137543,51604],{"class":51293},[118,137545,137546],{"class":1967},"::before",[118,137548,15577],{"class":128},[118,137550,137551,137554,137556,137558],{"class":120,"line":1183},[118,137552,137553],{"class":177},"  content",[118,137555,51430],{"class":128},[118,137557,7657],{"class":233},[118,137559,1294],{"class":128},[118,137561,137562,137564,137566,137568],{"class":120,"line":1198},[118,137563,128161],{"class":177},[118,137565,51430],{"class":128},[118,137567,60862],{"class":177},[118,137569,1294],{"class":128},[118,137571,137572],{"class":120,"line":1204},[118,137573,1569],{"class":128},[118,137575,137576,137578,137581],{"class":120,"line":1218},[118,137577,51604],{"class":51293},[118,137579,137580],{"class":1967},"::after",[118,137582,15577],{"class":128},[118,137584,137585,137587,137589,137592],{"class":120,"line":1224},[118,137586,137553],{"class":177},[118,137588,51430],{"class":128},[118,137590,137591],{"class":233},"\"→\"",[118,137593,1294],{"class":128},[118,137595,137596,137598,137600,137602],{"class":120,"line":1315},[118,137597,70898],{"class":177},[118,137599,51430],{"class":128},[118,137601,62063],{"class":177},[118,137603,1294],{"class":128},[118,137605,137606],{"class":120,"line":1321},[118,137607,1569],{"class":128},[1466,137609],{"style":126401,"src":137610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[15,137612,137613],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1466,137615],{"style":126401,"src":137616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[15,137618,137619],{},"但是在引用时需要先转义一下",[15,137621,137622],{},"content='\\e930'",[72,137624,137625],{"start":1198},[75,137626,137627],{},"使用场景2",[15,137629,137630],{},"仿土豆效果",[15,137632,137633],{},"通过使用伪元素选择器可以减少body中盒子的数量",[109,137635,137636],{"className":126545,"code":137532,"language":126547,"meta":39,"style":39},[115,137637,137638,137642,137650,137660,137670,137674,137682,137692,137702],{"__ignoreMap":39},[118,137639,137640],{"class":120,"line":121},[118,137641,137539],{"class":187},[118,137643,137644,137646,137648],{"class":120,"line":40},[118,137645,51604],{"class":51293},[118,137647,137546],{"class":1967},[118,137649,15577],{"class":128},[118,137651,137652,137654,137656,137658],{"class":120,"line":1183},[118,137653,137553],{"class":177},[118,137655,51430],{"class":128},[118,137657,7657],{"class":233},[118,137659,1294],{"class":128},[118,137661,137662,137664,137666,137668],{"class":120,"line":1198},[118,137663,128161],{"class":177},[118,137665,51430],{"class":128},[118,137667,60862],{"class":177},[118,137669,1294],{"class":128},[118,137671,137672],{"class":120,"line":1204},[118,137673,1569],{"class":128},[118,137675,137676,137678,137680],{"class":120,"line":1218},[118,137677,51604],{"class":51293},[118,137679,137580],{"class":1967},[118,137681,15577],{"class":128},[118,137683,137684,137686,137688,137690],{"class":120,"line":1224},[118,137685,137553],{"class":177},[118,137687,51430],{"class":128},[118,137689,137591],{"class":233},[118,137691,1294],{"class":128},[118,137693,137694,137696,137698,137700],{"class":120,"line":1315},[118,137695,70898],{"class":177},[118,137697,51430],{"class":128},[118,137699,62063],{"class":177},[118,137701,1294],{"class":128},[118,137703,137704],{"class":120,"line":1321},[118,137705,1569],{"class":128},[1466,137707],{"style":126401,"src":137708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[72,137710,137711],{"start":1204},[75,137712,137713],{},"使用场景3",[15,137715,137716],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[109,137718,137720],{"className":126545,"code":137719,"language":126547,"meta":39,"style":39},".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",[115,137721,137722,137728,137738,137742,137746,137750,137758,137768,137778,137782,137790,137800,137810],{"__ignoreMap":39},[118,137723,137724,137726],{"class":120,"line":121},[118,137725,130393],{"class":1967},[118,137727,15577],{"class":128},[118,137729,137730,137732,137734,137736],{"class":120,"line":40},[118,137731,131025],{"class":177},[118,137733,51430],{"class":128},[118,137735,23741],{"class":177},[118,137737,1294],{"class":128},[118,137739,137740],{"class":120,"line":1183},[118,137741,1569],{"class":128},[118,137743,137744],{"class":120,"line":1198},[118,137745,136006],{"class":128},[118,137747,137748],{"class":120,"line":1204},[118,137749,137539],{"class":187},[118,137751,137752,137754,137756],{"class":120,"line":1218},[118,137753,51604],{"class":51293},[118,137755,137546],{"class":1967},[118,137757,15577],{"class":128},[118,137759,137760,137762,137764,137766],{"class":120,"line":1224},[118,137761,137553],{"class":177},[118,137763,51430],{"class":128},[118,137765,7657],{"class":233},[118,137767,1294],{"class":128},[118,137769,137770,137772,137774,137776],{"class":120,"line":1315},[118,137771,128161],{"class":177},[118,137773,51430],{"class":128},[118,137775,60862],{"class":177},[118,137777,1294],{"class":128},[118,137779,137780],{"class":120,"line":1321},[118,137781,1569],{"class":128},[118,137783,137784,137786,137788],{"class":120,"line":1333},[118,137785,51604],{"class":51293},[118,137787,137580],{"class":1967},[118,137789,15577],{"class":128},[118,137791,137792,137794,137796,137798],{"class":120,"line":1616},[118,137793,137553],{"class":177},[118,137795,51430],{"class":128},[118,137797,137591],{"class":233},[118,137799,1294],{"class":128},[118,137801,137802,137804,137806,137808],{"class":120,"line":1621},[118,137803,70898],{"class":177},[118,137805,51430],{"class":128},[118,137807,62063],{"class":177},[118,137809,1294],{"class":128},[118,137811,137812],{"class":120,"line":1627},[118,137813,1569],{"class":128},[15,137815,137816],{},"div {\nmargin: 0 auto;\n}",[109,137818,137821],{"className":137819,"code":137820,"language":5192},[5190],"\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",[115,137822,137820],{"__ignoreMap":39},[15,137824,137825],{},"如果想让多个元素都发生变化",[15,137827,137828],{},"不能如下操作：",[15,137830,137831],{},"transition: width 2s ease 0.5s;",[15,137833,137834],{},"transition: height 2s ease 0.5s;不对！！！",[15,137836,137837],{},"上方会样式冲突，导致不显示任何过渡效果",[15,137839,137840],{},"使用如下：加逗号隔开",[15,137842,137843],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[15,137845,137846],{},"transition all 2s ease;",[89,137848,137850],{"id":137849},"_1426-过渡练习","14.2.6 过渡练习",[72,137852,137853],{},[75,137854,137855],{},"进度条",[1466,137857],{"style":126401,"src":137858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[109,137860,137862],{"className":126545,"code":137861,"language":126547,"meta":39,"style":39},"div {\n  transition: all 0.3s ease;\n}\n",[115,137863,137864,137870,137888],{"__ignoreMap":39},[118,137865,137866,137868],{"class":120,"line":121},[118,137867,51604],{"class":51293},[118,137869,15577],{"class":128},[118,137871,137872,137875,137877,137879,137882,137884,137886],{"class":120,"line":40},[118,137873,137874],{"class":177},"  transition",[118,137876,51430],{"class":128},[118,137878,28114],{"class":177},[118,137880,137881],{"class":177}," 0.3",[118,137883,823],{"class":124},[118,137885,78673],{"class":177},[118,137887,1294],{"class":128},[118,137889,137890],{"class":120,"line":1183},[118,137891,1569],{"class":128},[72,137893,137894],{"start":40},[75,137895,137896],{},"小米logo",[15,137898,137899],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[109,137901,137903],{"className":126545,"code":137902,"language":126547,"meta":39,"style":39},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[115,137904,137905,137910,137916,137932,137937],{"__ignoreMap":39},[118,137906,137907],{"class":120,"line":121},[118,137908,137909],{"class":187},"\u002F* CSS3 过渡 *\u002F\n",[118,137911,137912,137914],{"class":120,"line":40},[118,137913,51604],{"class":51293},[118,137915,15577],{"class":128},[118,137917,137918,137920,137922,137924,137926,137928,137930],{"class":120,"line":1183},[118,137919,137874],{"class":177},[118,137921,51430],{"class":128},[118,137923,28114],{"class":177},[118,137925,137881],{"class":177},[118,137927,823],{"class":124},[118,137929,78673],{"class":177},[118,137931,1294],{"class":128},[118,137933,137934],{"class":120,"line":1198},[118,137935,137936],{"class":187},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[118,137938,137939],{"class":120,"line":1204},[118,137940,1569],{"class":128},[15,137942,137943],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5131,137945,137946],{},"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":39,"searchDepth":40,"depth":40,"links":137948},[137949,137954],{"id":136279,"depth":40,"text":136280,"children":137950},[137951,137952,137953],{"id":136283,"depth":1183,"text":136284},{"id":136360,"depth":1183,"text":136361},{"id":136691,"depth":1183,"text":136692},{"id":136982,"depth":40,"text":136983,"children":137955},[137956,137957],{"id":136986,"depth":1183,"text":136987},{"id":137849,"depth":1183,"text":137850},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136271,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137964,"title":137965,"body":137966,"description":42,"extension":43,"meta":139710,"navigation":45,"path":139711,"seo":139712,"stem":139713,"__hash__":139714},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137967,"toc":139691},[137968,137971,137975,137978,137984,137990,137994,137996,137999,138002,138005,138008,138011,138014,138017,138021,138025,138028,138031,138034,138038,138041,138044,138049,138052,138055,138058,138062,138065,138074,138077,138080,138084,138087,138090,138095,138102,138116,138124,138131,138136,138139,138142,138145,138152,138156,138162,138168,138171,138174,138179,138185,138187,138195,138200,138203,138209,138211,138216,138221,138224,138226,138231,138234,138239,138244,138278,138282,138286,138289,138293,138296,138382,138385,138422,138425,138461,138465,138470,138483,138537,138539,138567,138569,138597,138603,138617,138619,138663,138665,138709,138712,138719,138730,138732,138759,138761,138787,138794,138810,138812,138906,138908,139002,139009,139012,139017,139023,139097,139100,139102,139138,139140,139176,139179,139186,139205,139208,139211,139213,139238,139240,139264,139267,139270,139300,139304,139307,139370,139372,139438,139440,139504,139507,139539,139541,139567,139569,139595,139598,139629,139631,139657,139659,139685,139688],[10,137969,137965],{"id":137970},"_15-品优购项目上篇-搭建与公共模块",[60,137972,137974],{"id":137973},"_151-项目规划","15.1 项目规划",[1466,137976],{"style":126401,"src":137977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[15,137979,137980,137983],{},[278,137981,137982],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[15,137985,137986,137989],{},[278,137987,137988],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[60,137991,137993],{"id":137992},"_152-项目介绍","15.2 项目介绍",[15,137995,137982],{},[1466,137997],{"style":126401,"src":137998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[15,138000,138001],{},"主页：",[1466,138003],{"style":126401,"src":138004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[15,138006,138007],{},"列表页：",[1466,138009],{"style":126401,"src":138010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[15,138012,138013],{},"注册页：",[1466,138015],{"style":126401,"src":138016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[60,138018,138020],{"id":138019},"_153-项目搭建工作","15.3 项目搭建工作",[89,138022,138024],{"id":138023},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1466,138026],{"style":126401,"src":138027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[15,138029,138030],{},"经常更换的图片要放到upload文件夹中",[15,138032,138033],{},"不经常换的放到images文件夹中",[89,138035,138037],{"id":138036},"_1532-创建文件如下","15.3.2 创建文件如下",[1466,138039],{"style":126401,"src":138040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1466,138042],{"style":126401,"src":138043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[15,138045,138046],{},[278,138047,138048],{},"初始化样式：",[15,138050,138051],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[15,138053,138054],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[15,138056,138057],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[89,138059,138061],{"id":138060},"_1533-项目模块化开发","15.3.3 项目模块化开发",[15,138063,138064],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[15,138066,138067,138068,138073],{},"这里最典型的应用就是 ",[278,138069,138070],{},[115,138071,138072],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1466,138075],{"style":126401,"src":138076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[15,138078,138079],{},"通过link方法来引入",[89,138081,138083],{"id":138082},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1466,138085],{"style":126401,"src":138086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[15,138088,138089],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[72,138091,138092],{},[75,138093,138094],{},"制作favicon图标",[15,138096,138097,138098,138101],{},"①把品优购图标切成 ",[115,138099,138100],{},"png"," 图片",[15,138103,138104,138105,138107,138108,138111,138112],{},"②把 ",[115,138106,138100],{}," 图片转换为 ",[115,138109,138110],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[21,138113,138114],{"href":138114,"rel":138115},"http:\u002F\u002Fwww.bitbug.net\u002F",[25],[72,138117,138118,138121],{"start":40},[75,138119,138120],{},"favicon图标放到网站根目录下",[75,138122,138123],{},"HTML页面引入favicon",[15,138125,138126,138127,138130],{},"在html 页面里面的 ",[115,138128,138129],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[15,138132,138133],{},[115,138134,138135],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[15,138137,138138],{},"复制这行代码或者在生成这个的网站进行复制",[1466,138140],{"style":126401,"src":138141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[15,138143,138144],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[15,138146,138147,138148],{},"例如:",[21,138149,138150],{"href":138150,"rel":138151},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25],[89,138153,138155],{"id":138154},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[15,138157,138158,138161],{},[278,138159,138160],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[15,138163,138164,138167],{},[278,138165,138166],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[15,138169,138170],{},"页面必须有三个标签用来符合 SEO 优化",[1466,138172],{"style":126401,"src":138173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[72,138175,138176],{},[75,138177,138178],{},"title网站标题",[15,138180,138181,138184],{},[278,138182,138183],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[15,138186,68783],{},[1135,138188,138189,138192],{},[75,138190,138191],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[75,138193,138194],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[72,138196,138197],{"start":40},[75,138198,138199],{},"description网站描述",[15,138201,138202],{},"简要说明我们网站主要是做什么的",[15,138204,138205,138208],{},[278,138206,138207],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[15,138210,68783],{},[15,138212,138213],{},[115,138214,138215],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[72,138217,138218],{"start":1183},[75,138219,138220],{},"keywords关键词",[15,138222,138223],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[15,138225,68783],{},[15,138227,138228],{},[115,138229,138230],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[15,138232,138233],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[15,138235,138236],{},[278,138237,138238],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[72,138240,138241],{"start":1198},[75,138242,138243],{},"代码总结",[109,138245,138246],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,138247,138248,138252,138266,138270],{"__ignoreMap":39},[118,138249,138250],{"class":120,"line":121},[118,138251,130656],{"class":187},[118,138253,138254,138256,138258,138260,138262,138264],{"class":120,"line":40},[118,138255,1038],{"class":128},[118,138257,51604],{"class":51293},[118,138259,53479],{"class":1967},[118,138261,174],{"class":128},[118,138263,130669],{"class":233},[118,138265,51300],{"class":128},[118,138267,138268],{"class":120,"line":1183},[118,138269,130676],{"class":128},[118,138271,138272,138274,138276],{"class":120,"line":1198},[118,138273,51778],{"class":128},[118,138275,51604],{"class":51293},[118,138277,51300],{"class":128},[60,138279,138281],{"id":138280},"_154-项目公共部分制作","15.4 项目公共部分制作",[89,138283,138285],{"id":138284},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1466,138287],{"style":126401,"src":138288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[89,138290,138292],{"id":138291},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[15,138294,138295],{},"布局思路：",[1135,138297,138298,138301,138304,138326,138359],{},[75,138299,138300],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[75,138302,138303],{},"里面包含版心的盒子",[75,138305,138306,138307],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1135,138308,138309,138317,138323],{},[75,138310,138311,138312,21505,138314,138316],{},"1 号盒子 里面包含一个",[115,138313,1135],{},[115,138315,1135],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[75,138318,138319,138320,138322],{},"里面的内容是水平排列，所以需要给",[115,138321,75],{},"设置浮动",[75,138324,138325],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[75,138327,138328,138329],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1135,138330,138331,138345,138350],{},[75,138332,138333,138334,21505,138336,138338,138339,138341,138342,138344],{},"2 号盒子 里面包含一个",[115,138335,1135],{},[115,138337,1135],{},"包裹",[115,138340,75],{},"，中间的",[115,138343,1049],{},"可以用样式去设置，也可以用字符 |",[75,138346,138347,138348,138322],{},"里面内容水平排列，给",[115,138349,75],{},[75,138351,138352,138353,138355,138356,138358],{},"找到里面所有偶数的 ",[115,138354,75],{}," 设置样式（偶数的 ",[115,138357,75],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[75,138360,138361,138362],{},"需要用到字体图标",[1135,138363,138364,138370,138373,138376,138379],{},[75,138365,138366,138367],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[115,138368,138369],{},"arrow-icon",[75,138371,138372],{},"先要引入字体图片的资源",[75,138374,138375],{},"在样式里面利用 font-face 来进行声明",[75,138377,138378],{},"在伪元素的 content属性设置 图标的编码",[75,138380,138381],{},"给伪元素设置font-family属性",[15,138383,138384],{},"结构实例代码：",[109,138386,138388],{"className":126545,"code":138387,"language":126547,"meta":39,"style":39},"div::before {\n  content: \"\";\n  display: block;\n}\n",[115,138389,138390,138398,138408,138418],{"__ignoreMap":39},[118,138391,138392,138394,138396],{"class":120,"line":121},[118,138393,51604],{"class":51293},[118,138395,137546],{"class":1967},[118,138397,15577],{"class":128},[118,138399,138400,138402,138404,138406],{"class":120,"line":40},[118,138401,137553],{"class":177},[118,138403,51430],{"class":128},[118,138405,7657],{"class":233},[118,138407,1294],{"class":128},[118,138409,138410,138412,138414,138416],{"class":120,"line":1183},[118,138411,128161],{"class":177},[118,138413,51430],{"class":128},[118,138415,60862],{"class":177},[118,138417,1294],{"class":128},[118,138419,138420],{"class":120,"line":1198},[118,138421,1569],{"class":128},[15,138423,138424],{},"样式实例代码：",[109,138426,138427],{"className":126545,"code":138387,"language":126547,"meta":39,"style":39},[115,138428,138429,138437,138447,138457],{"__ignoreMap":39},[118,138430,138431,138433,138435],{"class":120,"line":121},[118,138432,51604],{"class":51293},[118,138434,137546],{"class":1967},[118,138436,15577],{"class":128},[118,138438,138439,138441,138443,138445],{"class":120,"line":40},[118,138440,137553],{"class":177},[118,138442,51430],{"class":128},[118,138444,7657],{"class":233},[118,138446,1294],{"class":128},[118,138448,138449,138451,138453,138455],{"class":120,"line":1183},[118,138450,128161],{"class":177},[118,138452,51430],{"class":128},[118,138454,60862],{"class":177},[118,138456,1294],{"class":128},[118,138458,138459],{"class":120,"line":1198},[118,138460,1569],{"class":128},[89,138462,138464],{"id":138463},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1135,138466,138467],{},[75,138468,138469],{},"header 盒子必须要有高度",[15,138471,138472,138473,138475,138476],{},"1 号盒子是 ",[115,138474,131557],{}," 标志定位，在正常开发过程中， ",[278,138477,138478,138479,138482],{},"logo的布局其实是有讲究的，需要进行 ",[115,138480,138481],{},"logoSEO","的优化 （★★★）",[1135,138484,138485,138493,138501,138528],{},[75,138486,138487,138489,138490,138492],{},[115,138488,131557],{}," 里面首先放一个 ",[115,138491,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[75,138494,138495,138497,138498,138500],{},[115,138496,10],{}," 里面再放一个链接，可以返回首页的，把 ",[115,138499,131557],{}," 的背景图片给链接即可",[75,138502,138503,138504],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1135,138505,138506,138521],{},[75,138507,138508,138509,138512,138513,138516,138517,138520],{},"方法1：",[115,138510,138511],{},"text-indent"," 移到盒子外面（",[115,138514,138515],{},"text-indent: -9999px",") ，然后 ",[115,138518,138519],{},"overflow:hidden"," ，淘宝的做法",[75,138522,138523,138524,138527],{},"方法2：直接给 ",[115,138525,138526],{},"font-size: 0;"," 就看不到文字了，京东的做法",[75,138529,138530,138531,138533,138534,138536],{},"最后给链接一个 ",[115,138532,51400],{}," 属性，这样鼠标放到 ",[115,138535,131557],{}," 上就可以看到提示文字了",[15,138538,138384],{},[109,138540,138541],{"className":127292,"code":131778,"language":127294,"meta":39,"style":39},[115,138542,138543],{"__ignoreMap":39},[118,138544,138545,138547,138549,138551,138553,138555,138557,138559,138561,138563,138565],{"class":120,"line":121},[118,138546,1038],{"class":128},[118,138548,21],{"class":51293},[118,138550,61050],{"class":1967},[118,138552,174],{"class":128},[118,138554,131793],{"class":233},[118,138556,131796],{"class":1967},[118,138558,174],{"class":128},[118,138560,131801],{"class":233},[118,138562,131804],{"class":128},[118,138564,21],{"class":51293},[118,138566,51300],{"class":128},[15,138568,138424],{},[109,138570,138571],{"className":127292,"code":131778,"language":127294,"meta":39,"style":39},[115,138572,138573],{"__ignoreMap":39},[118,138574,138575,138577,138579,138581,138583,138585,138587,138589,138591,138593,138595],{"class":120,"line":121},[118,138576,1038],{"class":128},[118,138578,21],{"class":51293},[118,138580,61050],{"class":1967},[118,138582,174],{"class":128},[118,138584,131793],{"class":233},[118,138586,131796],{"class":1967},[118,138588,174],{"class":128},[118,138590,131801],{"class":233},[118,138592,131804],{"class":128},[118,138594,21],{"class":51293},[118,138596,51300],{"class":128},[15,138598,138599,138600,138602],{},"2 号盒子是 ",[115,138601,131570],{}," 搜索模块定位",[1135,138604,138605,138608,138611,138614],{},[75,138606,138607],{},"search盒子利用定位的方式放在对应的位置",[75,138609,138610],{},"search盒子设置绝对定位，header盒子设置相对定位",[75,138612,138613],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[75,138615,138616],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[15,138618,138384],{},[109,138620,138621],{"className":126545,"code":131865,"language":126547,"meta":39,"style":39},[115,138622,138623,138645,138649,138659],{"__ignoreMap":39},[118,138624,138625,138627,138629,138631,138633,138635,138637,138639,138641,138643],{"class":120,"line":121},[118,138626,51604],{"class":51293},[118,138628,12440],{"class":128},[118,138630,15],{"class":51293},[118,138632,12440],{"class":128},[118,138634,10],{"class":51293},[118,138636,12440],{"class":128},[118,138638,1135],{"class":51293},[118,138640,12440],{"class":128},[118,138642,75],{"class":51293},[118,138644,15577],{"class":128},[118,138646,138647],{"class":120,"line":40},[118,138648,131894],{"class":187},[118,138650,138651,138653,138655,138657],{"class":120,"line":1183},[118,138652,128161],{"class":177},[118,138654,51430],{"class":128},[118,138656,60862],{"class":177},[118,138658,1294],{"class":128},[118,138660,138661],{"class":120,"line":1198},[118,138662,1569],{"class":128},[15,138664,138424],{},[109,138666,138667],{"className":126545,"code":131865,"language":126547,"meta":39,"style":39},[115,138668,138669,138691,138695,138705],{"__ignoreMap":39},[118,138670,138671,138673,138675,138677,138679,138681,138683,138685,138687,138689],{"class":120,"line":121},[118,138672,51604],{"class":51293},[118,138674,12440],{"class":128},[118,138676,15],{"class":51293},[118,138678,12440],{"class":128},[118,138680,10],{"class":51293},[118,138682,12440],{"class":128},[118,138684,1135],{"class":51293},[118,138686,12440],{"class":128},[118,138688,75],{"class":51293},[118,138690,15577],{"class":128},[118,138692,138693],{"class":120,"line":40},[118,138694,131894],{"class":187},[118,138696,138697,138699,138701,138703],{"class":120,"line":1183},[118,138698,128161],{"class":177},[118,138700,51430],{"class":128},[118,138702,60862],{"class":177},[118,138704,1294],{"class":128},[118,138706,138707],{"class":120,"line":1198},[118,138708,1569],{"class":128},[15,138710,138711],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[15,138713,138714,138715,138718],{},"3 号盒子是 ",[115,138716,138717],{},"hotwords"," 热词模块定位",[1135,138720,138721,138724,138727],{},[75,138722,138723],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[75,138725,138726],{},"给里面所有的a标签设置 左右10px的外边距",[75,138728,138729],{},"给第一个a标签设置文字变红色（#c81623）",[15,138731,138384],{},[109,138733,138735],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},"div {\n  margin: 0 auto;\n}\n",[115,138736,138737,138743,138755],{"__ignoreMap":39},[118,138738,138739,138741],{"class":120,"line":121},[118,138740,51604],{"class":51293},[118,138742,15577],{"class":128},[118,138744,138745,138747,138749,138751,138753],{"class":120,"line":40},[118,138746,70463],{"class":177},[118,138748,51430],{"class":128},[118,138750,320],{"class":177},[118,138752,51549],{"class":177},[118,138754,1294],{"class":128},[118,138756,138757],{"class":120,"line":1183},[118,138758,1569],{"class":128},[15,138760,138424],{},[109,138762,138763],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},[115,138764,138765,138771,138783],{"__ignoreMap":39},[118,138766,138767,138769],{"class":120,"line":121},[118,138768,51604],{"class":51293},[118,138770,15577],{"class":128},[118,138772,138773,138775,138777,138779,138781],{"class":120,"line":40},[118,138774,70463],{"class":177},[118,138776,51430],{"class":128},[118,138778,320],{"class":177},[118,138780,51549],{"class":177},[118,138782,1294],{"class":128},[118,138784,138785],{"class":120,"line":1183},[118,138786,1569],{"class":128},[15,138788,138789,138790,138793],{},"4 号盒子是 ",[115,138791,138792],{},"shopcar"," 购物车模块",[1135,138795,138796,138801,138804,138807],{},[75,138797,123328,138798,138800],{},[115,138799,138792],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[75,138802,138803],{},"count 统计部分用绝对定位做",[75,138805,138806],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[75,138808,138809],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[15,138811,138384],{},[109,138813,138814],{"className":126545,"code":131977,"language":126547,"meta":39,"style":39},[115,138815,138816,138820,138834,138838,138852,138856,138870,138874,138888,138892],{"__ignoreMap":39},[118,138817,138818],{"class":120,"line":121},[118,138819,131984],{"class":187},[118,138821,138822,138824,138826,138828,138830,138832],{"class":120,"line":40},[118,138823,131989],{"class":1967},[118,138825,79800],{"class":128},[118,138827,128905],{"class":177},[118,138829,51430],{"class":128},[118,138831,131998],{"class":177},[118,138833,129475],{"class":128},[118,138835,138836],{"class":120,"line":1183},[118,138837,132005],{"class":187},[118,138839,138840,138842,138844,138846,138848,138850],{"class":120,"line":1198},[118,138841,132010],{"class":1967},[118,138843,79800],{"class":128},[118,138845,128905],{"class":177},[118,138847,51430],{"class":128},[118,138849,54757],{"class":177},[118,138851,129475],{"class":128},[118,138853,138854],{"class":120,"line":1204},[118,138855,132025],{"class":187},[118,138857,138858,138860,138862,138864,138866,138868],{"class":120,"line":1218},[118,138859,132030],{"class":1967},[118,138861,79800],{"class":128},[118,138863,128905],{"class":177},[118,138865,51430],{"class":128},[118,138867,54824],{"class":177},[118,138869,129475],{"class":128},[118,138871,138872],{"class":120,"line":1224},[118,138873,132045],{"class":187},[118,138875,138876,138878,138880,138882,138884,138886],{"class":120,"line":1315},[118,138877,132050],{"class":1967},[118,138879,79800],{"class":128},[118,138881,128905],{"class":177},[118,138883,51430],{"class":128},[118,138885,86226],{"class":177},[118,138887,129475],{"class":128},[118,138889,138890],{"class":120,"line":1321},[118,138891,132065],{"class":187},[118,138893,138894,138896,138898,138900,138902,138904],{"class":120,"line":1333},[118,138895,132070],{"class":1967},[118,138897,79800],{"class":128},[118,138899,128905],{"class":177},[118,138901,51430],{"class":128},[118,138903,132079],{"class":177},[118,138905,129475],{"class":128},[15,138907,138424],{},[109,138909,138910],{"className":126545,"code":131977,"language":126547,"meta":39,"style":39},[115,138911,138912,138916,138930,138934,138948,138952,138966,138970,138984,138988],{"__ignoreMap":39},[118,138913,138914],{"class":120,"line":121},[118,138915,131984],{"class":187},[118,138917,138918,138920,138922,138924,138926,138928],{"class":120,"line":40},[118,138919,131989],{"class":1967},[118,138921,79800],{"class":128},[118,138923,128905],{"class":177},[118,138925,51430],{"class":128},[118,138927,131998],{"class":177},[118,138929,129475],{"class":128},[118,138931,138932],{"class":120,"line":1183},[118,138933,132005],{"class":187},[118,138935,138936,138938,138940,138942,138944,138946],{"class":120,"line":1198},[118,138937,132010],{"class":1967},[118,138939,79800],{"class":128},[118,138941,128905],{"class":177},[118,138943,51430],{"class":128},[118,138945,54757],{"class":177},[118,138947,129475],{"class":128},[118,138949,138950],{"class":120,"line":1204},[118,138951,132025],{"class":187},[118,138953,138954,138956,138958,138960,138962,138964],{"class":120,"line":1218},[118,138955,132030],{"class":1967},[118,138957,79800],{"class":128},[118,138959,128905],{"class":177},[118,138961,51430],{"class":128},[118,138963,54824],{"class":177},[118,138965,129475],{"class":128},[118,138967,138968],{"class":120,"line":1224},[118,138969,132045],{"class":187},[118,138971,138972,138974,138976,138978,138980,138982],{"class":120,"line":1315},[118,138973,132050],{"class":1967},[118,138975,79800],{"class":128},[118,138977,128905],{"class":177},[118,138979,51430],{"class":128},[118,138981,86226],{"class":177},[118,138983,129475],{"class":128},[118,138985,138986],{"class":120,"line":1321},[118,138987,132065],{"class":187},[118,138989,138990,138992,138994,138996,138998,139000],{"class":120,"line":1333},[118,138991,132070],{"class":1967},[118,138993,79800],{"class":128},[118,138995,128905],{"class":177},[118,138997,51430],{"class":128},[118,138999,132079],{"class":177},[118,139001,129475],{"class":128},[89,139003,139005,139006,139008],{"id":139004},"_1544-nav导航模块制作","15.4.4 ",[115,139007,53706],{},"导航模块制作",[1466,139010],{"style":126401,"src":139011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[15,139013,139014,139016],{},[115,139015,53706],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[15,139018,139019,139020],{},"1 号盒子左侧浮动，",[115,139021,139022],{},"dropdown",[1135,139024,139025,139035,139043,139049,139057,139067,139075,139086],{},[75,139026,139027,139028,101011,139031,139034],{},"1号盒子有讲究，根据相关性 里面包含 ",[115,139029,139030],{},".dt",[115,139032,139033],{},".dd"," 两个盒子",[75,139036,139037,139039,139040,139042],{},[115,139038,139030],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[115,139041,139033],{}," 挤到下面去了",[75,139044,139045,139046,139048],{},"给 ",[115,139047,139033],{}," 盒子设置宽度 和 高度，以及背景颜色",[75,139050,139045,139051,139053,139054,120230],{},[115,139052,139033],{}," 盒子里面定义 无序列表 （",[115,139055,139056],{},"ul > li > a",[75,139058,139059,139060,139062,139063,139066],{},"每个 ",[115,139061,75],{}," 都有一个高度（",[115,139064,139065],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[75,139068,139045,139069,139071,139072,120230],{},[115,139070,75],{}," 里面的a设置文字大小（",[115,139073,139074],{},"14px",[75,139076,139045,139077,139079,139080,139082,139083,139085],{},[115,139078,75],{}," 设置 ",[115,139081,127706],{},"，当鼠标移入的时候，让",[115,139084,75],{},"的背景变成白色，让里面的文字变成红色",[75,139087,139088,139090,139091,139093,139094,139096],{},[115,139089,75],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[115,139092,75],{},"的右侧，那么给",[115,139095,75],{},"设置相对定位",[15,139098,139099],{},"一定要注意相关性",[15,139101,138384],{},[109,139103,139104],{"className":126545,"code":138387,"language":126547,"meta":39,"style":39},[115,139105,139106,139114,139124,139134],{"__ignoreMap":39},[118,139107,139108,139110,139112],{"class":120,"line":121},[118,139109,51604],{"class":51293},[118,139111,137546],{"class":1967},[118,139113,15577],{"class":128},[118,139115,139116,139118,139120,139122],{"class":120,"line":40},[118,139117,137553],{"class":177},[118,139119,51430],{"class":128},[118,139121,7657],{"class":233},[118,139123,1294],{"class":128},[118,139125,139126,139128,139130,139132],{"class":120,"line":1183},[118,139127,128161],{"class":177},[118,139129,51430],{"class":128},[118,139131,60862],{"class":177},[118,139133,1294],{"class":128},[118,139135,139136],{"class":120,"line":1198},[118,139137,1569],{"class":128},[15,139139,138424],{},[109,139141,139142],{"className":126545,"code":138387,"language":126547,"meta":39,"style":39},[115,139143,139144,139152,139162,139172],{"__ignoreMap":39},[118,139145,139146,139148,139150],{"class":120,"line":121},[118,139147,51604],{"class":51293},[118,139149,137546],{"class":1967},[118,139151,15577],{"class":128},[118,139153,139154,139156,139158,139160],{"class":120,"line":40},[118,139155,137553],{"class":177},[118,139157,51430],{"class":128},[118,139159,7657],{"class":233},[118,139161,1294],{"class":128},[118,139163,139164,139166,139168,139170],{"class":120,"line":1183},[118,139165,128161],{"class":177},[118,139167,51430],{"class":128},[118,139169,60862],{"class":177},[118,139171,1294],{"class":128},[118,139173,139174],{"class":120,"line":1198},[118,139175,1569],{"class":128},[15,139177,139178],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[15,139180,139181,139182,139185],{},"2 号盒子左侧浮动，",[115,139183,139184],{},"navitems"," 导航栏组",[1135,139187,139188,139193,139202],{},[75,139189,139190,139191],{},"里面结构是 ",[115,139192,139056],{},[75,139194,139195,139196,139198,139199,139201],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[115,139197,21],{},"左右的",[115,139200,30876],{},"把两侧撑开",[75,139203,139204],{},"让文字垂直居中（行高等于高度）",[1466,139206],{"style":126401,"src":139207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[15,139209,139210],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[15,139212,138384],{},[109,139214,139216],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},".box {\n  float: left;\n}\n",[115,139217,139218,139224,139234],{"__ignoreMap":39},[118,139219,139220,139222],{"class":120,"line":121},[118,139221,130393],{"class":1967},[118,139223,15577],{"class":128},[118,139225,139226,139228,139230,139232],{"class":120,"line":40},[118,139227,131025],{"class":177},[118,139229,51430],{"class":128},[118,139231,23741],{"class":177},[118,139233,1294],{"class":128},[118,139235,139236],{"class":120,"line":1183},[118,139237,1569],{"class":128},[15,139239,138424],{},[109,139241,139242],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,139243,139244,139250,139260],{"__ignoreMap":39},[118,139245,139246,139248],{"class":120,"line":121},[118,139247,130393],{"class":1967},[118,139249,15577],{"class":128},[118,139251,139252,139254,139256,139258],{"class":120,"line":40},[118,139253,131025],{"class":177},[118,139255,51430],{"class":128},[118,139257,23741],{"class":177},[118,139259,1294],{"class":128},[118,139261,139262],{"class":120,"line":1183},[118,139263,1569],{"class":128},[15,139265,139266],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1466,139268],{"style":126401,"src":139269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[109,139271,139272],{"className":126545,"code":130702,"language":126547,"meta":39,"style":39},[115,139273,139274,139280,139296],{"__ignoreMap":39},[118,139275,139276,139278],{"class":120,"line":121},[118,139277,51604],{"class":51293},[118,139279,15577],{"class":128},[118,139281,139282,139284,139286,139288,139290,139292,139294],{"class":120,"line":40},[118,139283,70889],{"class":177},[118,139285,51430],{"class":128},[118,139287,346],{"class":177},[118,139289,51485],{"class":124},[118,139291,51514],{"class":177},[118,139293,129937],{"class":177},[118,139295,1294],{"class":128},[118,139297,139298],{"class":120,"line":1183},[118,139299,1569],{"class":128},[89,139301,139303],{"id":139302},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1466,139305],{"style":126401,"src":139306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1135,139308,139309,139314,139319],{},[75,139310,139311,139313],{},[115,139312,131748],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[75,139315,139316,139318],{},[115,139317,131748],{}," 里面有一个大的版心",[75,139320,139321,139322,139325,139326],{},"版心里面包含 1 号盒子，",[115,139323,139324],{},"mod_service"," 是服务模块，mod 是模块的意思",[1135,139327,139328,139333,139346,139362,139367],{},[75,139329,139045,139330,139332],{},[115,139331,139324],{}," 设置高度（80px）和下边框",[75,139334,139335,139336,139339,139340,139342,139343,139345],{},"在里面定义 ",[115,139337,139338],{},"ul > li"," ,每个",[115,139341,75],{}," 宽度是300px 高度是 50px，给每个",[115,139344,75],{},"设置35px的左内边距",[75,139347,139348,139349,139351,139352,139354,139355,139357,139358,18415,139360,120230],{},"在每个",[115,139350,75],{},"里面，放一个 ",[115,139353,22915],{},"（里面放图标），一个",[115,139356,51604],{},"（里面放",[115,139359,51604],{},[115,139361,15],{},[75,139363,139045,139364,139366],{},[115,139365,22915],{},"设置浮动，让h5与这个div左右排列",[75,139368,139369],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[15,139371,138384],{},[109,139373,139375],{"className":126545,"code":139374,"language":126547,"meta":39,"style":39},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[115,139376,139377,139383,139395,139407,139434],{"__ignoreMap":39},[118,139378,139379,139381],{"class":120,"line":121},[118,139380,134302],{"class":1967},[118,139382,15577],{"class":128},[118,139384,139385,139387,139389,139391,139393],{"class":120,"line":40},[118,139386,70561],{"class":177},[118,139388,51430],{"class":128},[118,139390,828],{"class":177},[118,139392,51485],{"class":124},[118,139394,1294],{"class":128},[118,139396,139397,139399,139401,139403,139405],{"class":120,"line":1183},[118,139398,70781],{"class":177},[118,139400,51430],{"class":128},[118,139402,828],{"class":177},[118,139404,51485],{"class":124},[118,139406,1294],{"class":128},[118,139408,139409,139411,139413,139415,139417,139419,139421,139423,139426,139428,139430,139432],{"class":120,"line":1198},[118,139410,70604],{"class":177},[118,139412,51430],{"class":128},[118,139414,61719],{"class":177},[118,139416,129],{"class":128},[118,139418,134341],{"class":5221},[118,139420,13719],{"class":128},[118,139422,61729],{"class":177},[118,139424,139425],{"class":177}," -10",[118,139427,51485],{"class":124},[118,139429,134360],{"class":177},[118,139431,51485],{"class":124},[118,139433,1294],{"class":128},[118,139435,139436],{"class":120,"line":1204},[118,139437,1569],{"class":128},[15,139439,138424],{},[109,139441,139442],{"className":126545,"code":139374,"language":126547,"meta":39,"style":39},[115,139443,139444,139450,139462,139474,139500],{"__ignoreMap":39},[118,139445,139446,139448],{"class":120,"line":121},[118,139447,134302],{"class":1967},[118,139449,15577],{"class":128},[118,139451,139452,139454,139456,139458,139460],{"class":120,"line":40},[118,139453,70561],{"class":177},[118,139455,51430],{"class":128},[118,139457,828],{"class":177},[118,139459,51485],{"class":124},[118,139461,1294],{"class":128},[118,139463,139464,139466,139468,139470,139472],{"class":120,"line":1183},[118,139465,70781],{"class":177},[118,139467,51430],{"class":128},[118,139469,828],{"class":177},[118,139471,51485],{"class":124},[118,139473,1294],{"class":128},[118,139475,139476,139478,139480,139482,139484,139486,139488,139490,139492,139494,139496,139498],{"class":120,"line":1198},[118,139477,70604],{"class":177},[118,139479,51430],{"class":128},[118,139481,61719],{"class":177},[118,139483,129],{"class":128},[118,139485,134341],{"class":5221},[118,139487,13719],{"class":128},[118,139489,61729],{"class":177},[118,139491,139425],{"class":177},[118,139493,51485],{"class":124},[118,139495,134360],{"class":177},[118,139497,51485],{"class":124},[118,139499,1294],{"class":128},[118,139501,139502],{"class":120,"line":1204},[118,139503,1569],{"class":128},[15,139505,139506],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1135,139508,139509,139512,139518,139524,139536],{},[75,139510,139511],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[75,139513,139514,139515,120230],{},"里面的布局利用 自定义列表来实现（",[115,139516,139517],{},"dl > dt + dd",[75,139519,139045,139520,139523],{},[115,139521,139522],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[75,139525,139045,139526,139529,139530,18415,139532,139535],{},[115,139527,139528],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[115,139531,139528],{},[115,139533,139534],{},"dd","之间有些距离",[75,139537,139538],{},"最后一个 dl 结构和样式不一样，需要单独设置",[15,139540,138384],{},[109,139542,139543],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},[115,139544,139545,139551,139563],{"__ignoreMap":39},[118,139546,139547,139549],{"class":120,"line":121},[118,139548,51604],{"class":51293},[118,139550,15577],{"class":128},[118,139552,139553,139555,139557,139559,139561],{"class":120,"line":40},[118,139554,70463],{"class":177},[118,139556,51430],{"class":128},[118,139558,320],{"class":177},[118,139560,51549],{"class":177},[118,139562,1294],{"class":128},[118,139564,139565],{"class":120,"line":1183},[118,139566,1569],{"class":128},[15,139568,138424],{},[109,139570,139571],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},[115,139572,139573,139579,139591],{"__ignoreMap":39},[118,139574,139575,139577],{"class":120,"line":121},[118,139576,51604],{"class":51293},[118,139578,15577],{"class":128},[118,139580,139581,139583,139585,139587,139589],{"class":120,"line":40},[118,139582,70463],{"class":177},[118,139584,51430],{"class":128},[118,139586,320],{"class":177},[118,139588,51549],{"class":177},[118,139590,1294],{"class":128},[118,139592,139593],{"class":120,"line":1183},[118,139594,1569],{"class":128},[15,139596,139597],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1135,139599,139600,139609,139612,139623],{},[75,139601,139602,139603,139605,139606,139608],{},"分为上下两块，上面是 ",[115,139604,131765],{}," 友情链接，下面是 ",[115,139607,131758],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[75,139610,139611],{},"把内容分别复制到相应模块中",[75,139613,139045,139614,139616,139617,139619,139620,139622],{},[115,139615,131765],{}," 设置 15px 的下外边距，给",[115,139618,131765],{}," 里面 的 ",[115,139621,21],{}," 标签设置 左右 3px 的外边距",[75,139624,139625,139626,139628],{},"给",[115,139627,131758],{}," 设置 20px 的行高",[15,139630,138384],{},[109,139632,139633],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},[115,139634,139635,139641,139653],{"__ignoreMap":39},[118,139636,139637,139639],{"class":120,"line":121},[118,139638,51604],{"class":51293},[118,139640,15577],{"class":128},[118,139642,139643,139645,139647,139649,139651],{"class":120,"line":40},[118,139644,70463],{"class":177},[118,139646,51430],{"class":128},[118,139648,320],{"class":177},[118,139650,51549],{"class":177},[118,139652,1294],{"class":128},[118,139654,139655],{"class":120,"line":1183},[118,139656,1569],{"class":128},[15,139658,138424],{},[109,139660,139661],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},[115,139662,139663,139669,139681],{"__ignoreMap":39},[118,139664,139665,139667],{"class":120,"line":121},[118,139666,51604],{"class":51293},[118,139668,15577],{"class":128},[118,139670,139671,139673,139675,139677,139679],{"class":120,"line":40},[118,139672,70463],{"class":177},[118,139674,51430],{"class":128},[118,139676,320],{"class":177},[118,139678,51549],{"class":177},[118,139680,1294],{"class":128},[118,139682,139683],{"class":120,"line":1183},[118,139684,1569],{"class":128},[15,139686,139687],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5131,139689,139690],{},"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":39,"searchDepth":40,"depth":40,"links":139692},[139693,139694,139695,139702],{"id":137973,"depth":40,"text":137974},{"id":137992,"depth":40,"text":137993},{"id":138019,"depth":40,"text":138020,"children":139696},[139697,139698,139699,139700,139701],{"id":138023,"depth":1183,"text":138024},{"id":138036,"depth":1183,"text":138037},{"id":138060,"depth":1183,"text":138061},{"id":138082,"depth":1183,"text":138083},{"id":138154,"depth":1183,"text":138155},{"id":138280,"depth":40,"text":138281,"children":139703},[139704,139705,139706,139707,139709],{"id":138284,"depth":1183,"text":138285},{"id":138291,"depth":1183,"text":138292},{"id":138463,"depth":1183,"text":138464},{"id":139004,"depth":1183,"text":139708},"15.4.4 nav导航模块制作",{"id":139302,"depth":1183,"text":139303},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137965,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139716,"title":139717,"body":139718,"description":42,"extension":43,"meta":142120,"navigation":45,"path":142121,"seo":142122,"stem":142123,"__hash__":142124},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139719,"toc":142097},[139720,139723,139727,139731,139743,139746,139749,139752,139763,139765,139789,139791,139815,139820,139823,139825,139861,139863,139899,139902,139907,139910,139913,139916,139946,139953,139956,139966,139968,140002,140005,140039,140045,140062,140064,140100,140102,140138,140143,140168,140170,140196,140198,140222,140229,140232,140296,140298,140340,140342,140382,140389,140394,140396,140426,140428,140458,140462,140465,140472,140484,140486,140512,140514,140538,140541,140543,140567,140573,140583,140585,140615,140617,140647,140654,140695,140697,140733,140735,140771,140775,140778,140781,140784,140790,140795,140798,140821,140824,140848,140851,140875,140880,140883,140886,140889,140892,140895,140969,140971,141001,141003,141033,141036,141039,141071,141075,141079,141093,141102,141105,141110,141112,141206,141208,141302,141325,141327,141351,141353,141377,141384,141387,141397,141399,141423,141428,141436,141438,141468,141473,141513,141515,141541,141543,141569,141573,141576,141581,141584,141588,141596,141603,141611,141613,141643,141645,141675,141683,141686,141689,141691,141721,141723,141753,141756,141761,141763,141787,141789,141813,141816,141901,141903,141927,141929,141953,141957,141959,141983,141985,142019,142023,142037,142040,142045,142048,142053,142056,142086,142094],[10,139721,139717],{"id":139722},"_16-品优购项目下篇-主体与页面开发",[60,139724,139726],{"id":139725},"_161-项目主体模块制作","16.1 项目主体模块制作",[89,139728,139730],{"id":139729},"_1611-首页制作","16.1.1 首页制作",[15,139732,139733,139735,139736,139738,139739,139742],{},[278,139734,102051],{}," 主体模块是 ",[278,139737,74051],{}," 里面专有的，注意需要新的样式文件 ",[278,139740,139741],{},"index.css，"," 就不要写在common.css中了",[1466,139744],{"style":126401,"src":139745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1466,139747],{"style":126401,"src":139748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[15,139750,139751],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1135,139753,139754,139757,139760],{},[75,139755,139756],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[75,139758,139759],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[75,139761,139762],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[15,139764,138384],{},[109,139766,139767],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,139768,139769,139775,139785],{"__ignoreMap":39},[118,139770,139771,139773],{"class":120,"line":121},[118,139772,130393],{"class":1967},[118,139774,15577],{"class":128},[118,139776,139777,139779,139781,139783],{"class":120,"line":40},[118,139778,131025],{"class":177},[118,139780,51430],{"class":128},[118,139782,23741],{"class":177},[118,139784,1294],{"class":128},[118,139786,139787],{"class":120,"line":1183},[118,139788,1569],{"class":128},[15,139790,138424],{},[109,139792,139793],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,139794,139795,139801,139811],{"__ignoreMap":39},[118,139796,139797,139799],{"class":120,"line":121},[118,139798,130393],{"class":1967},[118,139800,15577],{"class":128},[118,139802,139803,139805,139807,139809],{"class":120,"line":40},[118,139804,131025],{"class":177},[118,139806,51430],{"class":128},[118,139808,23741],{"class":177},[118,139810,1294],{"class":128},[118,139812,139813],{"class":120,"line":1183},[118,139814,1569],{"class":128},[72,139816,139817],{},[75,139818,139819],{},"左侧focus模块制作",[1466,139821],{"style":126401,"src":139822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[15,139824,138384],{},[109,139826,139827],{"className":126545,"code":127868,"language":126547,"meta":39,"style":39},[115,139828,139829,139837,139847,139857],{"__ignoreMap":39},[118,139830,139831,139833,139835],{"class":120,"line":121},[118,139832,53814],{"class":51293},[118,139834,61893],{"class":1967},[118,139836,15577],{"class":128},[118,139838,139839,139841,139843,139845],{"class":120,"line":40},[118,139840,127883],{"class":177},[118,139842,51430],{"class":128},[118,139844,54882],{"class":177},[118,139846,1294],{"class":128},[118,139848,139849,139851,139853,139855],{"class":120,"line":1183},[118,139850,70791],{"class":177},[118,139852,51430],{"class":128},[118,139854,54730],{"class":177},[118,139856,1294],{"class":128},[118,139858,139859],{"class":120,"line":1198},[118,139860,1569],{"class":128},[15,139862,138424],{},[109,139864,139865],{"className":126545,"code":127868,"language":126547,"meta":39,"style":39},[115,139866,139867,139875,139885,139895],{"__ignoreMap":39},[118,139868,139869,139871,139873],{"class":120,"line":121},[118,139870,53814],{"class":51293},[118,139872,61893],{"class":1967},[118,139874,15577],{"class":128},[118,139876,139877,139879,139881,139883],{"class":120,"line":40},[118,139878,127883],{"class":177},[118,139880,51430],{"class":128},[118,139882,54882],{"class":177},[118,139884,1294],{"class":128},[118,139886,139887,139889,139891,139893],{"class":120,"line":1183},[118,139888,70791],{"class":177},[118,139890,51430],{"class":128},[118,139892,54730],{"class":177},[118,139894,1294],{"class":128},[118,139896,139897],{"class":120,"line":1198},[118,139898,1569],{"class":128},[15,139900,139901],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[72,139903,139904],{"start":40},[75,139905,139906],{},"右侧newsflash模块制作",[1466,139908],{"style":126401,"src":139909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[15,139911,139912],{},"右侧的模块 分为上中下三个盒子",[15,139914,139915],{},"结构代码：",[109,139917,139918],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,139919,139920],{"__ignoreMap":39},[118,139921,139922,139924,139926,139928,139930,139932,139934,139936,139938,139940,139942,139944],{"class":120,"line":121},[118,139923,1038],{"class":128},[118,139925,1466],{"class":51293},[118,139927,55232],{"class":1967},[118,139929,174],{"class":128},[118,139931,134062],{"class":233},[118,139933,55240],{"class":1967},[118,139935,174],{"class":128},[118,139937,134069],{"class":233},[118,139939,134072],{"class":1967},[118,139941,174],{"class":128},[118,139943,134077],{"class":233},[118,139945,51300],{"class":128},[15,139947,139948,139949,139952],{},"1 号盒子为 ",[115,139950,139951],{},"news"," 新闻模块 高度为 165px",[1466,139954],{"style":126401,"src":139955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[15,139957,139958,139959,139962,139963],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[115,139960,139961],{},"news-hd","，下面是 ",[115,139964,139965],{},"news-bd",[15,139967,139915],{},[109,139969,139970],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,139971,139972,139976,139990,139994],{"__ignoreMap":39},[118,139973,139974],{"class":120,"line":121},[118,139975,130656],{"class":187},[118,139977,139978,139980,139982,139984,139986,139988],{"class":120,"line":40},[118,139979,1038],{"class":128},[118,139981,51604],{"class":51293},[118,139983,53479],{"class":1967},[118,139985,174],{"class":128},[118,139987,130669],{"class":233},[118,139989,51300],{"class":128},[118,139991,139992],{"class":120,"line":1183},[118,139993,130676],{"class":128},[118,139995,139996,139998,140000],{"class":120,"line":1198},[118,139997,51778],{"class":128},[118,139999,51604],{"class":51293},[118,140001,51300],{"class":128},[15,140003,140004],{},"样式代码：",[109,140006,140007],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,140008,140009,140013,140027,140031],{"__ignoreMap":39},[118,140010,140011],{"class":120,"line":121},[118,140012,130656],{"class":187},[118,140014,140015,140017,140019,140021,140023,140025],{"class":120,"line":40},[118,140016,1038],{"class":128},[118,140018,51604],{"class":51293},[118,140020,53479],{"class":1967},[118,140022,174],{"class":128},[118,140024,130669],{"class":233},[118,140026,51300],{"class":128},[118,140028,140029],{"class":120,"line":1183},[118,140030,130676],{"class":128},[118,140032,140033,140035,140037],{"class":120,"line":1198},[118,140034,51778],{"class":128},[118,140036,51604],{"class":51293},[118,140038,51300],{"class":128},[15,140040,140041,140042,140044],{},"上面是",[115,140043,139961],{},"，设置高度是 33px，设置下边框",[1135,140046,140047,140053],{},[75,140048,140049,140050,140052],{},"里面放一个",[115,140051,22915],{}," 标题",[75,140054,140055,140056,140058,140059,140061],{},"放一个a",[115,140057,102686],{},"，内容是 更多，然后让 ",[115,140060,21],{}," 进行右浮动，三角用伪元素设置字体图标就好",[15,140063,139915],{},[109,140065,140066],{"className":126545,"code":138387,"language":126547,"meta":39,"style":39},[115,140067,140068,140076,140086,140096],{"__ignoreMap":39},[118,140069,140070,140072,140074],{"class":120,"line":121},[118,140071,51604],{"class":51293},[118,140073,137546],{"class":1967},[118,140075,15577],{"class":128},[118,140077,140078,140080,140082,140084],{"class":120,"line":40},[118,140079,137553],{"class":177},[118,140081,51430],{"class":128},[118,140083,7657],{"class":233},[118,140085,1294],{"class":128},[118,140087,140088,140090,140092,140094],{"class":120,"line":1183},[118,140089,128161],{"class":177},[118,140091,51430],{"class":128},[118,140093,60862],{"class":177},[118,140095,1294],{"class":128},[118,140097,140098],{"class":120,"line":1198},[118,140099,1569],{"class":128},[15,140101,140004],{},[109,140103,140104],{"className":126545,"code":138387,"language":126547,"meta":39,"style":39},[115,140105,140106,140114,140124,140134],{"__ignoreMap":39},[118,140107,140108,140110,140112],{"class":120,"line":121},[118,140109,51604],{"class":51293},[118,140111,137546],{"class":1967},[118,140113,15577],{"class":128},[118,140115,140116,140118,140120,140122],{"class":120,"line":40},[118,140117,137553],{"class":177},[118,140119,51430],{"class":128},[118,140121,7657],{"class":233},[118,140123,1294],{"class":128},[118,140125,140126,140128,140130,140132],{"class":120,"line":1183},[118,140127,128161],{"class":177},[118,140129,51430],{"class":128},[118,140131,60862],{"class":177},[118,140133,1294],{"class":128},[118,140135,140136],{"class":120,"line":1198},[118,140137,1569],{"class":128},[15,140139,140140,140141],{},"下面是",[115,140142,139965],{},[1135,140144,140145,140153],{},[75,140146,140147,140148,101011,140150,140152],{},"里面包含 ",[115,140149,1135],{},[115,140151,75],{}," 还有链接",[75,140154,139625,140155,140157,140158,140160,140161,140164,140165],{},[115,140156,75],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[115,140159,131211],{}," 2.设置 ",[115,140162,140163],{},"white-space: nowrap;"," 3. 设置 ",[115,140166,140167],{},"text-overflow: ellipsis;",[15,140169,139915],{},[109,140171,140173],{"className":126545,"code":140172,"language":126547,"meta":39,"style":39},"div {\n  overflow: hidden;\n}\n",[115,140174,140175,140181,140192],{"__ignoreMap":39},[118,140176,140177,140179],{"class":120,"line":121},[118,140178,51604],{"class":51293},[118,140180,15577],{"class":128},[118,140182,140183,140186,140188,140190],{"class":120,"line":40},[118,140184,140185],{"class":177},"  overflow",[118,140187,51430],{"class":128},[118,140189,61707],{"class":177},[118,140191,1294],{"class":128},[118,140193,140194],{"class":120,"line":1183},[118,140195,1569],{"class":128},[15,140197,140004],{},[109,140199,140200],{"className":126545,"code":140172,"language":126547,"meta":39,"style":39},[115,140201,140202,140208,140218],{"__ignoreMap":39},[118,140203,140204,140206],{"class":120,"line":121},[118,140205,51604],{"class":51293},[118,140207,15577],{"class":128},[118,140209,140210,140212,140214,140216],{"class":120,"line":40},[118,140211,140185],{"class":177},[118,140213,51430],{"class":128},[118,140215,61707],{"class":177},[118,140217,1294],{"class":128},[118,140219,140220],{"class":120,"line":1183},[118,140221,1569],{"class":128},[15,140223,140224,140225,140228],{},"2 号盒子为 ",[115,140226,140227],{},"lifeservice"," 生活服务模块 高度为 209px",[1466,140230],{"style":126401,"src":140231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1135,140233,140234,140237,140247,140271,140282],{},[75,140235,140236],{},"设置边框（左右下边框）",[75,140238,140239,140240,140243,140244,140246],{},"里面的内容 是 ",[115,140241,140242],{},"ul > 12*li","，给",[115,140245,75],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[75,140248,140249,140250],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1135,140251,140252,140257,140266],{},[75,140253,140254,140256],{},[115,140255,140227],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[75,140258,140259,140260,140262,140263,140265],{},"可以让 ",[115,140261,140227],{}," 里面的 ",[115,140264,1135],{}," 宽度为 252，就可以装的下 4 个 小 li",[75,140267,140268,140270],{},[115,140269,140227],{}," 盒子 overflow 隐藏多余的部分就可以了",[75,140272,116460,140273,140275,140276,140278,140279,140281],{},[115,140274,75],{}," 里面放一个 ",[115,140277,569],{},"（里面放图标），下面的文本用 ",[115,140280,15],{}," 标签包裹",[75,140283,139045,140284,140286,140287,140289,140290,139079,140292,140295],{},[115,140285,569],{}," 设置 24px宽和28px的高（注意 ",[115,140288,569],{}," 是行内元素， 转成行内块），给 ",[115,140291,75],{},[115,140293,140294],{},"text-align:center"," 让里面内容居中显示",[15,140297,139915],{},[109,140299,140301],{"className":126545,"code":140300,"language":126547,"meta":39,"style":39},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[115,140302,140303,140321,140326,140336],{"__ignoreMap":39},[118,140304,140305,140307,140309,140311,140313,140315,140317,140319],{"class":120,"line":121},[118,140306,118],{"class":51293},[118,140308,12440],{"class":128},[118,140310,21],{"class":51293},[118,140312,12440],{"class":128},[118,140314,23558],{"class":51293},[118,140316,12440],{"class":128},[118,140318,278],{"class":51293},[118,140320,15577],{"class":128},[118,140322,140323],{"class":120,"line":40},[118,140324,140325],{"class":187},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[118,140327,140328,140330,140332,140334],{"class":120,"line":1183},[118,140329,128161],{"class":177},[118,140331,51430],{"class":128},[118,140333,128223],{"class":177},[118,140335,1294],{"class":128},[118,140337,140338],{"class":120,"line":1198},[118,140339,1569],{"class":128},[15,140341,140004],{},[109,140343,140344],{"className":126545,"code":140300,"language":126547,"meta":39,"style":39},[115,140345,140346,140364,140368,140378],{"__ignoreMap":39},[118,140347,140348,140350,140352,140354,140356,140358,140360,140362],{"class":120,"line":121},[118,140349,118],{"class":51293},[118,140351,12440],{"class":128},[118,140353,21],{"class":51293},[118,140355,12440],{"class":128},[118,140357,23558],{"class":51293},[118,140359,12440],{"class":128},[118,140361,278],{"class":51293},[118,140363,15577],{"class":128},[118,140365,140366],{"class":120,"line":40},[118,140367,140325],{"class":187},[118,140369,140370,140372,140374,140376],{"class":120,"line":1183},[118,140371,128161],{"class":177},[118,140373,51430],{"class":128},[118,140375,128223],{"class":177},[118,140377,1294],{"class":128},[118,140379,140380],{"class":120,"line":1198},[118,140381,1569],{"class":128},[15,140383,140384,140385,140388],{},"3 号盒子为 ",[115,140386,140387],{},"bargain"," 特价商品",[1135,140390,140391],{},[75,140392,140393],{},"这个比较简单，直接插入一张图片即可",[15,140395,139915],{},[109,140397,140398],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,140399,140400],{"__ignoreMap":39},[118,140401,140402,140404,140406,140408,140410,140412,140414,140416,140418,140420,140422,140424],{"class":120,"line":121},[118,140403,1038],{"class":128},[118,140405,1466],{"class":51293},[118,140407,55232],{"class":1967},[118,140409,174],{"class":128},[118,140411,134062],{"class":233},[118,140413,55240],{"class":1967},[118,140415,174],{"class":128},[118,140417,134069],{"class":233},[118,140419,134072],{"class":1967},[118,140421,174],{"class":128},[118,140423,134077],{"class":233},[118,140425,51300],{"class":128},[15,140427,140004],{},[109,140429,140430],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,140431,140432],{"__ignoreMap":39},[118,140433,140434,140436,140438,140440,140442,140444,140446,140448,140450,140452,140454,140456],{"class":120,"line":121},[118,140435,1038],{"class":128},[118,140437,1466],{"class":51293},[118,140439,55232],{"class":1967},[118,140441,174],{"class":128},[118,140443,134062],{"class":233},[118,140445,55240],{"class":1967},[118,140447,174],{"class":128},[118,140449,134069],{"class":233},[118,140451,134072],{"class":1967},[118,140453,174],{"class":128},[118,140455,134077],{"class":233},[118,140457,51300],{"class":128},[89,140459,140461],{"id":140460},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1466,140463],{"style":126401,"src":140464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[15,140466,140467,140468,140471],{},"大盒子 ",[115,140469,140470],{},"recom"," 推荐模块 recommend",[1135,140473,140474],{},[75,140475,140476,140477,140479,140480,140483],{},"给这个 ",[115,140478,140470],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[115,140481,140482],{},"#ebebeb","），设置距离上边 12px",[15,140485,139915],{},[109,140487,140489],{"className":126545,"code":140488,"language":126547,"meta":39,"style":39},"div {\n  background-color: #f0f0f0;\n}\n",[115,140490,140491,140497,140508],{"__ignoreMap":39},[118,140492,140493,140495],{"class":120,"line":121},[118,140494,51604],{"class":51293},[118,140496,15577],{"class":128},[118,140498,140499,140501,140503,140506],{"class":120,"line":40},[118,140500,70871],{"class":177},[118,140502,51430],{"class":128},[118,140504,140505],{"class":177},"#f0f0f0",[118,140507,1294],{"class":128},[118,140509,140510],{"class":120,"line":1183},[118,140511,1569],{"class":128},[15,140513,140004],{},[109,140515,140516],{"className":126545,"code":140488,"language":126547,"meta":39,"style":39},[115,140517,140518,140524,140534],{"__ignoreMap":39},[118,140519,140520,140522],{"class":120,"line":121},[118,140521,51604],{"class":51293},[118,140523,15577],{"class":128},[118,140525,140526,140528,140530,140532],{"class":120,"line":40},[118,140527,70871],{"class":177},[118,140529,51430],{"class":128},[118,140531,140505],{"class":177},[118,140533,1294],{"class":128},[118,140535,140536],{"class":120,"line":1183},[118,140537,1569],{"class":128},[15,140539,140540],{},"里面包含 2 个盒子， 浮动即可",[15,140542,139915],{},[109,140544,140545],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,140546,140547,140553,140563],{"__ignoreMap":39},[118,140548,140549,140551],{"class":120,"line":121},[118,140550,130393],{"class":1967},[118,140552,15577],{"class":128},[118,140554,140555,140557,140559,140561],{"class":120,"line":40},[118,140556,131025],{"class":177},[118,140558,51430],{"class":128},[118,140560,23741],{"class":177},[118,140562,1294],{"class":128},[118,140564,140565],{"class":120,"line":1183},[118,140566,1569],{"class":128},[15,140568,140569,140570],{},"1 号盒子 ",[115,140571,140572],{},"recom_hd",[1135,140574,140575,140578],{},[75,140576,140577],{},"设置宽度205px，高度163px",[75,140579,140049,140580,140582],{},[115,140581,1466],{},"标签，插入图片即可",[15,140584,139915],{},[109,140586,140587],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,140588,140589],{"__ignoreMap":39},[118,140590,140591,140593,140595,140597,140599,140601,140603,140605,140607,140609,140611,140613],{"class":120,"line":121},[118,140592,1038],{"class":128},[118,140594,1466],{"class":51293},[118,140596,55232],{"class":1967},[118,140598,174],{"class":128},[118,140600,134062],{"class":233},[118,140602,55240],{"class":1967},[118,140604,174],{"class":128},[118,140606,134069],{"class":233},[118,140608,134072],{"class":1967},[118,140610,174],{"class":128},[118,140612,134077],{"class":233},[118,140614,51300],{"class":128},[15,140616,140004],{},[109,140618,140619],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,140620,140621],{"__ignoreMap":39},[118,140622,140623,140625,140627,140629,140631,140633,140635,140637,140639,140641,140643,140645],{"class":120,"line":121},[118,140624,1038],{"class":128},[118,140626,1466],{"class":51293},[118,140628,55232],{"class":1967},[118,140630,174],{"class":128},[118,140632,134062],{"class":233},[118,140634,55240],{"class":1967},[118,140636,174],{"class":128},[118,140638,134069],{"class":233},[118,140640,134072],{"class":1967},[118,140642,174],{"class":128},[118,140644,134077],{"class":233},[118,140646,51300],{"class":128},[15,140648,140649,140650,140653],{},"2 号盒子 ",[115,140651,140652],{},"recom_bd"," ，注意里面的小竖线",[1135,140655,140656,140667,140670,140675,140680],{},[75,140657,140658,140659,140661,140662,140664,140665],{},"右侧结构里面放 ",[115,140660,1135],{}," 包含 4个 ",[115,140663,75],{},"，每个li里面包含一个",[115,140666,1466],{},[75,140668,140669],{},"直接利用切片工具把里面的内容当成一张图片",[75,140671,139045,140672,140674],{},[115,140673,75],{}," 设置浮动",[75,140676,139045,140677,140679],{},[115,140678,1466],{}," 设置宽高，宽度 248px，高度 163px",[75,140681,140682,140683,140243,140686,140688,140689,140691,140692],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[115,140684,140685],{},"top 10px",[115,140687,75],{},"设置相对定位（注意，最后一个",[115,140690,75],{},"不用设置伪元素），可以利用 ",[115,140693,140694],{},"nth-child(-n+3){...}",[15,140696,139915],{},[109,140698,140699],{"className":126545,"code":138387,"language":126547,"meta":39,"style":39},[115,140700,140701,140709,140719,140729],{"__ignoreMap":39},[118,140702,140703,140705,140707],{"class":120,"line":121},[118,140704,51604],{"class":51293},[118,140706,137546],{"class":1967},[118,140708,15577],{"class":128},[118,140710,140711,140713,140715,140717],{"class":120,"line":40},[118,140712,137553],{"class":177},[118,140714,51430],{"class":128},[118,140716,7657],{"class":233},[118,140718,1294],{"class":128},[118,140720,140721,140723,140725,140727],{"class":120,"line":1183},[118,140722,128161],{"class":177},[118,140724,51430],{"class":128},[118,140726,60862],{"class":177},[118,140728,1294],{"class":128},[118,140730,140731],{"class":120,"line":1198},[118,140732,1569],{"class":128},[15,140734,140004],{},[109,140736,140737],{"className":126545,"code":138387,"language":126547,"meta":39,"style":39},[115,140738,140739,140747,140757,140767],{"__ignoreMap":39},[118,140740,140741,140743,140745],{"class":120,"line":121},[118,140742,51604],{"class":51293},[118,140744,137546],{"class":1967},[118,140746,15577],{"class":128},[118,140748,140749,140751,140753,140755],{"class":120,"line":40},[118,140750,137553],{"class":177},[118,140752,51430],{"class":128},[118,140754,7657],{"class":233},[118,140756,1294],{"class":128},[118,140758,140759,140761,140763,140765],{"class":120,"line":1183},[118,140760,128161],{"class":177},[118,140762,51430],{"class":128},[118,140764,60862],{"class":177},[118,140766,1294],{"class":128},[118,140768,140769],{"class":120,"line":1198},[118,140770,1569],{"class":128},[89,140772,140774],{"id":140773},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1466,140776],{"style":126401,"src":140777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[15,140779,140780],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[15,140782,140783],{},"第一楼是家用电器模块： 里面包含两个盒子",[15,140785,140786,140789],{},[115,140787,140788],{},"box_hd"," 制作",[15,140791,140569,140792,140794],{},[115,140793,140788],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1466,140796],{"style":126401,"src":140797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1135,140799,140800,140805,140810,140813],{},[75,140801,140802,140804],{},[115,140803,140788],{}," 给 30px 的高度，2个像素的下边框",[75,140806,140807,140808],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[115,140809,139056],{},[75,140811,140812],{},"左侧盒左浮动，右侧盒子右浮动",[75,140814,140815,140817,140818,140820],{},[115,140816,21],{},"标签之间的距离用左右的",[115,140819,30876],{},"撑开即可",[15,140822,140823],{},"结构代码",[109,140825,140826],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,140827,140828,140834,140844],{"__ignoreMap":39},[118,140829,140830,140832],{"class":120,"line":121},[118,140831,130393],{"class":1967},[118,140833,15577],{"class":128},[118,140835,140836,140838,140840,140842],{"class":120,"line":40},[118,140837,131025],{"class":177},[118,140839,51430],{"class":128},[118,140841,23741],{"class":177},[118,140843,1294],{"class":128},[118,140845,140846],{"class":120,"line":1183},[118,140847,1569],{"class":128},[15,140849,140850],{},"样式代码",[109,140852,140853],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,140854,140855,140861,140871],{"__ignoreMap":39},[118,140856,140857,140859],{"class":120,"line":121},[118,140858,130393],{"class":1967},[118,140860,15577],{"class":128},[118,140862,140863,140865,140867,140869],{"class":120,"line":40},[118,140864,131025],{"class":177},[118,140866,51430],{"class":128},[118,140868,23741],{"class":177},[118,140870,1294],{"class":128},[118,140872,140873],{"class":120,"line":1183},[118,140874,1569],{"class":128},[15,140876,140877,140789],{},[115,140878,140879],{},"box_bd",[15,140881,140882],{},"2 号盒子 box_bd，不要给高度",[1466,140884],{"style":126401,"src":140885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[15,140887,140888],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[15,140890,140891],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[15,140893,140894],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1135,140896,140897,140909,140925],{},[75,140898,140899,140901,140902,140905,140906,140908],{},[115,140900,140879],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[115,140903,140904],{},"tab_content","，在",[115,140907,140904],{}," 里面包裹tab选项卡对应的内容",[75,140910,140911,140912,140915,140916,140918,140919,140921,140922,140924],{},"内容被一个大盒子包裹（",[115,140913,140914],{},"tab_list_item","），里面是 ",[115,140917,1135],{}," 包裹 5个 ",[115,140920,75],{},"，每个",[115,140923,75],{},"设置对应的宽度，然后设置浮动",[75,140926,140927,140928,140930,140931,140933,140934],{},"而这5个",[115,140929,75],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[115,140932,75],{},"设置",[1135,140935,140936,140954,140957],{},[75,140937,140938,140939,140941,140942,140944,140945,140947,140948,140950,140951,140953],{},"第一个小 ",[115,140940,75],{}," 分为上下结构，上面是 ",[115,140943,1135],{}," 包裹 ",[115,140946,75],{}," ，",[115,140949,75],{},"里面包裹 ",[115,140952,21],{},"，下面插入一张图片",[75,140955,140956],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[75,140958,140959,140960,140962,140963,140965,140966,140968],{},"后面的小 ",[115,140961,75],{}," 里面先放一个",[115,140964,21],{},"标签，然后在",[115,140967,21],{},"标签里面插入图片即可",[15,140970,140823],{},[109,140972,140973],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,140974,140975],{"__ignoreMap":39},[118,140976,140977,140979,140981,140983,140985,140987,140989,140991,140993,140995,140997,140999],{"class":120,"line":121},[118,140978,1038],{"class":128},[118,140980,1466],{"class":51293},[118,140982,55232],{"class":1967},[118,140984,174],{"class":128},[118,140986,134062],{"class":233},[118,140988,55240],{"class":1967},[118,140990,174],{"class":128},[118,140992,134069],{"class":233},[118,140994,134072],{"class":1967},[118,140996,174],{"class":128},[118,140998,134077],{"class":233},[118,141000,51300],{"class":128},[15,141002,140850],{},[109,141004,141005],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,141006,141007],{"__ignoreMap":39},[118,141008,141009,141011,141013,141015,141017,141019,141021,141023,141025,141027,141029,141031],{"class":120,"line":121},[118,141010,1038],{"class":128},[118,141012,1466],{"class":51293},[118,141014,55232],{"class":1967},[118,141016,174],{"class":128},[118,141018,134062],{"class":233},[118,141020,55240],{"class":1967},[118,141022,174],{"class":128},[118,141024,134069],{"class":233},[118,141026,134072],{"class":1967},[118,141028,174],{"class":128},[118,141030,134077],{"class":233},[118,141032,51300],{"class":128},[15,141034,141035],{},"tab栏切换需求！！！！！！介绍：",[1466,141037],{"style":126401,"src":141038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1135,141040,141041,141049,141055,141058],{},[75,141042,141043,141046,141047],{},[115,141044,141045],{},"tab","栏的布局是 ",[115,141048,139056],{},[75,141050,141051,141052,141054],{},"有多少个",[115,141053,141045],{},"选项卡，那么对应就有多少个内容",[75,141056,141057],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[75,141059,141060,141061,141064,141065,141067,141068,141070],{},"等后面我们学习了",[115,141062,141063],{},"js","之后，我们就会配合",[115,141066,141063],{},"来实现，",[115,141069,141045],{},"栏的切换",[60,141072,141074],{"id":141073},"_162-列表制作","16.2 列表制作",[89,141076,141078],{"id":141077},"_1621-准备工作","16.2.1 准备工作",[1135,141080,141081,141084,141087,141090],{},[75,141082,141083],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[75,141085,141086],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[75,141088,141089],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[75,141091,141092],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[89,141094,141096,141097,101011,141099,141101],{"id":141095},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[115,141098,131550],{},[115,141100,53706],{}," 修改",[1466,141103],{"style":126401,"src":141104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1135,141106,141107],{},[75,141108,141109],{},"秒杀盒子 sk（ second kill ） 定位即可",[15,141111,139915],{},[109,141113,141114],{"className":126545,"code":131977,"language":126547,"meta":39,"style":39},[115,141115,141116,141120,141134,141138,141152,141156,141170,141174,141188,141192],{"__ignoreMap":39},[118,141117,141118],{"class":120,"line":121},[118,141119,131984],{"class":187},[118,141121,141122,141124,141126,141128,141130,141132],{"class":120,"line":40},[118,141123,131989],{"class":1967},[118,141125,79800],{"class":128},[118,141127,128905],{"class":177},[118,141129,51430],{"class":128},[118,141131,131998],{"class":177},[118,141133,129475],{"class":128},[118,141135,141136],{"class":120,"line":1183},[118,141137,132005],{"class":187},[118,141139,141140,141142,141144,141146,141148,141150],{"class":120,"line":1198},[118,141141,132010],{"class":1967},[118,141143,79800],{"class":128},[118,141145,128905],{"class":177},[118,141147,51430],{"class":128},[118,141149,54757],{"class":177},[118,141151,129475],{"class":128},[118,141153,141154],{"class":120,"line":1204},[118,141155,132025],{"class":187},[118,141157,141158,141160,141162,141164,141166,141168],{"class":120,"line":1218},[118,141159,132030],{"class":1967},[118,141161,79800],{"class":128},[118,141163,128905],{"class":177},[118,141165,51430],{"class":128},[118,141167,54824],{"class":177},[118,141169,129475],{"class":128},[118,141171,141172],{"class":120,"line":1224},[118,141173,132045],{"class":187},[118,141175,141176,141178,141180,141182,141184,141186],{"class":120,"line":1315},[118,141177,132050],{"class":1967},[118,141179,79800],{"class":128},[118,141181,128905],{"class":177},[118,141183,51430],{"class":128},[118,141185,86226],{"class":177},[118,141187,129475],{"class":128},[118,141189,141190],{"class":120,"line":1321},[118,141191,132065],{"class":187},[118,141193,141194,141196,141198,141200,141202,141204],{"class":120,"line":1333},[118,141195,132070],{"class":1967},[118,141197,79800],{"class":128},[118,141199,128905],{"class":177},[118,141201,51430],{"class":128},[118,141203,132079],{"class":177},[118,141205,129475],{"class":128},[15,141207,140004],{},[109,141209,141210],{"className":126545,"code":131977,"language":126547,"meta":39,"style":39},[115,141211,141212,141216,141230,141234,141248,141252,141266,141270,141284,141288],{"__ignoreMap":39},[118,141213,141214],{"class":120,"line":121},[118,141215,131984],{"class":187},[118,141217,141218,141220,141222,141224,141226,141228],{"class":120,"line":40},[118,141219,131989],{"class":1967},[118,141221,79800],{"class":128},[118,141223,128905],{"class":177},[118,141225,51430],{"class":128},[118,141227,131998],{"class":177},[118,141229,129475],{"class":128},[118,141231,141232],{"class":120,"line":1183},[118,141233,132005],{"class":187},[118,141235,141236,141238,141240,141242,141244,141246],{"class":120,"line":1198},[118,141237,132010],{"class":1967},[118,141239,79800],{"class":128},[118,141241,128905],{"class":177},[118,141243,51430],{"class":128},[118,141245,54757],{"class":177},[118,141247,129475],{"class":128},[118,141249,141250],{"class":120,"line":1204},[118,141251,132025],{"class":187},[118,141253,141254,141256,141258,141260,141262,141264],{"class":120,"line":1218},[118,141255,132030],{"class":1967},[118,141257,79800],{"class":128},[118,141259,128905],{"class":177},[118,141261,51430],{"class":128},[118,141263,54824],{"class":177},[118,141265,129475],{"class":128},[118,141267,141268],{"class":120,"line":1224},[118,141269,132045],{"class":187},[118,141271,141272,141274,141276,141278,141280,141282],{"class":120,"line":1315},[118,141273,132050],{"class":1967},[118,141275,79800],{"class":128},[118,141277,128905],{"class":177},[118,141279,51430],{"class":128},[118,141281,86226],{"class":177},[118,141283,129475],{"class":128},[118,141285,141286],{"class":120,"line":1321},[118,141287,132065],{"class":187},[118,141289,141290,141292,141294,141296,141298,141300],{"class":120,"line":1333},[118,141291,132070],{"class":1967},[118,141293,79800],{"class":128},[118,141295,128905],{"class":177},[118,141297,51430],{"class":128},[118,141299,132079],{"class":177},[118,141301,129475],{"class":128},[1135,141303,141304,141315],{},[75,141305,141306,141307,141310,141311,101011,141313],{},"1 号盒子左侧浮动 ",[115,141308,141309],{},"sk_list"," 里面包含 ",[115,141312,1135],{},[115,141314,75],{},[75,141316,141317,141318,141310,141321,101011,141323],{},"2 号盒子左侧浮动 ",[115,141319,141320],{},"sk_con",[115,141322,1135],{},[115,141324,75],{},[15,141326,139915],{},[109,141328,141329],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,141330,141331,141337,141347],{"__ignoreMap":39},[118,141332,141333,141335],{"class":120,"line":121},[118,141334,130393],{"class":1967},[118,141336,15577],{"class":128},[118,141338,141339,141341,141343,141345],{"class":120,"line":40},[118,141340,131025],{"class":177},[118,141342,51430],{"class":128},[118,141344,23741],{"class":177},[118,141346,1294],{"class":128},[118,141348,141349],{"class":120,"line":1183},[118,141350,1569],{"class":128},[15,141352,140004],{},[109,141354,141355],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,141356,141357,141363,141373],{"__ignoreMap":39},[118,141358,141359,141361],{"class":120,"line":121},[118,141360,130393],{"class":1967},[118,141362,15577],{"class":128},[118,141364,141365,141367,141369,141371],{"class":120,"line":40},[118,141366,131025],{"class":177},[118,141368,51430],{"class":128},[118,141370,23741],{"class":177},[118,141372,1294],{"class":128},[118,141374,141375],{"class":120,"line":1183},[118,141376,1569],{"class":128},[89,141378,141380,141381],{"id":141379},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[115,141382,141383],{},"sk_container",[1466,141385],{"style":126401,"src":141386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1135,141388,141389,141394],{},[75,141390,140569,141391,141393],{},[115,141392,141383],{}," 给宽度 1200，不要给高度",[75,141395,141396],{},"一定不要忘记清除浮动",[15,141398,139915],{},[109,141400,141401],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,141402,141403,141409,141419],{"__ignoreMap":39},[118,141404,141405,141407],{"class":120,"line":121},[118,141406,130393],{"class":1967},[118,141408,15577],{"class":128},[118,141410,141411,141413,141415,141417],{"class":120,"line":40},[118,141412,131025],{"class":177},[118,141414,51430],{"class":128},[118,141416,23741],{"class":177},[118,141418,1294],{"class":128},[118,141420,141421],{"class":120,"line":1183},[118,141422,1569],{"class":128},[72,141424,141425],{},[75,141426,141427],{},"sk_hd制作",[1135,141429,141430],{},[75,141431,140649,141432,141435],{},[115,141433,141434],{},"sk_hd"," ，插入图片即可",[15,141437,139915],{},[109,141439,141440],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,141441,141442],{"__ignoreMap":39},[118,141443,141444,141446,141448,141450,141452,141454,141456,141458,141460,141462,141464,141466],{"class":120,"line":121},[118,141445,1038],{"class":128},[118,141447,1466],{"class":51293},[118,141449,55232],{"class":1967},[118,141451,174],{"class":128},[118,141453,134062],{"class":233},[118,141455,55240],{"class":1967},[118,141457,174],{"class":128},[118,141459,134069],{"class":233},[118,141461,134072],{"class":1967},[118,141463,174],{"class":128},[118,141465,134077],{"class":233},[118,141467,51300],{"class":128},[72,141469,141470],{"start":40},[75,141471,141472],{},"sk_bd制作",[1135,141474,141475],{},[75,141476,141477,141478,141481,141482,101011,141484,141486],{},"3 号盒子 ",[115,141479,141480],{},"sk_bd"," ，里面包含很多的 ",[115,141483,1135],{},[115,141485,75],{},[1135,141487,141488,141497],{},[75,141489,141490,141491,141493,141494,141496],{},"当鼠标移入到 ",[115,141492,75],{}," 上面的时候显示红色的边框，在这里先给 ",[115,141495,75],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[75,141498,141499,141500,141502,141503,141505,141506,141509,141510,141512],{},"由于给每个 ",[115,141501,75],{}," 都设置了外边距，导致一行的最后一个 ",[115,141504,75],{}," 掉了下来，在这里我们利用 ",[115,141507,141508],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[115,141511,75],{},"，去掉外边距就好了",[15,141514,139915],{},[109,141516,141517],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},[115,141518,141519,141525,141537],{"__ignoreMap":39},[118,141520,141521,141523],{"class":120,"line":121},[118,141522,51604],{"class":51293},[118,141524,15577],{"class":128},[118,141526,141527,141529,141531,141533,141535],{"class":120,"line":40},[118,141528,70463],{"class":177},[118,141530,51430],{"class":128},[118,141532,320],{"class":177},[118,141534,51549],{"class":177},[118,141536,1294],{"class":128},[118,141538,141539],{"class":120,"line":1183},[118,141540,1569],{"class":128},[15,141542,140004],{},[109,141544,141545],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},[115,141546,141547,141553,141565],{"__ignoreMap":39},[118,141548,141549,141551],{"class":120,"line":121},[118,141550,51604],{"class":51293},[118,141552,15577],{"class":128},[118,141554,141555,141557,141559,141561,141563],{"class":120,"line":40},[118,141556,70463],{"class":177},[118,141558,51430],{"class":128},[118,141560,320],{"class":177},[118,141562,51549],{"class":177},[118,141564,1294],{"class":128},[118,141566,141567],{"class":120,"line":1183},[118,141568,1569],{"class":128},[60,141570,141572],{"id":141571},"_163-注册页面制作","16.3 注册页面制作",[1466,141574],{"style":126401,"src":141575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[15,141577,141578,141580],{},[278,141579,9030],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1466,141582],{"style":126401,"src":141583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[89,141585,141587],{"id":141586},"_1631-准备工作","16.3.1 准备工作",[1135,141589,141590,141593],{},[75,141591,141592],{},"创建register.html，引入 base.css，引入favicon图标",[75,141594,141595],{},"创建register.css ，在html页面进行引入",[89,141597,141599,141600,141602],{"id":141598},"_1632-header-头部实现","16.3.2 ",[115,141601,131550],{}," 头部实现",[1135,141604,141605,141608],{},[75,141606,141607],{},"整个内容用 版心 进行包裹",[75,141609,141610],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[15,141612,139915],{},[109,141614,141615],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,141616,141617],{"__ignoreMap":39},[118,141618,141619,141621,141623,141625,141627,141629,141631,141633,141635,141637,141639,141641],{"class":120,"line":121},[118,141620,1038],{"class":128},[118,141622,1466],{"class":51293},[118,141624,55232],{"class":1967},[118,141626,174],{"class":128},[118,141628,134062],{"class":233},[118,141630,55240],{"class":1967},[118,141632,174],{"class":128},[118,141634,134069],{"class":233},[118,141636,134072],{"class":1967},[118,141638,174],{"class":128},[118,141640,134077],{"class":233},[118,141642,51300],{"class":128},[15,141644,140004],{},[109,141646,141647],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,141648,141649],{"__ignoreMap":39},[118,141650,141651,141653,141655,141657,141659,141661,141663,141665,141667,141669,141671,141673],{"class":120,"line":121},[118,141652,1038],{"class":128},[118,141654,1466],{"class":51293},[118,141656,55232],{"class":1967},[118,141658,174],{"class":128},[118,141660,134062],{"class":233},[118,141662,55240],{"class":1967},[118,141664,174],{"class":128},[118,141666,134069],{"class":233},[118,141668,134072],{"class":1967},[118,141670,174],{"class":128},[118,141672,134077],{"class":233},[118,141674,51300],{"class":128},[89,141676,141678,141679,141682],{"id":141677},"_1633-registerarea-主体模块实现","16.3.3 ",[115,141680,141681],{},"registerarea"," 主体模块实现",[1466,141684],{"style":126401,"src":141685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[15,141687,141688],{},"整个大盒子 高度为 522px，设置4个边框",[15,141690,139915],{},[109,141692,141693],{"className":126545,"code":130702,"language":126547,"meta":39,"style":39},[115,141694,141695,141701,141717],{"__ignoreMap":39},[118,141696,141697,141699],{"class":120,"line":121},[118,141698,51604],{"class":51293},[118,141700,15577],{"class":128},[118,141702,141703,141705,141707,141709,141711,141713,141715],{"class":120,"line":40},[118,141704,70889],{"class":177},[118,141706,51430],{"class":128},[118,141708,346],{"class":177},[118,141710,51485],{"class":124},[118,141712,51514],{"class":177},[118,141714,129937],{"class":177},[118,141716,1294],{"class":128},[118,141718,141719],{"class":120,"line":1183},[118,141720,1569],{"class":128},[15,141722,140004],{},[109,141724,141725],{"className":126545,"code":130702,"language":126547,"meta":39,"style":39},[115,141726,141727,141733,141749],{"__ignoreMap":39},[118,141728,141729,141731],{"class":120,"line":121},[118,141730,51604],{"class":51293},[118,141732,15577],{"class":128},[118,141734,141735,141737,141739,141741,141743,141745,141747],{"class":120,"line":40},[118,141736,70889],{"class":177},[118,141738,51430],{"class":128},[118,141740,346],{"class":177},[118,141742,51485],{"class":124},[118,141744,51514],{"class":177},[118,141746,129937],{"class":177},[118,141748,1294],{"class":128},[118,141750,141751],{"class":120,"line":1183},[118,141752,1569],{"class":128},[15,141754,141755],{},"1号盒子 是一个 h3 标签，放标题",[1135,141757,141758],{},[75,141759,141760],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[15,141762,139915],{},[109,141764,141765],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,141766,141767,141773,141783],{"__ignoreMap":39},[118,141768,141769,141771],{"class":120,"line":121},[118,141770,130393],{"class":1967},[118,141772,15577],{"class":128},[118,141774,141775,141777,141779,141781],{"class":120,"line":40},[118,141776,131025],{"class":177},[118,141778,51430],{"class":128},[118,141780,23741],{"class":177},[118,141782,1294],{"class":128},[118,141784,141785],{"class":120,"line":1183},[118,141786,1569],{"class":128},[15,141788,140004],{},[109,141790,141791],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,141792,141793,141799,141809],{"__ignoreMap":39},[118,141794,141795,141797],{"class":120,"line":121},[118,141796,130393],{"class":1967},[118,141798,15577],{"class":128},[118,141800,141801,141803,141805,141807],{"class":120,"line":40},[118,141802,131025],{"class":177},[118,141804,51430],{"class":128},[118,141806,23741],{"class":177},[118,141808,1294],{"class":128},[118,141810,141811],{"class":120,"line":1183},[118,141812,1569],{"class":128},[15,141814,141815],{},"2号盒子 里面放注册的内容",[1135,141817,141818,141821,141830,141844,141857,141860,141863,141881,141895],{},[75,141819,141820],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[75,141822,141823,141824,141826,141827,141829],{},"里面的内容利用 ",[115,141825,1135],{}," 包含 ",[115,141828,75],{}," 来实现的（不需要用表格）",[75,141831,139059,141832,141834,141835,141837,141838,141840,141841,141843],{},[115,141833,75],{}," 里面，左侧放 ",[115,141836,33601],{}," 标签， 中间放",[115,141839,53814],{}," 标签， 右侧放 ",[115,141842,118],{}," 提示信息",[75,141845,141846,141847,141849,141850,141852,141853,141856],{},"左侧 ",[115,141848,33601],{},"里面的文字都是右对齐，我们可以给",[115,141851,33601],{},"设置一个宽度（88px），然后利用",[115,141854,141855],{},"text-align"," 来设置右对齐",[75,141858,141859],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[75,141861,141862],{},"右侧 span修饰一下文字颜色",[75,141864,141865,141866],{},"提示信息的样式优化",[1135,141867,141868,141871,141874],{},[75,141869,141870],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[75,141872,141873],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[75,141875,141876,141877,141880],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[115,141878,141879],{},"vertical-algin"," 来设置 图片与文字对齐方式",[75,141882,141883,141884],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1135,141885,141886,141892],{},[75,141887,141888,141889,141891],{},"设置 ",[115,141890,23558],{}," 的 左右 12px 的内边距，设置一下文字颜色",[75,141893,141894],{},"分别设置 背景颜色",[75,141896,141897,141898,141900],{},"同意协议 和 完成注册 都是用 ",[115,141899,75],{}," 进行包裹",[15,141902,139915],{},[109,141904,141905],{"className":126545,"code":140488,"language":126547,"meta":39,"style":39},[115,141906,141907,141913,141923],{"__ignoreMap":39},[118,141908,141909,141911],{"class":120,"line":121},[118,141910,51604],{"class":51293},[118,141912,15577],{"class":128},[118,141914,141915,141917,141919,141921],{"class":120,"line":40},[118,141916,70871],{"class":177},[118,141918,51430],{"class":128},[118,141920,140505],{"class":177},[118,141922,1294],{"class":128},[118,141924,141925],{"class":120,"line":1183},[118,141926,1569],{"class":128},[15,141928,140004],{},[109,141930,141931],{"className":126545,"code":140488,"language":126547,"meta":39,"style":39},[115,141932,141933,141939,141949],{"__ignoreMap":39},[118,141934,141935,141937],{"class":120,"line":121},[118,141936,51604],{"class":51293},[118,141938,15577],{"class":128},[118,141940,141941,141943,141945,141947],{"class":120,"line":40},[118,141942,70871],{"class":177},[118,141944,51430],{"class":128},[118,141946,140505],{"class":177},[118,141948,1294],{"class":128},[118,141950,141951],{"class":120,"line":1183},[118,141952,1569],{"class":128},[89,141954,141956],{"id":141955},"_1634-底部实现","16.3.4 底部实现",[15,141958,139915],{},[109,141960,141961],{"className":126545,"code":140488,"language":126547,"meta":39,"style":39},[115,141962,141963,141969,141979],{"__ignoreMap":39},[118,141964,141965,141967],{"class":120,"line":121},[118,141966,51604],{"class":51293},[118,141968,15577],{"class":128},[118,141970,141971,141973,141975,141977],{"class":120,"line":40},[118,141972,70871],{"class":177},[118,141974,51430],{"class":128},[118,141976,140505],{"class":177},[118,141978,1294],{"class":128},[118,141980,141981],{"class":120,"line":1183},[118,141982,1569],{"class":128},[15,141984,140004],{},[109,141986,141987],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,141988,141989,141993,142007,142011],{"__ignoreMap":39},[118,141990,141991],{"class":120,"line":121},[118,141992,130656],{"class":187},[118,141994,141995,141997,141999,142001,142003,142005],{"class":120,"line":40},[118,141996,1038],{"class":128},[118,141998,51604],{"class":51293},[118,142000,53479],{"class":1967},[118,142002,174],{"class":128},[118,142004,130669],{"class":233},[118,142006,51300],{"class":128},[118,142008,142009],{"class":120,"line":1183},[118,142010,130676],{"class":128},[118,142012,142013,142015,142017],{"class":120,"line":1198},[118,142014,51778],{"class":128},[118,142016,51604],{"class":51293},[118,142018,51300],{"class":128},[60,142020,142022],{"id":142021},"_164-项目总结","16.4 项目总结",[72,142024,142025,142028,142031,142034],{},[75,142026,142027],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[75,142029,142030],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[75,142032,142033],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[75,142035,142036],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1466,142038],{"style":126401,"src":142039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[72,142041,142042],{"start":1204},[75,142043,142044],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1466,142046],{"style":126401,"src":142047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[72,142049,142050],{"start":1218},[75,142051,142052],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1466,142054],{"style":126401,"src":142055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[109,142057,142058],{"className":127292,"code":136702,"language":127294,"meta":39,"style":39},[115,142059,142060],{"__ignoreMap":39},[118,142061,142062,142064,142066,142068,142070,142072,142074,142076,142078,142080,142082,142084],{"class":120,"line":121},[118,142063,1038],{"class":128},[118,142065,53814],{"class":51293},[118,142067,53817],{"class":1967},[118,142069,174],{"class":128},[118,142071,62692],{"class":233},[118,142073,14925],{"class":1967},[118,142075,174],{"class":128},[118,142077,136723],{"class":233},[118,142079,61013],{"class":1967},[118,142081,174],{"class":128},[118,142083,136730],{"class":233},[118,142085,51300],{"class":128},[72,142087,142088,142091],{"start":1224},[75,142089,142090],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[75,142092,142093],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5131,142095,142096],{},"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":39,"searchDepth":40,"depth":40,"links":142098},[142099,142104,142111,142119],{"id":139725,"depth":40,"text":139726,"children":142100},[142101,142102,142103],{"id":139729,"depth":1183,"text":139730},{"id":140460,"depth":1183,"text":140461},{"id":140773,"depth":1183,"text":140774},{"id":141073,"depth":40,"text":141074,"children":142105},[142106,142107,142109],{"id":141077,"depth":1183,"text":141078},{"id":141095,"depth":1183,"text":142108},"16.2.2 列表页 header 和 nav 修改",{"id":141379,"depth":1183,"text":142110},"16.2.3 列表页主体 sk_container",{"id":141571,"depth":40,"text":141572,"children":142112},[142113,142114,142116,142118],{"id":141586,"depth":1183,"text":141587},{"id":141598,"depth":1183,"text":142115},"16.3.2 header 头部实现",{"id":141677,"depth":1183,"text":142117},"16.3.3 registerarea 主体模块实现",{"id":141955,"depth":1183,"text":141956},{"id":142021,"depth":40,"text":142022},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139717,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142126,"title":142127,"body":142128,"description":42,"extension":43,"meta":142236,"navigation":45,"path":142237,"seo":142238,"stem":142239,"__hash__":142240},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142129,"toc":142231},[142130,142133,142137,142140,142143,142152,142161,142165,142170,142177,142195,142198,142201,142204,142207,142210,142213,142216,142219,142222,142225,142228],[10,142131,142127],{"id":142132},"_17-web服务器与网站发布",[60,142134,142136],{"id":142135},"_171-web服务器","17.1 Web服务器",[15,142138,142139],{},"把自己网站上传到服务器上，可以让其他人访问",[1466,142141],{"style":126401,"src":142142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[15,142144,142145,142148,142149],{},[278,142146,142147],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[278,142150,142151],{},"Web 服务器等",[15,142153,142154,142155,101011,142158,25733],{},"根据服务器在网络中所在的位置不同，又可分为 ",[278,142156,142157],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[278,142159,142160],{},"远程服务器",[89,142162,142164],{"id":142163},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[15,142166,142167],{},[278,142168,142169],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[15,142171,142172,142173],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[21,142174,142175],{"href":142175,"rel":142176},"http:\u002F\u002Ffree.3v.do\u002F",[25],[1135,142178,142179,142182,142185,142192],{},[75,142180,142181],{},"去免费空间网站注册账号。",[75,142183,142184],{},"记录下主机名、用户名、密码、域名。",[75,142186,142187,142188,142191],{},"利用 ",[115,142189,142190],{},"utftp"," 软件 上传网站到远程服务器",[75,142193,142194],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[15,142196,142197],{},"使用软件上传，对上传软件文件进行解压",[1466,142199],{"style":126401,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1466,142202],{"style":126401,"src":142203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[15,142205,142206],{},"输入刚刚申请的服务器账号信息：",[1466,142208],{"style":126401,"src":142209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1466,142211],{"style":126401,"src":142212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1466,142214],{"style":126401,"src":142215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1466,142217],{"style":126401,"src":142218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[15,142220,142221],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1466,142223],{"style":126401,"src":142224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[15,142226,142227],{},"浏览器输入域名即可访问",[15,142229,142230],{},"首页一定必须是index",{"title":39,"searchDepth":40,"depth":40,"links":142232},[142233],{"id":142135,"depth":40,"text":142136,"children":142234},[142235],{"id":142163,"depth":1183,"text":142164},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142127,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142242,"title":142243,"body":142244,"description":42,"extension":43,"meta":143171,"navigation":45,"path":143172,"seo":143173,"stem":143174,"__hash__":143175},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142245,"toc":143154},[142246,142249,142253,142256,142259,142270,142273,142277,142281,142286,142289,142292,142295,142298,142302,142328,142332,142336,142339,142342,142346,142379,142383,142386,142389,142453,142457,142461,142464,142467,142470,142474,142519,142523,142526,142556,142560,142564,142567,142570,142574,142577,142646,142649,142757,142759,142765,142769,142772,142775,142871,142874,142878,142902,142906,142909,142913,142916,142920,142923,142926,142929,142932,142936,142939,142942,142946,142950,142953,142956,142959,142962,142966,142969,142973,142976,142979,143024,143028,143032,143035,143038,143041,143073,143077,143080,143114,143118,143121,143151],[10,142247,142243],{"id":142248},"_18-2d动画与3d转换",[60,142250,142252],{"id":142251},"_181-css3-2d转换","18.1 CSS3 2D转换",[15,142254,142255],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[15,142257,142258],{},"转换（transform）你可以简单理解为变形",[1135,142260,142261,142264,142267],{},[75,142262,142263],{},"移动：translate",[75,142265,142266],{},"旋转：rotate",[75,142268,142269],{},"缩放：scale",[1466,142271],{"style":126401,"src":142272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[89,142274,142276],{"id":142275},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22003,142278,142280],{"id":142279},"_18111-translate介绍","18.1.1.1 translate介绍",[15,142282,142283,142284],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[278,142285,133204],{},[1466,142287],{"style":126401,"src":142288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[15,142290,142291],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[15,142293,142294],{},"对于行内元素无效",[15,142296,142297],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22003,142299,142301],{"id":142300},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[109,142303,142304],{"className":126545,"code":138734,"language":126547,"meta":39,"style":39},[115,142305,142306,142312,142324],{"__ignoreMap":39},[118,142307,142308,142310],{"class":120,"line":121},[118,142309,51604],{"class":51293},[118,142311,15577],{"class":128},[118,142313,142314,142316,142318,142320,142322],{"class":120,"line":40},[118,142315,70463],{"class":177},[118,142317,51430],{"class":128},[118,142319,320],{"class":177},[118,142321,51549],{"class":177},[118,142323,1294],{"class":128},[118,142325,142326],{"class":120,"line":1183},[118,142327,1569],{"class":128},[89,142329,142331],{"id":142330},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22003,142333,142335],{"id":142334},"_18121-rotate介绍","18.1.2.1 rotate介绍",[15,142337,142338],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1466,142340],{"style":126401,"src":142341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22003,142343,142345],{"id":142344},"_18122-旋转效果","18.1.2.2 旋转效果",[109,142347,142349],{"className":126545,"code":142348,"language":126547,"meta":39,"style":39},"div {\n  transform: rotate(45deg);\n}\n",[115,142350,142351,142357,142375],{"__ignoreMap":39},[118,142352,142353,142355],{"class":120,"line":121},[118,142354,51604],{"class":51293},[118,142356,15577],{"class":128},[118,142358,142359,142361,142363,142366,142368,142370,142373],{"class":120,"line":40},[118,142360,136529],{"class":177},[118,142362,51430],{"class":128},[118,142364,142365],{"class":177},"rotate",[118,142367,129],{"class":128},[118,142369,657],{"class":177},[118,142371,142372],{"class":124},"deg",[118,142374,2723],{"class":128},[118,142376,142377],{"class":120,"line":1183},[118,142378,1569],{"class":128},[22003,142380,142382],{"id":142381},"_18123-三角做法","18.1.2.3 三角做法",[15,142384,142385],{},"该下标当经过最外层大盒子时会实现向上反转",[1466,142387],{"style":126401,"src":142388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[109,142390,142391],{"className":126545,"code":135065,"language":126547,"meta":39,"style":39},[115,142392,142393,142397,142403,142413,142423,142439,142449],{"__ignoreMap":39},[118,142394,142395],{"class":120,"line":121},[118,142396,135072],{"class":187},[118,142398,142399,142401],{"class":120,"line":40},[118,142400,135077],{"class":1967},[118,142402,15577],{"class":128},[118,142404,142405,142407,142409,142411],{"class":120,"line":1183},[118,142406,70561],{"class":177},[118,142408,51430],{"class":128},[118,142410,320],{"class":177},[118,142412,1294],{"class":128},[118,142414,142415,142417,142419,142421],{"class":120,"line":1198},[118,142416,70781],{"class":177},[118,142418,51430],{"class":128},[118,142420,320],{"class":177},[118,142422,1294],{"class":128},[118,142424,142425,142427,142429,142431,142433,142435,142437],{"class":120,"line":1204},[118,142426,70889],{"class":177},[118,142428,51430],{"class":128},[118,142430,574],{"class":177},[118,142432,51485],{"class":124},[118,142434,51514],{"class":177},[118,142436,63984],{"class":177},[118,142438,1294],{"class":128},[118,142440,142441,142443,142445,142447],{"class":120,"line":1218},[118,142442,135120],{"class":177},[118,142444,51430],{"class":128},[118,142446,62362],{"class":177},[118,142448,1294],{"class":128},[118,142450,142451],{"class":120,"line":1224},[118,142452,1569],{"class":128},[89,142454,142456],{"id":142455},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22003,142458,142460],{"id":142459},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[15,142462,142463],{},"设置中心点",[1466,142465],{"style":126401,"src":142466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[15,142468,142469],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22003,142471,142473],{"id":142472},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[109,142475,142477],{"className":126545,"code":142476,"language":126547,"meta":39,"style":39},"\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",[115,142478,142479,142484,142490,142505,142510,142515],{"__ignoreMap":39},[118,142480,142481],{"class":120,"line":121},[118,142482,142483],{"class":187},"\u002F* 转换中心点 *\u002F\n",[118,142485,142486,142488],{"class":120,"line":40},[118,142487,51604],{"class":51293},[118,142489,15577],{"class":128},[118,142491,142492,142495,142497,142499,142501,142503],{"class":120,"line":1183},[118,142493,142494],{"class":177},"  transform-origin",[118,142496,51430],{"class":128},[118,142498,51585],{"class":177},[118,142500,17149],{"class":177},[118,142502,130408],{"class":128},[118,142504,135218],{"class":187},[118,142506,142507],{"class":120,"line":1198},[118,142508,142509],{"class":187},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[118,142511,142512],{"class":120,"line":1204},[118,142513,142514],{"class":187},"  \u002F* transform-origin: left top; *\u002F\n",[118,142516,142517],{"class":120,"line":1218},[118,142518,1569],{"class":128},[22003,142520,142522],{"id":142521},"_18133-旋转案例","18.1.3.3 旋转案例",[1466,142524],{"style":126401,"src":142525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[109,142527,142528],{"className":126545,"code":142348,"language":126547,"meta":39,"style":39},[115,142529,142530,142536,142552],{"__ignoreMap":39},[118,142531,142532,142534],{"class":120,"line":121},[118,142533,51604],{"class":51293},[118,142535,15577],{"class":128},[118,142537,142538,142540,142542,142544,142546,142548,142550],{"class":120,"line":40},[118,142539,136529],{"class":177},[118,142541,51430],{"class":128},[118,142543,142365],{"class":177},[118,142545,129],{"class":128},[118,142547,657],{"class":177},[118,142549,142372],{"class":124},[118,142551,2723],{"class":128},[118,142553,142554],{"class":120,"line":1183},[118,142555,1569],{"class":128},[89,142557,142559],{"id":142558},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22003,142561,142563],{"id":142562},"_18141-scale介绍","18.1.4.1 scale介绍",[15,142565,142566],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1466,142568],{"style":126401,"src":142569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22003,142571,142573],{"id":142572},"_18142-分页按钮","18.1.4.2 分页按钮",[1466,142575],{"style":126401,"src":142576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[109,142578,142580],{"className":126545,"code":142579,"language":126547,"meta":39,"style":39},"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",[115,142581,142582,142588,142604,142608,142612,142617,142623,142637,142642],{"__ignoreMap":39},[118,142583,142584,142586],{"class":120,"line":121},[118,142585,51604],{"class":51293},[118,142587,15577],{"class":128},[118,142589,142590,142592,142594,142597,142599,142602],{"class":120,"line":40},[118,142591,136529],{"class":177},[118,142593,51430],{"class":128},[118,142595,142596],{"class":177},"scale",[118,142598,129],{"class":128},[118,142600,142601],{"class":177},"1.2",[118,142603,2723],{"class":128},[118,142605,142606],{"class":120,"line":1183},[118,142607,1569],{"class":128},[118,142609,142610],{"class":120,"line":1198},[118,142611,136006],{"class":128},[118,142613,142614],{"class":120,"line":1204},[118,142615,142616],{"class":187},"\u002F* 2D 缩放 *\u002F\n",[118,142618,142619,142621],{"class":120,"line":1218},[118,142620,51604],{"class":51293},[118,142622,15577],{"class":128},[118,142624,142625,142627,142629,142631,142633,142635],{"class":120,"line":1224},[118,142626,136529],{"class":177},[118,142628,51430],{"class":128},[118,142630,142596],{"class":177},[118,142632,129],{"class":128},[118,142634,142601],{"class":177},[118,142636,2723],{"class":128},[118,142638,142639],{"class":120,"line":1315},[118,142640,142641],{"class":187},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[118,142643,142644],{"class":120,"line":1321},[118,142645,1569],{"class":128},[15,142647,142648],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[109,142650,142652],{"className":126545,"code":142651,"language":126547,"meta":39,"style":39},"\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",[115,142653,142654,142659,142669,142690,142711,142715,142720,142726,142753],{"__ignoreMap":39},[118,142655,142656],{"class":120,"line":121},[118,142657,142658],{"class":187},"\u002F* 定义动画 *\u002F\n",[118,142660,142661,142664,142667],{"class":120,"line":40},[118,142662,142663],{"class":124},"@keyframes",[118,142665,142666],{"class":5221}," move",[118,142668,15577],{"class":128},[118,142670,142671,142674,142676,142678,142680,142683,142685,142687],{"class":120,"line":1183},[118,142672,142673],{"class":1967},"  0%",[118,142675,79800],{"class":128},[118,142677,48127],{"class":177},[118,142679,51430],{"class":128},[118,142681,142682],{"class":177},"translateX",[118,142684,129],{"class":128},[118,142686,320],{"class":177},[118,142688,142689],{"class":128},"); }\n",[118,142691,142692,142695,142697,142699,142701,142703,142705,142707,142709],{"class":120,"line":1198},[118,142693,142694],{"class":1967},"  100%",[118,142696,79800],{"class":128},[118,142698,48127],{"class":177},[118,142700,51430],{"class":128},[118,142702,142682],{"class":177},[118,142704,129],{"class":128},[118,142706,439],{"class":177},[118,142708,51485],{"class":124},[118,142710,142689],{"class":128},[118,142712,142713],{"class":120,"line":1204},[118,142714,1569],{"class":128},[118,142716,142717],{"class":120,"line":1218},[118,142718,142719],{"class":187},"\u002F* 调用动画 *\u002F\n",[118,142721,142722,142724],{"class":120,"line":1224},[118,142723,51604],{"class":51293},[118,142725,15577],{"class":128},[118,142727,142728,142731,142733,142735,142737,142739,142741,142743,142745,142748,142751],{"class":120,"line":1315},[118,142729,142730],{"class":177},"  animation",[118,142732,51430],{"class":128},[118,142734,135231],{"class":177},[118,142736,25123],{"class":177},[118,142738,823],{"class":124},[118,142740,78673],{"class":177},[118,142742,4097],{"class":177},[118,142744,823],{"class":124},[118,142746,142747],{"class":177}," infinite",[118,142749,142750],{"class":177}," alternate",[118,142752,1294],{"class":128},[118,142754,142755],{"class":120,"line":1321},[118,142756,1569],{"class":128},[15,142758,142648],{},[109,142760,142763],{"className":142761,"code":142762,"language":5192},[5190],"\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",[115,142764,142762],{"__ignoreMap":39},[22003,142766,142768],{"id":142767},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[15,142770,142771],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1466,142773],{"style":126401,"src":142774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[109,142776,142777],{"className":126545,"code":142651,"language":126547,"meta":39,"style":39},[115,142778,142779,142783,142791,142809,142829,142833,142837,142843,142867],{"__ignoreMap":39},[118,142780,142781],{"class":120,"line":121},[118,142782,142658],{"class":187},[118,142784,142785,142787,142789],{"class":120,"line":40},[118,142786,142663],{"class":124},[118,142788,142666],{"class":5221},[118,142790,15577],{"class":128},[118,142792,142793,142795,142797,142799,142801,142803,142805,142807],{"class":120,"line":1183},[118,142794,142673],{"class":1967},[118,142796,79800],{"class":128},[118,142798,48127],{"class":177},[118,142800,51430],{"class":128},[118,142802,142682],{"class":177},[118,142804,129],{"class":128},[118,142806,320],{"class":177},[118,142808,142689],{"class":128},[118,142810,142811,142813,142815,142817,142819,142821,142823,142825,142827],{"class":120,"line":1198},[118,142812,142694],{"class":1967},[118,142814,79800],{"class":128},[118,142816,48127],{"class":177},[118,142818,51430],{"class":128},[118,142820,142682],{"class":177},[118,142822,129],{"class":128},[118,142824,439],{"class":177},[118,142826,51485],{"class":124},[118,142828,142689],{"class":128},[118,142830,142831],{"class":120,"line":1204},[118,142832,1569],{"class":128},[118,142834,142835],{"class":120,"line":1218},[118,142836,142719],{"class":187},[118,142838,142839,142841],{"class":120,"line":1224},[118,142840,51604],{"class":51293},[118,142842,15577],{"class":128},[118,142844,142845,142847,142849,142851,142853,142855,142857,142859,142861,142863,142865],{"class":120,"line":1315},[118,142846,142730],{"class":177},[118,142848,51430],{"class":128},[118,142850,135231],{"class":177},[118,142852,25123],{"class":177},[118,142854,823],{"class":124},[118,142856,78673],{"class":177},[118,142858,4097],{"class":177},[118,142860,823],{"class":124},[118,142862,142747],{"class":177},[118,142864,142750],{"class":177},[118,142866,1294],{"class":128},[118,142868,142869],{"class":120,"line":1321},[118,142870,1569],{"class":128},[15,142872,142873],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[89,142875,142877],{"id":142876},"_1823-知识点回顾","18.2.3 知识点回顾",[109,142879,142880],{"className":126545,"code":128714,"language":126547,"meta":39,"style":39},[115,142881,142882,142888,142898],{"__ignoreMap":39},[118,142883,142884,142886],{"class":120,"line":121},[118,142885,51604],{"class":51293},[118,142887,15577],{"class":128},[118,142889,142890,142892,142894,142896],{"class":120,"line":40},[118,142891,128727],{"class":177},[118,142893,51430],{"class":128},[118,142895,61729],{"class":177},[118,142897,1294],{"class":128},[118,142899,142900],{"class":120,"line":1183},[118,142901,1569],{"class":128},[60,142903,142905],{"id":142904},"_183-3d-转换","18.3 3D 转换",[15,142907,142908],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[89,142910,142912],{"id":142911},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1466,142914],{"style":126401,"src":142915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[89,142917,142919],{"id":142918},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1466,142921],{"style":126401,"src":142922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[15,142924,142925],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[15,142927,142928],{},"translate3d的效果需要搭配透视perspective来使用",[1466,142930],{"style":126401,"src":142931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[89,142933,142935],{"id":142934},"_1833-透视-perspective","18.3.3 透视 perspective",[1466,142937],{"style":126401,"src":142938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[15,142940,142941],{},"透视写在父盒子上，单位为像素",[89,142943,142945],{"id":142944},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22003,142947,142949],{"id":142948},"_18341-分开解释","18.3.4.1 分开解释",[1466,142951],{"style":126401,"src":142952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1466,142954],{"style":126401,"src":142955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1466,142957],{"style":126401,"src":142958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[15,142960,142961],{},"总结来说就是左手原则",[22003,142963,142965],{"id":142964},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1466,142967],{"style":126401,"src":142968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[89,142970,142972],{"id":142971},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1466,142974],{"style":126401,"src":142975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1466,142977],{"style":126401,"src":142978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[109,142980,142982],{"className":126545,"code":142981,"language":126547,"meta":39,"style":39},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[115,142983,142984,142990,143003,143020],{"__ignoreMap":39},[118,142985,142986,142988],{"class":120,"line":121},[118,142987,51604],{"class":51293},[118,142989,15577],{"class":128},[118,142991,142992,142995,142997,142999,143001],{"class":120,"line":40},[118,142993,142994],{"class":177},"  perspective",[118,142996,51430],{"class":128},[118,142998,65067],{"class":177},[118,143000,51485],{"class":124},[118,143002,1294],{"class":128},[118,143004,143005,143007,143009,143012,143014,143016,143018],{"class":120,"line":1183},[118,143006,136529],{"class":177},[118,143008,51430],{"class":128},[118,143010,143011],{"class":177},"rotateX",[118,143013,129],{"class":128},[118,143015,657],{"class":177},[118,143017,142372],{"class":124},[118,143019,2723],{"class":128},[118,143021,143022],{"class":120,"line":1198},[118,143023,1569],{"class":128},[89,143025,143027],{"id":143026},"_1836-案例","18.3.6 案例",[22003,143029,143031],{"id":143030},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1466,143033],{"style":126401,"src":143034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1466,143036],{"style":126401,"src":143037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1466,143039],{"style":126401,"src":143040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[109,143042,143044],{"className":126545,"code":143043,"language":126547,"meta":39,"style":39},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[115,143045,143046,143051,143057,143069],{"__ignoreMap":39},[118,143047,143048],{"class":120,"line":121},[118,143049,143050],{"class":187},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[118,143052,143053,143055],{"class":120,"line":40},[118,143054,133542],{"class":1967},[118,143056,15577],{"class":128},[118,143058,143059,143061,143063,143065,143067],{"class":120,"line":1183},[118,143060,142994],{"class":177},[118,143062,51430],{"class":128},[118,143064,65067],{"class":177},[118,143066,51485],{"class":124},[118,143068,1294],{"class":128},[118,143070,143071],{"class":120,"line":1198},[118,143072,1569],{"class":128},[22003,143074,143076],{"id":143075},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1466,143078],{"style":126401,"src":143079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[109,143081,143082],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,143083,143084,143088,143102,143106],{"__ignoreMap":39},[118,143085,143086],{"class":120,"line":121},[118,143087,130656],{"class":187},[118,143089,143090,143092,143094,143096,143098,143100],{"class":120,"line":40},[118,143091,1038],{"class":128},[118,143093,51604],{"class":51293},[118,143095,53479],{"class":1967},[118,143097,174],{"class":128},[118,143099,130669],{"class":233},[118,143101,51300],{"class":128},[118,143103,143104],{"class":120,"line":1183},[118,143105,130676],{"class":128},[118,143107,143108,143110,143112],{"class":120,"line":1198},[118,143109,51778],{"class":128},[118,143111,51604],{"class":51293},[118,143113,51300],{"class":128},[22003,143115,143117],{"id":143116},"_18363-旋转木马","18.3.6.3 旋转木马",[1466,143119],{"style":126401,"src":143120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[109,143122,143123],{"className":126545,"code":142348,"language":126547,"meta":39,"style":39},[115,143124,143125,143131,143147],{"__ignoreMap":39},[118,143126,143127,143129],{"class":120,"line":121},[118,143128,51604],{"class":51293},[118,143130,15577],{"class":128},[118,143132,143133,143135,143137,143139,143141,143143,143145],{"class":120,"line":40},[118,143134,136529],{"class":177},[118,143136,51430],{"class":128},[118,143138,142365],{"class":177},[118,143140,129],{"class":128},[118,143142,657],{"class":177},[118,143144,142372],{"class":124},[118,143146,2723],{"class":128},[118,143148,143149],{"class":120,"line":1183},[118,143150,1569],{"class":128},[5131,143152,143153],{},"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":39,"searchDepth":40,"depth":40,"links":143155},[143156,143163],{"id":142251,"depth":40,"text":142252,"children":143157},[143158,143159,143160,143161,143162],{"id":142275,"depth":1183,"text":142276},{"id":142330,"depth":1183,"text":142331},{"id":142455,"depth":1183,"text":142456},{"id":142558,"depth":1183,"text":142559},{"id":142876,"depth":1183,"text":142877},{"id":142904,"depth":40,"text":142905,"children":143164},[143165,143166,143167,143168,143169,143170],{"id":142911,"depth":1183,"text":142912},{"id":142918,"depth":1183,"text":142919},{"id":142934,"depth":1183,"text":142935},{"id":142944,"depth":1183,"text":142945},{"id":142971,"depth":1183,"text":142972},{"id":143026,"depth":1183,"text":143027},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142243,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143177,"title":143178,"body":143179,"description":42,"extension":43,"meta":143382,"navigation":45,"path":143383,"seo":143384,"stem":143385,"__hash__":143386},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143180,"toc":143371},[143181,143184,143188,143191,143194,143198,143201,143204,143207,143211,143214,143218,143221,143225,143228,143232,143246,143250,143275,143278,143281,143298,143302,143306,143309,143312,143316,143319,143322,143340,143344,143347,143361,143365,143368],[10,143182,143178],{"id":143183},"_19-移动端基础-前缀现状与视口",[60,143185,143187],{"id":143186},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1466,143189],{"style":126401,"src":143190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[15,143192,143193],{},"意思就是加个前缀，增加兼容性",[60,143195,143197],{"id":143196},"_192-移动端现状认识","19.2 移动端现状认识",[1466,143199],{"style":126401,"src":143200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[15,143202,143203],{},"调试方法：",[1466,143205],{"style":126401,"src":143206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[60,143208,143210],{"id":143209},"_193-视口","19.3 视口",[15,143212,143213],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[89,143215,143217],{"id":143216},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1466,143219],{"style":126401,"src":143220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[89,143222,143224],{"id":143223},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1466,143226],{"style":126401,"src":143227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[89,143229,143231],{"id":143230},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1135,143233,143234,143237,143240,143243],{},[75,143235,143236],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[75,143238,143239],{},"理想视口，对设备来讲，是最理想的视口尺寸",[75,143241,143242],{},"需要手动添写meta视口标签通知浏览器操作",[75,143244,143245],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[89,143247,143249],{"id":143248},"_1934-meta视口标签","19.3.4 meta视口标签",[109,143251,143253],{"className":127292,"code":143252,"language":127294,"meta":39,"style":39},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[115,143254,143255],{"__ignoreMap":39},[118,143256,143257,143259,143261,143263,143265,143267,143269,143271,143273],{"class":120,"line":121},[118,143258,1038],{"class":128},[118,143260,51337],{"class":51293},[118,143262,14925],{"class":1967},[118,143264,174],{"class":128},[118,143266,51384],{"class":233},[118,143268,51364],{"class":1967},[118,143270,174],{"class":128},[118,143272,51391],{"class":233},[118,143274,51300],{"class":128},[1466,143276],{"style":126401,"src":143277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[15,143279,143280],{},"标准视口设置：",[72,143282,143283,143286,143289,143292,143295],{},[75,143284,143285],{},"视口宽度和设备保持一致",[75,143287,143288],{},"视口的默认缩放比例1.0",[75,143290,143291],{},"不允许用户自行缩放",[75,143293,143294],{},"最大允许的缩放比例1.0",[75,143296,143297],{},"最小允许的缩放比例1.0",[89,143299,143301],{"id":143300},"_1935-二倍图","19.3.5 二倍图",[22003,143303,143305],{"id":143304},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1466,143307],{"style":126401,"src":143308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1466,143310],{"style":126401,"src":143311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22003,143313,143315],{"id":143314},"_19352-多倍图","19.3.5.2 多倍图",[1466,143317],{"style":126401,"src":143318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[15,143320,143321],{},"二倍图法，代码如下：",[109,143323,143325],{"className":126545,"code":143324,"language":126547,"meta":39,"style":39},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[115,143326,143327,143332],{"__ignoreMap":39},[118,143328,143329],{"class":120,"line":121},[118,143330,143331],{"class":187},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[118,143333,143334,143337],{"class":120,"line":40},[118,143335,143336],{"class":51293},"background-size",[118,143338,143339],{"class":128},": 50% 50%;\n",[22003,143341,143343],{"id":143342},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1466,143345],{"style":126401,"src":143346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[72,143348,143349,143352,143355,143358],{},[75,143350,143351],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[75,143353,143354],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[75,143356,143357],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[75,143359,143360],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22003,143362,143364],{"id":143363},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1466,143366],{"style":126401,"src":143367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5131,143369,143370],{},"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":39,"searchDepth":40,"depth":40,"links":143372},[143373,143374,143375],{"id":143186,"depth":40,"text":143187},{"id":143196,"depth":40,"text":143197},{"id":143209,"depth":40,"text":143210,"children":143376},[143377,143378,143379,143380,143381],{"id":143216,"depth":1183,"text":143217},{"id":143223,"depth":1183,"text":143224},{"id":143230,"depth":1183,"text":143231},{"id":143248,"depth":1183,"text":143249},{"id":143300,"depth":1183,"text":143301},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143178,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143388,"title":143389,"body":143390,"description":42,"extension":43,"meta":144267,"navigation":45,"path":144268,"seo":144269,"stem":144270,"__hash__":144271},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143391,"toc":144251},[143392,143395,143399,143406,143409,143416,143419,143424,143427,143431,143435,143442,143445,143448,143452,143455,143458,143461,143464,143467,143471,143474,143478,143480,143483,143486,143489,143492,143494,143497,143499,143529,143531,143561,143565,143568,143572,143575,143592,143595,143598,143674,143676,143679,143682,143685,143688,143690,143693,143696,143700,143722,143725,143728,143732,143735,143741,143744,143748,143751,143754,143758,143761,143764,143767,143771,143774,143777,143780,143783,143787,143790,143794,143801,143804,143807,143810,143813,143823,143826,143829,143836,143839,143843,143846,143849,143853,143856,143859,143862,143907,143910,143913,143916,143918,144047,144049,144087,144090,144093,144095,144213,144215,144249],[10,143393,143389],{"id":143394},"_20-移动端布局实战上篇",[60,143396,143398],{"id":143397},"_201-移动端主流方案","20.1 移动端主流方案",[72,143400,143401],{},[75,143402,143403],{},[278,143404,143405],{},"单独移动端页面（主流）",[1466,143407],{"style":126401,"src":143408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[72,143410,143411],{"start":40},[75,143412,143413],{},[278,143414,143415],{},"响应式兼容PC移动端",[1466,143417],{"style":126401,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[72,143420,143421],{"start":1183},[75,143422,143423],{},"两种页面选型布局方式",[1466,143425],{"style":126401,"src":143426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[60,143428,143430],{"id":143429},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[89,143432,143434],{"id":143433},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[15,143436,143437,143438],{},"官网地址： ",[21,143439,143440],{"href":143440,"rel":143441},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25],[1466,143443],{"style":126401,"src":143444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1466,143446],{"style":126401,"src":143447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[89,143449,143451],{"id":143450},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1466,143453],{"style":126401,"src":143454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1466,143456],{"style":126401,"src":143457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[15,143459,143460],{},"去除高亮：",[15,143462,143463],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[15,143465,143466],{},"-webkit- tap-highlight-color: transparent;",[60,143468,143470],{"id":143469},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1466,143472],{"style":126401,"src":143473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[60,143475,143477],{"id":143476},"_204-流式布局案例","20.4 流式布局案例",[15,143479,158],{},[15,143481,143482],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[15,143484,143485],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[15,143487,143488],{},"图片格式：",[1466,143490],{"style":126401,"src":143491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[15,143493,135588],{},[1466,143495],{"style":126401,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[15,143498,139915],{},[109,143500,143501],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,143502,143503],{"__ignoreMap":39},[118,143504,143505,143507,143509,143511,143513,143515,143517,143519,143521,143523,143525,143527],{"class":120,"line":121},[118,143506,1038],{"class":128},[118,143508,1466],{"class":51293},[118,143510,55232],{"class":1967},[118,143512,174],{"class":128},[118,143514,134062],{"class":233},[118,143516,55240],{"class":1967},[118,143518,174],{"class":128},[118,143520,134069],{"class":233},[118,143522,134072],{"class":1967},[118,143524,174],{"class":128},[118,143526,134077],{"class":233},[118,143528,51300],{"class":128},[15,143530,140004],{},[109,143532,143533],{"className":127292,"code":134047,"language":127294,"meta":39,"style":39},[115,143534,143535],{"__ignoreMap":39},[118,143536,143537,143539,143541,143543,143545,143547,143549,143551,143553,143555,143557,143559],{"class":120,"line":121},[118,143538,1038],{"class":128},[118,143540,1466],{"class":51293},[118,143542,55232],{"class":1967},[118,143544,174],{"class":128},[118,143546,134062],{"class":233},[118,143548,55240],{"class":1967},[118,143550,174],{"class":128},[118,143552,134069],{"class":233},[118,143554,134072],{"class":1967},[118,143556,174],{"class":128},[118,143558,134077],{"class":233},[118,143560,51300],{"class":128},[60,143562,143564],{"id":143563},"_205-flex布局","20.5 flex布局",[1466,143566],{"style":126401,"src":143567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[89,143569,143571],{"id":143570},"_2051-布局原理","20.5.1 布局原理",[15,143573,143574],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1135,143576,143577,143580,143583,143586,143589],{},[75,143578,143579],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[75,143581,143582],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[75,143584,143585],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[75,143587,143588],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[75,143590,143591],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[15,143593,143594],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[15,143596,143597],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[109,143599,143601],{"className":126545,"code":143600,"language":126547,"meta":39,"style":39},"\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",[115,143602,143603,143608,143615,143625,143637,143648,143659,143670],{"__ignoreMap":39},[118,143604,143605],{"class":120,"line":121},[118,143606,143607],{"class":187},"\u002F* Flex 弹性布局 *\u002F\n",[118,143609,143610,143613],{"class":120,"line":40},[118,143611,143612],{"class":1967},".container",[118,143614,15577],{"class":128},[118,143616,143617,143619,143621,143623],{"class":120,"line":1183},[118,143618,128161],{"class":177},[118,143620,51430],{"class":128},[118,143622,51470],{"class":177},[118,143624,1294],{"class":128},[118,143626,143627,143630,143632,143635],{"class":120,"line":1198},[118,143628,143629],{"class":177},"  flex-direction",[118,143631,51430],{"class":128},[118,143633,143634],{"class":177},"row",[118,143636,1294],{"class":128},[118,143638,143639,143642,143644,143646],{"class":120,"line":1204},[118,143640,143641],{"class":177},"  justify-content",[118,143643,51430],{"class":128},[118,143645,51661],{"class":177},[118,143647,1294],{"class":128},[118,143649,143650,143653,143655,143657],{"class":120,"line":1218},[118,143651,143652],{"class":177},"  align-items",[118,143654,51430],{"class":128},[118,143656,51585],{"class":177},[118,143658,1294],{"class":128},[118,143660,143661,143664,143666,143668],{"class":120,"line":1224},[118,143662,143663],{"class":177},"  flex-wrap",[118,143665,51430],{"class":128},[118,143667,78603],{"class":177},[118,143669,1294],{"class":128},[118,143671,143672],{"class":120,"line":1315},[118,143673,1569],{"class":128},[15,143675,70446],{},[15,143677,143678],{},".form-item .male-label {",[15,143680,143681],{},"   margin-right: 20px;",[15,143683,143684],{},"   display: inline-flex;",[15,143686,143687],{},"   align-items: center;",[15,143689,1074],{},[1466,143691],{"style":126401,"src":143692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1466,143694],{"style":126401,"src":143695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[89,143697,143699],{"id":143698},"_2052-常见父项属性","20.5.2 常见父项属性",[72,143701,143702,143705,143708,143711,143714,143717,143720],{},[75,143703,143704],{},"flex-direction：设置主轴的方向",[75,143706,143707],{},"justify-content：设置主轴上的子元素排列方式",[75,143709,143710],{},"flex-wrap：设置子元素是否换行",[75,143712,143713],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[75,143715,143716],{},"align-items：设置侧轴上的子元素排列方式（单行）",[75,143718,143719],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[75,143721,143704],{},[1466,143723],{"style":126401,"src":143724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1466,143726],{"style":126401,"src":143727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[72,143729,143730],{"start":40},[75,143731,143707],{},[1466,143733],{"style":126401,"src":143734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[15,143736,143737,143740],{},[115,143738,143739],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[15,143742,143743],{},"跟着主轴走",[72,143745,143746],{"start":1183},[75,143747,143710],{},[1466,143749],{"style":126401,"src":143750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[15,143752,143753],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[72,143755,143756],{"start":1198},[75,143757,143713],{},[1466,143759],{"style":126401,"src":143760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[15,143762,143763],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[15,143765,143766],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[72,143768,143769],{"start":1204},[75,143770,143716],{},[1466,143772],{"style":126401,"src":143773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[15,143775,143776],{},"align-items与align-content之间的区别：",[15,143778,143779],{},"单找items，多找content",[1466,143781],{"style":126401,"src":143782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[72,143784,143785],{"start":1218},[75,143786,143719],{},[1466,143788],{"style":126401,"src":143789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[89,143791,143793],{"id":143792},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[72,143795,143796],{},[75,143797,143798],{},[278,143799,143800],{},"flex 属性",[15,143802,143803],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1466,143805],{"style":126401,"src":143806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[15,143808,143809],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[15,143811,143812],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[72,143814,143815],{"start":40},[75,143816,143817,13800,143820],{},[278,143818,143819],{},"align-self",[278,143821,143822],{},"控制子项自己在侧轴上的排列方式",[1466,143824],{"style":126401,"src":143825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[15,143827,143828],{},"单个子盒子在父盒子侧轴上的排列方式",[72,143830,143831],{"start":1183},[75,143832,143833,143835],{},[278,143834,95290],{}," 属性定义项目的排列顺序",[1466,143837],{"style":126401,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[89,143840,143842],{"id":143841},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1466,143844],{"style":126401,"src":143845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[15,143847,143848],{},"必须要添加浏览器的私有前缀",[89,143850,143852],{"id":143851},"_2055-携程网首页案例","20.5.5 携程网首页案例",[15,143854,143855],{},"学到最重要的知识：",[15,143857,143858],{},"flex处理这样的布局思路",[1466,143860],{"style":126401,"src":143861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[109,143863,143865],{"className":126545,"code":143864,"language":126547,"meta":39,"style":39},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[115,143866,143867,143873,143883,143893,143903],{"__ignoreMap":39},[118,143868,143869,143871],{"class":120,"line":121},[118,143870,143612],{"class":1967},[118,143872,15577],{"class":128},[118,143874,143875,143877,143879,143881],{"class":120,"line":40},[118,143876,128161],{"class":177},[118,143878,51430],{"class":128},[118,143880,51470],{"class":177},[118,143882,1294],{"class":128},[118,143884,143885,143887,143889,143891],{"class":120,"line":1183},[118,143886,143641],{"class":177},[118,143888,51430],{"class":128},[118,143890,51585],{"class":177},[118,143892,1294],{"class":128},[118,143894,143895,143897,143899,143901],{"class":120,"line":1198},[118,143896,143652],{"class":177},[118,143898,51430],{"class":128},[118,143900,51585],{"class":177},[118,143902,1294],{"class":128},[118,143904,143905],{"class":120,"line":1204},[118,143906,1569],{"class":128},[15,143908,143909],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[15,143911,143912],{},"使用属性选择器",[1466,143914],{"style":126401,"src":143915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[15,143917,68882],{},[109,143919,143921],{"className":127292,"code":143920,"language":127294,"meta":39,"style":39},"\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",[115,143922,143923,143928,143942,143947,143967,143972,143991,143996,144015,144020,144039],{"__ignoreMap":39},[118,143924,143925],{"class":120,"line":121},[118,143926,143927],{"class":187},"\u003C!-- 携程网移动端案例结构 -->\n",[118,143929,143930,143932,143934,143936,143938,143940],{"class":120,"line":40},[118,143931,1038],{"class":128},[118,143933,51604],{"class":51293},[118,143935,53479],{"class":1967},[118,143937,174],{"class":128},[118,143939,92316],{"class":233},[118,143941,51300],{"class":128},[118,143943,143944],{"class":120,"line":1183},[118,143945,143946],{"class":187},"  \u003C!-- 搜索栏 -->\n",[118,143948,143949,143951,143953,143955,143957,143960,143963,143965],{"class":120,"line":1198},[118,143950,52137],{"class":128},[118,143952,51604],{"class":51293},[118,143954,53479],{"class":1967},[118,143956,174],{"class":128},[118,143958,143959],{"class":233},"\"search-index\"",[118,143961,143962],{"class":128},">...\u003C\u002F",[118,143964,51604],{"class":51293},[118,143966,51300],{"class":128},[118,143968,143969],{"class":120,"line":1204},[118,143970,143971],{"class":187},"  \u003C!-- 焦点图 -->\n",[118,143973,143974,143976,143978,143980,143982,143985,143987,143989],{"class":120,"line":1218},[118,143975,52137],{"class":128},[118,143977,51604],{"class":51293},[118,143979,53479],{"class":1967},[118,143981,174],{"class":128},[118,143983,143984],{"class":233},"\"focus\"",[118,143986,143962],{"class":128},[118,143988,51604],{"class":51293},[118,143990,51300],{"class":128},[118,143992,143993],{"class":120,"line":1224},[118,143994,143995],{"class":187},"  \u003C!-- 主导航 -->\n",[118,143997,143998,144000,144002,144004,144006,144009,144011,144013],{"class":120,"line":1315},[118,143999,52137],{"class":128},[118,144001,51604],{"class":51293},[118,144003,53479],{"class":1967},[118,144005,174],{"class":128},[118,144007,144008],{"class":233},"\"local-nav\"",[118,144010,143962],{"class":128},[118,144012,51604],{"class":51293},[118,144014,51300],{"class":128},[118,144016,144017],{"class":120,"line":1321},[118,144018,144019],{"class":187},"  \u003C!-- 子导航 -->\n",[118,144021,144022,144024,144026,144028,144030,144033,144035,144037],{"class":120,"line":1333},[118,144023,52137],{"class":128},[118,144025,51604],{"class":51293},[118,144027,53479],{"class":1967},[118,144029,174],{"class":128},[118,144031,144032],{"class":233},"\"nav-common\"",[118,144034,143962],{"class":128},[118,144036,51604],{"class":51293},[118,144038,51300],{"class":128},[118,144040,144041,144043,144045],{"class":120,"line":1616},[118,144042,51778],{"class":128},[118,144044,51604],{"class":51293},[118,144046,51300],{"class":128},[15,144048,70446],{},[109,144050,144051],{"className":126545,"code":136997,"language":126547,"meta":39,"style":39},[115,144052,144053,144067,144083],{"__ignoreMap":39},[118,144054,144055,144057,144059,144061,144063,144065],{"class":120,"line":121},[118,144056,53814],{"class":51293},[118,144058,1018],{"class":128},[118,144060,103100],{"class":1967},[118,144062,174],{"class":124},[118,144064,62692],{"class":233},[118,144066,137014],{"class":128},[118,144068,144069,144071,144073,144075,144077,144079,144081],{"class":120,"line":40},[118,144070,70889],{"class":177},[118,144072,51430],{"class":128},[118,144074,346],{"class":177},[118,144076,51485],{"class":124},[118,144078,51514],{"class":177},[118,144080,130125],{"class":177},[118,144082,1294],{"class":128},[118,144084,144085],{"class":120,"line":1183},[118,144086,1569],{"class":128},[15,144088,144089],{},"总代码和效果展示：",[1466,144091],{"style":126401,"src":144092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[15,144094,68882],{},[109,144096,144097],{"className":127292,"code":143920,"language":127294,"meta":39,"style":39},[115,144098,144099,144103,144117,144121,144139,144143,144161,144165,144183,144187,144205],{"__ignoreMap":39},[118,144100,144101],{"class":120,"line":121},[118,144102,143927],{"class":187},[118,144104,144105,144107,144109,144111,144113,144115],{"class":120,"line":40},[118,144106,1038],{"class":128},[118,144108,51604],{"class":51293},[118,144110,53479],{"class":1967},[118,144112,174],{"class":128},[118,144114,92316],{"class":233},[118,144116,51300],{"class":128},[118,144118,144119],{"class":120,"line":1183},[118,144120,143946],{"class":187},[118,144122,144123,144125,144127,144129,144131,144133,144135,144137],{"class":120,"line":1198},[118,144124,52137],{"class":128},[118,144126,51604],{"class":51293},[118,144128,53479],{"class":1967},[118,144130,174],{"class":128},[118,144132,143959],{"class":233},[118,144134,143962],{"class":128},[118,144136,51604],{"class":51293},[118,144138,51300],{"class":128},[118,144140,144141],{"class":120,"line":1204},[118,144142,143971],{"class":187},[118,144144,144145,144147,144149,144151,144153,144155,144157,144159],{"class":120,"line":1218},[118,144146,52137],{"class":128},[118,144148,51604],{"class":51293},[118,144150,53479],{"class":1967},[118,144152,174],{"class":128},[118,144154,143984],{"class":233},[118,144156,143962],{"class":128},[118,144158,51604],{"class":51293},[118,144160,51300],{"class":128},[118,144162,144163],{"class":120,"line":1224},[118,144164,143995],{"class":187},[118,144166,144167,144169,144171,144173,144175,144177,144179,144181],{"class":120,"line":1315},[118,144168,52137],{"class":128},[118,144170,51604],{"class":51293},[118,144172,53479],{"class":1967},[118,144174,174],{"class":128},[118,144176,144008],{"class":233},[118,144178,143962],{"class":128},[118,144180,51604],{"class":51293},[118,144182,51300],{"class":128},[118,144184,144185],{"class":120,"line":1321},[118,144186,144019],{"class":187},[118,144188,144189,144191,144193,144195,144197,144199,144201,144203],{"class":120,"line":1333},[118,144190,52137],{"class":128},[118,144192,51604],{"class":51293},[118,144194,53479],{"class":1967},[118,144196,174],{"class":128},[118,144198,144032],{"class":233},[118,144200,143962],{"class":128},[118,144202,51604],{"class":51293},[118,144204,51300],{"class":128},[118,144206,144207,144209,144211],{"class":120,"line":1616},[118,144208,51778],{"class":128},[118,144210,51604],{"class":51293},[118,144212,51300],{"class":128},[15,144214,70446],{},[109,144216,144217],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,144218,144219,144223,144237,144241],{"__ignoreMap":39},[118,144220,144221],{"class":120,"line":121},[118,144222,130656],{"class":187},[118,144224,144225,144227,144229,144231,144233,144235],{"class":120,"line":40},[118,144226,1038],{"class":128},[118,144228,51604],{"class":51293},[118,144230,53479],{"class":1967},[118,144232,174],{"class":128},[118,144234,130669],{"class":233},[118,144236,51300],{"class":128},[118,144238,144239],{"class":120,"line":1183},[118,144240,130676],{"class":128},[118,144242,144243,144245,144247],{"class":120,"line":1198},[118,144244,51778],{"class":128},[118,144246,51604],{"class":51293},[118,144248,51300],{"class":128},[5131,144250,137946],{},{"title":39,"searchDepth":40,"depth":40,"links":144252},[144253,144254,144258,144259,144260],{"id":143397,"depth":40,"text":143398},{"id":143429,"depth":40,"text":143430,"children":144255},[144256,144257],{"id":143433,"depth":1183,"text":143434},{"id":143450,"depth":1183,"text":143451},{"id":143469,"depth":40,"text":143470},{"id":143476,"depth":40,"text":143477},{"id":143563,"depth":40,"text":143564,"children":144261},[144262,144263,144264,144265,144266],{"id":143570,"depth":1183,"text":143571},{"id":143698,"depth":1183,"text":143699},{"id":143792,"depth":1183,"text":143793},{"id":143841,"depth":1183,"text":143842},{"id":143851,"depth":1183,"text":143852},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143389,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144273,"title":144274,"body":144275,"description":42,"extension":43,"meta":145502,"navigation":45,"path":145503,"seo":145504,"stem":145505,"__hash__":145506},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144276,"toc":145480},[144277,144280,144284,144288,144291,144294,144298,144303,144306,144309,144312,144315,144318,144375,144378,144383,144386,144389,144393,144404,144408,144411,144414,144421,144426,144430,144433,144439,144442,144446,144449,144456,144459,144462,144469,144472,144479,144482,144485,144492,144495,144498,144500,144517,144521,144524,144527,144530,144534,144537,144540,144543,144546,144549,144552,144554,144557,144560,144622,144625,144735,144742,144748,144751,144754,144758,144761,144765,144770,144773,144780,144783,144789,144794,144797,144800,144803,144806,144809,144812,144815,144818,144874,144876,144902,144906,144909,144912,144915,144923,144926,144929,144933,144989,144992,144996,145002,145013,145016,145021,145024,145027,145033,145036,145039,145042,145045,145048,145051,145054,145057,145082,145088,145091,145094,145097,145100,145103,145106,145111,145114,145117,145120,145128,145131,145138,145141,145144,145146,145170,145172,145175,145178,145181,145184,145187,145190,145193,145227,145230,145233,145267,145274,145277,145280,145283,145286,145289,145292,145299,145302,145305,145308,145311,145318,145321,145324,145331,145334,145337,145341,145344,145347,145350,145353,145356,145359,145362,145365,145367,145391,145393,145417,145421,145432,145435,145438,145441,145444,145447,145450,145453,145456,145459,145462,145465,145468,145471,145474,145477],[10,144278,144274],{"id":144279},"_21-移动端布局实战下篇",[60,144281,144283],{"id":144282},"_211-rem适配布局","21.1 rem适配布局",[89,144285,144287],{"id":144286},"_2111-rem单位","21.1.1 rem单位",[1466,144289],{"style":126401,"src":144290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[15,144292,144293],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[89,144295,144297],{"id":144296},"_2112-媒体查询","21.1.2 媒体查询",[72,144299,144300],{},[75,144301,144302],{},"参数介绍",[1466,144304],{"style":126401,"src":144305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1466,144307],{"style":126401,"src":144308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1466,144310],{"style":126401,"src":144311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1466,144313],{"style":126401,"src":144314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1466,144316],{"style":126401,"src":144317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[109,144319,144321],{"className":126545,"code":144320,"language":126547,"meta":39,"style":39},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[115,144322,144323,144328,144347,144354,144367,144371],{"__ignoreMap":39},[118,144324,144325],{"class":120,"line":121},[118,144326,144327],{"class":187},"\u002F* 媒体查询 *\u002F\n",[118,144329,144330,144333,144335,144338,144340,144343,144345],{"class":120,"line":40},[118,144331,144332],{"class":124},"@media",[118,144334,1662],{"class":128},[118,144336,144337],{"class":177},"max-width",[118,144339,51430],{"class":128},[118,144341,144342],{"class":177},"768",[118,144344,51485],{"class":124},[118,144346,12447],{"class":128},[118,144348,144349,144352],{"class":120,"line":1183},[118,144350,144351],{"class":1967},"  .container",[118,144353,15577],{"class":128},[118,144355,144356,144359,144361,144363,144365],{"class":120,"line":1198},[118,144357,144358],{"class":177},"    width",[118,144360,51430],{"class":128},[118,144362,439],{"class":177},[118,144364,456],{"class":124},[118,144366,1294],{"class":128},[118,144368,144369],{"class":120,"line":1204},[118,144370,127341],{"class":128},[118,144372,144373],{"class":120,"line":1218},[118,144374,1569],{"class":128},[15,144376,144377],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[72,144379,144380],{"start":40},[75,144381,144382],{},"引入资源",[1466,144384],{"style":126401,"src":144385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[15,144387,144388],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[89,144390,144392],{"id":144391},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1135,144394,144395,144398,144401],{},[75,144396,144397],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[75,144399,144400],{},"媒体查询可以根据不同设备宽度来修改样式",[75,144402,144403],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[60,144405,144407],{"id":144406},"_212-less基础","21.2 Less基础",[15,144409,144410],{},"css冗余度较高，不利于复用，没有很好的计算能力",[15,144412,144413],{},"Less可以解决该问题，它是css的扩展语言",[15,144415,144416,144417],{},"Less中文网址： ",[21,144418,144419],{"href":144419,"rel":144420},"http:\u002F\u002Flesscss.cn\u002F",[25],[15,144422,144423],{},[278,144424,144425],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[89,144427,144429],{"id":144428},"_2121-less安装","21.2.1 less安装",[15,144431,144432],{},"如果使用vscode，则无需进行下方安装步骤",[15,144434,144435],{},[21,144436,144437],{"href":144437,"rel":144438},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25],[1466,144440],{"style":126401,"src":144441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[89,144443,144445],{"id":144444},"_2122-less使用","21.2.2 less使用",[15,144447,144448],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[72,144450,144451],{},[75,144452,144453],{},[278,144454,144455],{},"Less 变量",[1466,144457],{"style":126401,"src":144458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1466,144460],{"style":126401,"src":144461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[72,144463,144464],{"start":40},[75,144465,144466],{},[278,144467,144468],{},"Less 编译",[1466,144470],{"style":126401,"src":144471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[72,144473,144474],{"start":1183},[75,144475,144476],{},[278,144477,144478],{},"Less 嵌套",[1466,144480],{"style":126401,"src":144481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1466,144483],{"style":126401,"src":144484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[72,144486,144487],{"start":1198},[75,144488,144489],{},[278,144490,144491],{},"Less 运算",[1466,144493],{"style":126401,"src":144494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[15,144496,144497],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[15,144499,158],{},[1135,144501,144502,144505,144508,144511,144514],{},[75,144503,144504],{},"乘号（*）和除号（\u002F）的写法",[75,144506,144507],{},"运算符中间左右有个空格隔开 1px + 5",[75,144509,144510],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[75,144512,144513],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[75,144515,144516],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[60,144518,144520],{"id":144519},"_213-rem-适配方案","21.3 rem 适配方案",[15,144522,144523],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[15,144525,144526],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1466,144528],{"style":126401,"src":144529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[89,144531,144533],{"id":144532},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[15,144535,144536],{},"rem + 媒体查询 + less 技术",[1466,144538],{"style":126401,"src":144539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[15,144541,144542],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[15,144544,144545],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1466,144547],{"style":126401,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[15,144550,144551],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[15,144553,14638],{},[1466,144555],{"style":126401,"src":144556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[15,144558,144559],{},"index.html:",[109,144561,144563],{"className":126545,"code":144562,"language":126547,"meta":39,"style":39},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[115,144564,144565,144570,144576,144592,144596,144602,144618],{"__ignoreMap":39},[118,144566,144567],{"class":120,"line":121},[118,144568,144569],{"class":187},"\u002F* rem 适配方案 *\u002F\n",[118,144571,144572,144574],{"class":120,"line":40},[118,144573,50628],{"class":51293},[118,144575,15577],{"class":128},[118,144577,144578,144580,144582,144585,144587,144589],{"class":120,"line":1183},[118,144579,70619],{"class":177},[118,144581,51430],{"class":128},[118,144583,144584],{"class":177},"62.5",[118,144586,456],{"class":124},[118,144588,130408],{"class":128},[118,144590,144591],{"class":187},"\u002F* 1rem = 10px *\u002F\n",[118,144593,144594],{"class":120,"line":1198},[118,144595,1569],{"class":128},[118,144597,144598,144600],{"class":120,"line":1204},[118,144599,130393],{"class":1967},[118,144601,15577],{"class":128},[118,144603,144604,144606,144608,144610,144613,144615],{"class":120,"line":1218},[118,144605,70561],{"class":177},[118,144607,51430],{"class":128},[118,144609,574],{"class":177},[118,144611,144612],{"class":124},"rem",[118,144614,130408],{"class":128},[118,144616,144617],{"class":187},"\u002F* 100px *\u002F\n",[118,144619,144620],{"class":120,"line":1224},[118,144621,1569],{"class":128},[15,144623,144624],{},"common.less",[109,144626,144628],{"className":126545,"code":144627,"language":126547,"meta":39,"style":39},"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",[115,144629,144630,144636,144651,144655,144661,144675,144679,144683,144687,144693,144707,144711,144717,144731],{"__ignoreMap":39},[118,144631,144632,144634],{"class":120,"line":121},[118,144633,50628],{"class":51293},[118,144635,15577],{"class":128},[118,144637,144638,144640,144642,144644,144646,144648],{"class":120,"line":40},[118,144639,70619],{"class":177},[118,144641,51430],{"class":128},[118,144643,144584],{"class":177},[118,144645,456],{"class":124},[118,144647,26060],{"class":128},[118,144649,144650],{"class":187},"\u002F* 10px *\u002F\n",[118,144652,144653],{"class":120,"line":1183},[118,144654,1569],{"class":128},[118,144656,144657,144659],{"class":120,"line":1198},[118,144658,51604],{"class":51293},[118,144660,15577],{"class":128},[118,144662,144663,144665,144667,144669,144671,144673],{"class":120,"line":1204},[118,144664,70561],{"class":177},[118,144666,51430],{"class":128},[118,144668,574],{"class":177},[118,144670,144612],{"class":124},[118,144672,26060],{"class":128},[118,144674,144617],{"class":187},[118,144676,144677],{"class":120,"line":1218},[118,144678,1569],{"class":128},[118,144680,144681],{"class":120,"line":1224},[118,144682,136006],{"class":128},[118,144684,144685],{"class":120,"line":1315},[118,144686,144569],{"class":187},[118,144688,144689,144691],{"class":120,"line":1321},[118,144690,50628],{"class":51293},[118,144692,15577],{"class":128},[118,144694,144695,144697,144699,144701,144703,144705],{"class":120,"line":1333},[118,144696,70619],{"class":177},[118,144698,51430],{"class":128},[118,144700,144584],{"class":177},[118,144702,456],{"class":124},[118,144704,130408],{"class":128},[118,144706,144591],{"class":187},[118,144708,144709],{"class":120,"line":1616},[118,144710,1569],{"class":128},[118,144712,144713,144715],{"class":120,"line":1621},[118,144714,130393],{"class":1967},[118,144716,15577],{"class":128},[118,144718,144719,144721,144723,144725,144727,144729],{"class":120,"line":1627},[118,144720,70561],{"class":177},[118,144722,51430],{"class":128},[118,144724,574],{"class":177},[118,144726,144612],{"class":124},[118,144728,130408],{"class":128},[118,144730,144617],{"class":187},[118,144732,144733],{"class":120,"line":1632},[118,144734,1569],{"class":128},[15,144736,144737,144738,144741],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23558,144739,144740],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[109,144743,144746],{"className":144744,"code":144745,"language":5192},[5190],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[115,144747,144745],{"__ignoreMap":39},[15,144749,144750],{},"less保存时会自动变成.css文件",[15,144752,144753],{},"好好搞懂上述代码写法",[89,144755,144757],{"id":144756},"_2132-样式导入样式","21.3.2 样式导入样式",[1466,144759],{"style":126401,"src":144760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[89,144762,144764],{"id":144763},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[72,144766,144767],{},[75,144768,144769],{},"准备工作",[1466,144771],{"style":126401,"src":144772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[15,144774,144775,144776],{},"github地址：",[21,144777,144778],{"href":144778,"rel":144779},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25],[15,144781,144782],{},"下载之后，将index.js文件拖到项目中就可以了",[15,144784,144785,144786],{},"js文件引入到index.html中使用的是",[115,144787,144788],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[72,144790,144791],{"start":40},[75,144792,144793],{},"vscode插件",[1466,144795],{"style":126401,"src":144796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[15,144798,144799],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[15,144801,144802],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1466,144804],{"style":126401,"src":144805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[15,144807,144808],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1466,144810],{"style":126401,"src":144811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[15,144813,144814],{},"修改成75就可以，alt+z为快捷键",[15,144816,144817],{},"index.css：",[109,144819,144820],{"className":126545,"code":144562,"language":126547,"meta":39,"style":39},[115,144821,144822,144826,144832,144846,144850,144856,144870],{"__ignoreMap":39},[118,144823,144824],{"class":120,"line":121},[118,144825,144569],{"class":187},[118,144827,144828,144830],{"class":120,"line":40},[118,144829,50628],{"class":51293},[118,144831,15577],{"class":128},[118,144833,144834,144836,144838,144840,144842,144844],{"class":120,"line":1183},[118,144835,70619],{"class":177},[118,144837,51430],{"class":128},[118,144839,144584],{"class":177},[118,144841,456],{"class":124},[118,144843,130408],{"class":128},[118,144845,144591],{"class":187},[118,144847,144848],{"class":120,"line":1198},[118,144849,1569],{"class":128},[118,144851,144852,144854],{"class":120,"line":1204},[118,144853,130393],{"class":1967},[118,144855,15577],{"class":128},[118,144857,144858,144860,144862,144864,144866,144868],{"class":120,"line":1218},[118,144859,70561],{"class":177},[118,144861,51430],{"class":128},[118,144863,574],{"class":177},[118,144865,144612],{"class":124},[118,144867,130408],{"class":128},[118,144869,144617],{"class":187},[118,144871,144872],{"class":120,"line":1224},[118,144873,1569],{"class":128},[15,144875,144559],{},[109,144877,144878],{"className":126545,"code":126949,"language":126547,"meta":39,"style":39},[115,144879,144880,144886,144898],{"__ignoreMap":39},[118,144881,144882,144884],{"class":120,"line":121},[118,144883,51793],{"class":51293},[118,144885,15577],{"class":128},[118,144887,144888,144890,144892,144894,144896],{"class":120,"line":40},[118,144889,70619],{"class":177},[118,144891,51430],{"class":128},[118,144893,729],{"class":177},[118,144895,51485],{"class":124},[118,144897,1294],{"class":128},[118,144899,144900],{"class":120,"line":1183},[118,144901,1569],{"class":128},[60,144903,144905],{"id":144904},"_214-响应式开发","21.4 响应式开发",[15,144907,144908],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1466,144910],{"style":126401,"src":144911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[15,144913,144914],{},"做法：",[1135,144916,144917,144920],{},[75,144918,144919],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[75,144921,144922],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1466,144924],{"style":126401,"src":144925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[15,144927,144928],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[89,144930,144932],{"id":144931},"_2141-简单代码示范","21.4.1 简单代码示范",[109,144934,144935],{"className":126545,"code":144562,"language":126547,"meta":39,"style":39},[115,144936,144937,144941,144947,144961,144965,144971,144985],{"__ignoreMap":39},[118,144938,144939],{"class":120,"line":121},[118,144940,144569],{"class":187},[118,144942,144943,144945],{"class":120,"line":40},[118,144944,50628],{"class":51293},[118,144946,15577],{"class":128},[118,144948,144949,144951,144953,144955,144957,144959],{"class":120,"line":1183},[118,144950,70619],{"class":177},[118,144952,51430],{"class":128},[118,144954,144584],{"class":177},[118,144956,456],{"class":124},[118,144958,130408],{"class":128},[118,144960,144591],{"class":187},[118,144962,144963],{"class":120,"line":1198},[118,144964,1569],{"class":128},[118,144966,144967,144969],{"class":120,"line":1204},[118,144968,130393],{"class":1967},[118,144970,15577],{"class":128},[118,144972,144973,144975,144977,144979,144981,144983],{"class":120,"line":1218},[118,144974,70561],{"class":177},[118,144976,51430],{"class":128},[118,144978,574],{"class":177},[118,144980,144612],{"class":124},[118,144982,130408],{"class":128},[118,144984,144617],{"class":187},[118,144986,144987],{"class":120,"line":1224},[118,144988,1569],{"class":128},[15,144990,144991],{},"父盒子一般命名为container",[89,144993,144995],{"id":144994},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[15,144997,144998,144999],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[278,145000,145001],{},"使得 Web 开发更加快捷",[1135,145003,145004],{},[75,145005,145006,145007],{},"官网：",[278,145008,145009],{},[21,145010,145011],{"href":145011,"rel":145012},"http:\u002F\u002Fgetbootstrap.com\u002F",[25],[15,145014,145015],{},"可以直接去官网拿现成的东西",[72,145017,145018],{},[75,145019,145020],{},"Bootstrap的使用",[15,145022,145023],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[15,145025,145026],{},"Bootstrap 使用四步曲：",[15,145028,145029,145032],{},[278,145030,145031],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1466,145034],{"style":126401,"src":145035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[15,145037,145038],{},"打开Bootstrap官网，然后下载",[1466,145040],{"style":126401,"src":145041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1466,145043],{"style":126401,"src":145044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[15,145046,145047],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[15,145049,145050],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[15,145052,145053],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1466,145055],{"style":126401,"src":145056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[109,145058,145060],{"className":126545,"code":145059,"language":126547,"meta":39,"style":39},".center {\n  color: red;\n}\n",[115,145061,145062,145068,145078],{"__ignoreMap":39},[118,145063,145064,145066],{"class":120,"line":121},[118,145065,126836],{"class":1967},[118,145067,15577],{"class":128},[118,145069,145070,145072,145074,145076],{"class":120,"line":40},[118,145071,70898],{"class":177},[118,145073,51430],{"class":128},[118,145075,57414],{"class":177},[118,145077,1294],{"class":128},[118,145079,145080],{"class":120,"line":1183},[118,145081,1569],{"class":128},[15,145083,145084,145087],{},[115,145085,145086],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1466,145089],{"style":126401,"src":145090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1466,145092],{"style":126401,"src":145093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1466,145095],{"style":126401,"src":145096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[15,145098,145099],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1466,145101],{"style":126401,"src":145102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[15,145104,145105],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[72,145107,145108],{"start":40},[75,145109,145110],{},"布局容器",[1466,145112],{"style":126401,"src":145113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[15,145115,145116],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[15,145118,145119],{},"container-fluid用于移动式布局比较方便",[72,145121,145122],{"start":1183},[75,145123,145124,145125],{},"bootstrap ",[278,145126,145127],{},"栅格系统原理",[1466,145129],{"style":126401,"src":145130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[72,145132,145133],{"start":1198},[75,145134,145135],{},[278,145136,145137],{},"栅格选项参数",[1466,145139],{"style":126401,"src":145140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[15,145142,145143],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[15,145145,14638],{},[109,145147,145148],{"className":126545,"code":145059,"language":126547,"meta":39,"style":39},[115,145149,145150,145156,145166],{"__ignoreMap":39},[118,145151,145152,145154],{"class":120,"line":121},[118,145153,126836],{"class":1967},[118,145155,15577],{"class":128},[118,145157,145158,145160,145162,145164],{"class":120,"line":40},[118,145159,70898],{"class":177},[118,145161,51430],{"class":128},[118,145163,57414],{"class":177},[118,145165,1294],{"class":128},[118,145167,145168],{"class":120,"line":1183},[118,145169,1569],{"class":128},[15,145171,135588],{},[1466,145173],{"style":126401,"src":145174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[15,145176,145177],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[15,145179,145180],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[15,145182,145183],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[15,145185,145186],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[15,145188,145189],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[15,145191,145192],{},"汇总展示说明：",[109,145194,145195],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,145196,145197,145201,145215,145219],{"__ignoreMap":39},[118,145198,145199],{"class":120,"line":121},[118,145200,130656],{"class":187},[118,145202,145203,145205,145207,145209,145211,145213],{"class":120,"line":40},[118,145204,1038],{"class":128},[118,145206,51604],{"class":51293},[118,145208,53479],{"class":1967},[118,145210,174],{"class":128},[118,145212,130669],{"class":233},[118,145214,51300],{"class":128},[118,145216,145217],{"class":120,"line":1183},[118,145218,130676],{"class":128},[118,145220,145221,145223,145225],{"class":120,"line":1198},[118,145222,51778],{"class":128},[118,145224,51604],{"class":51293},[118,145226,51300],{"class":128},[1466,145228],{"style":126401,"src":145229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[15,145231,145232],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[109,145234,145235],{"className":127292,"code":130649,"language":127294,"meta":39,"style":39},[115,145236,145237,145241,145255,145259],{"__ignoreMap":39},[118,145238,145239],{"class":120,"line":121},[118,145240,130656],{"class":187},[118,145242,145243,145245,145247,145249,145251,145253],{"class":120,"line":40},[118,145244,1038],{"class":128},[118,145246,51604],{"class":51293},[118,145248,53479],{"class":1967},[118,145250,174],{"class":128},[118,145252,130669],{"class":233},[118,145254,51300],{"class":128},[118,145256,145257],{"class":120,"line":1183},[118,145258,130676],{"class":128},[118,145260,145261,145263,145265],{"class":120,"line":1198},[118,145262,51778],{"class":128},[118,145264,51604],{"class":51293},[118,145266,51300],{"class":128},[72,145268,145269],{"start":1204},[75,145270,145271],{},[278,145272,145273],{},"列嵌套",[1466,145275],{"style":126401,"src":145276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[15,145278,145279],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[15,145281,145282],{},"没加row内部这样：",[1466,145284],{"style":126401,"src":145285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[15,145287,145288],{},"加上row之后内部为：",[1466,145290],{"style":126401,"src":145291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[72,145293,145294],{"start":1218},[75,145295,145296],{},[278,145297,145298],{},"列偏移",[1466,145300],{"style":126401,"src":145301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[15,145303,145304],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[15,145306,145307],{},"要加偏移量，即偏移份数",[15,145309,145310],{},"偏移的份数=12-两个盒子的份数",[72,145312,145313],{"start":1224},[75,145314,145315],{},[278,145316,145317],{},"列排序",[1466,145319],{"style":126401,"src":145320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[15,145322,145323],{},"pull拉左；push推右",[72,145325,145326],{"start":1315},[75,145327,145328],{},[278,145329,145330],{},"响应式工具",[1466,145332],{"style":126401,"src":145333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[15,145335,145336],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[89,145338,145340],{"id":145339},"_2143-响应式小项目","21.4.3 响应式小项目",[15,145342,145343],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[15,145345,145346],{},"ul {",[15,145348,145349],{},"list-style: none;",[15,145351,145352],{},"margin:0;",[15,145354,145355],{},"padding:0; }",[1466,145357],{"style":126401,"src":145358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1466,145360],{"style":126401,"src":145361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[15,145363,145364],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[15,145366,68882],{},[109,145368,145369],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,145370,145371,145377,145387],{"__ignoreMap":39},[118,145372,145373,145375],{"class":120,"line":121},[118,145374,130393],{"class":1967},[118,145376,15577],{"class":128},[118,145378,145379,145381,145383,145385],{"class":120,"line":40},[118,145380,131025],{"class":177},[118,145382,51430],{"class":128},[118,145384,23741],{"class":177},[118,145386,1294],{"class":128},[118,145388,145389],{"class":120,"line":1183},[118,145390,1569],{"class":128},[15,145392,70446],{},[109,145394,145395],{"className":126545,"code":139215,"language":126547,"meta":39,"style":39},[115,145396,145397,145403,145413],{"__ignoreMap":39},[118,145398,145399,145401],{"class":120,"line":121},[118,145400,130393],{"class":1967},[118,145402,15577],{"class":128},[118,145404,145405,145407,145409,145411],{"class":120,"line":40},[118,145406,131025],{"class":177},[118,145408,51430],{"class":128},[118,145410,23741],{"class":177},[118,145412,1294],{"class":128},[118,145414,145415],{"class":120,"line":1183},[118,145416,1569],{"class":128},[60,145418,145420],{"id":145419},"_215-swiper-插件使用","21.5 swiper 插件使用",[1135,145422,145423,145426,145429],{},[75,145424,145425],{},"下载需要的css和js文件html页面中 引入相关文件",[75,145427,145428],{},"官网找到类似案例，复制html结构，css样式 js 语法",[75,145430,145431],{},"根据需求定制修改模块",[1466,145433],{"style":126401,"src":145434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[15,145436,145437],{},"解压后将这两部分放到项目中",[1466,145439],{"style":126401,"src":145440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[15,145442,145443],{},"这个插件可以帮助我们实现轮播图效果",[15,145445,145446],{},"用法：",[1466,145448],{"style":126401,"src":145449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[15,145451,145452],{},"找到自己喜欢的",[1466,145454],{"style":126401,"src":145455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[15,145457,145458],{},"右键，查看网页源代码",[1466,145460],{"style":126401,"src":145461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[15,145463,145464],{},"复制人家的结构内容",[15,145466,145467],{},"然后去看API文档：",[1466,145469],{"style":126401,"src":145470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[15,145472,145473],{},"可以看看如何修改样式",[15,145475,145476],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5131,145478,145479],{},"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":39,"searchDepth":40,"depth":40,"links":145481},[145482,145487,145491,145496,145501],{"id":144282,"depth":40,"text":144283,"children":145483},[145484,145485,145486],{"id":144286,"depth":1183,"text":144287},{"id":144296,"depth":1183,"text":144297},{"id":144391,"depth":1183,"text":144392},{"id":144406,"depth":40,"text":144407,"children":145488},[145489,145490],{"id":144428,"depth":1183,"text":144429},{"id":144444,"depth":1183,"text":144445},{"id":144519,"depth":40,"text":144520,"children":145492},[145493,145494,145495],{"id":144532,"depth":1183,"text":144533},{"id":144756,"depth":1183,"text":144757},{"id":144763,"depth":1183,"text":144764},{"id":144904,"depth":40,"text":144905,"children":145497},[145498,145499,145500],{"id":144931,"depth":1183,"text":144932},{"id":144994,"depth":1183,"text":144995},{"id":145339,"depth":1183,"text":145340},{"id":145419,"depth":40,"text":145420},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144274,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145508,"title":145509,"body":145510,"description":42,"extension":43,"meta":145730,"navigation":45,"path":145731,"seo":145732,"stem":145733,"__hash__":145734},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145511,"toc":145726},[145512,145515,145519,145522,145537,145542,145545,145550,145585,145590,145602,145607,145620,145625,145642,145647,145667,145672,145690,145693,145696,145699,145702,145706,145709,145712,145715,145718,145721,145724],[10,145513,145509],{"id":145514},"_22-代码提交与新型相对单位",[60,145516,145518],{"id":145517},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[15,145520,145521],{},"法1：",[72,145523,145524,145531,145534],{},[75,145525,145526,145527],{},"登录网站注册：",[21,145528,145529],{"href":145529,"rel":145530},"https:\u002F\u002Fgitee.com\u002F",[25],[75,145532,145533],{},"码云创建新的仓库",[75,145535,145536],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1135,145538,145539],{},[75,145540,145541],{},"在网站根目录右键-- Git Bash Here",[1466,145543],{"style":126401,"src":145544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1135,145546,145547],{},[75,145548,145549],{},"如果是第一次利用git提交，请配置好全局选项",[109,145551,145553],{"className":117289,"code":145552,"language":117291,"meta":39,"style":39},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[115,145554,145555,145571],{"__ignoreMap":39},[118,145556,145557,145560,145562,145565,145568],{"class":120,"line":121},[118,145558,145559],{"class":1967},"git",[118,145561,119712],{"class":233},[118,145563,145564],{"class":177}," --global",[118,145566,145567],{"class":233}," user.name",[118,145569,145570],{"class":233}," \"你的名字\"\n",[118,145572,145573,145575,145577,145579,145582],{"class":120,"line":40},[118,145574,145559],{"class":1967},[118,145576,119712],{"class":233},[118,145578,145564],{"class":177},[118,145580,145581],{"class":233}," user.email",[118,145583,145584],{"class":233}," \"你的邮箱\"\n",[1135,145586,145587],{},[75,145588,145589],{},"初始化仓库",[109,145591,145593],{"className":117289,"code":145592,"language":117291,"meta":39,"style":39},"git init\n",[115,145594,145595],{"__ignoreMap":39},[118,145596,145597,145599],{"class":120,"line":121},[118,145598,145559],{"class":1967},[118,145600,145601],{"class":233}," init\n",[1135,145603,145604],{},[75,145605,145606],{},"把本地文件放到暂存区",[109,145608,145610],{"className":117289,"code":145609,"language":117291,"meta":39,"style":39},"git add .\n",[115,145611,145612],{"__ignoreMap":39},[118,145613,145614,145616,145618],{"class":120,"line":121},[118,145615,145559],{"class":1967},[118,145617,5214],{"class":233},[118,145619,28734],{"class":233},[1135,145621,145622],{},[75,145623,145624],{},"把本地文件放到本地仓库里面",[109,145626,145628],{"className":117289,"code":145627,"language":117291,"meta":39,"style":39},"git commit -m \"first commit\"\n",[115,145629,145630],{"__ignoreMap":39},[118,145631,145632,145634,145637,145639],{"class":120,"line":121},[118,145633,145559],{"class":1967},[118,145635,145636],{"class":233}," commit",[118,145638,100875],{"class":177},[118,145640,145641],{"class":233}," \"first commit\"\n",[1135,145643,145644],{},[75,145645,145646],{},"链接远程仓库",[109,145648,145650],{"className":117289,"code":145649,"language":117291,"meta":39,"style":39},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[115,145651,145652],{"__ignoreMap":39},[118,145653,145654,145656,145659,145661,145664],{"class":120,"line":121},[118,145655,145559],{"class":1967},[118,145657,145658],{"class":233}," remote",[118,145660,5214],{"class":233},[118,145662,145663],{"class":233}," origin",[118,145665,145666],{"class":233}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1135,145668,145669],{},[75,145670,145671],{},"把本地仓库的文件推送到远程仓库 push",[109,145673,145675],{"className":117289,"code":145674,"language":117291,"meta":39,"style":39},"git push -u origin master\n",[115,145676,145677],{"__ignoreMap":39},[118,145678,145679,145681,145683,145685,145687],{"class":120,"line":121},[118,145680,145559],{"class":1967},[118,145682,29009],{"class":233},[118,145684,28283],{"class":177},[118,145686,145663],{"class":233},[118,145688,145689],{"class":233}," master\n",[1466,145691],{"style":126401,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[15,145694,145695],{},"上方方法暂未实现，后边学完git后在整",[15,145697,145698],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1466,145700],{"style":126401,"src":145701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[60,145703,145705],{"id":145704},"_222-新型相对单位","22.2 新型相对单位",[1466,145707],{"style":126401,"src":145708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1466,145710],{"style":126401,"src":145711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[15,145713,145714],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[15,145716,145717],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1466,145719],{"style":126401,"src":145720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[15,145722,145723],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5131,145725,23962],{},{"title":39,"searchDepth":40,"depth":40,"links":145727},[145728,145729],{"id":145517,"depth":40,"text":145518},{"id":145704,"depth":40,"text":145705},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145509,"description":42},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145736,"title":145737,"body":145738,"description":145742,"extension":43,"meta":145743,"navigation":45,"path":145744,"seo":145745,"stem":145746,"__hash__":145747},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145739,"toc":145740},[],{"title":39,"searchDepth":40,"depth":40,"links":145741},[],"自己正经开始学编程的第一门语言！",{"category":92832},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145737,"description":145742},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145749,"title":145750,"body":145751,"description":42,"extension":43,"meta":146898,"navigation":45,"path":146899,"seo":146900,"stem":146901,"__hash__":146902},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145752,"toc":146874},[145753,145756,145760,145763,145766,145791,145794,145800,145804,145807,145834,145837,145877,145880,145892,145895,145901,145905,145909,145936,145953,145960,145964,145967,145993,145996,146000,146003,146043,146046,146063,146069,146073,146078,146122,146125,146143,146146,146214,146218,146225,146228,146243,146246,146255,146258,146269,146272,146281,146284,146301,146304,146319,146323,146327,146330,146332,146352,146356,146359,146362,146373,146376,146382,146386,146392,146419,146422,146434,146437,146448,146451,146457,146461,146467,146517,146520,146562,146565,146598,146601,146635,146639,146642,146662,146665,146701,146704,146717,146721,146725,146731,146734,146747,146751,146754,146760,146763,146767,146770,146773,146822,146826,146842,146848,146855,146861,146871],[10,145754,145750],{"id":145755},"_1-python环境与第一个程序",[60,145757,145759],{"id":145758},"_11-什么是python","1.1 什么是Python",[15,145761,145762],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[15,145764,145765],{},"理解 Python 时抓住三个关键词：",[72,145767,145768,145771,145774],{},[75,145769,145770],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[75,145772,145773],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[75,145775,145776,145777,341,145780,341,145783,341,145786,341,145788,28378],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[115,145778,145779],{},"os",[115,145781,145782],{},"sys",[115,145784,145785],{},"json",[115,145787,57853],{},[115,145789,145790],{},"datetime",[15,145792,145793],{},"Python 程序的运行链路：",[109,145795,145798],{"className":145796,"code":145797,"language":5192,"meta":39},[5190],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[115,145799,145797],{"__ignoreMap":39},[60,145801,145803],{"id":145802},"_12-python解释器","1.2 Python解释器",[15,145805,145806],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[109,145808,145810],{"className":23827,"code":145809,"language":23829,"meta":39,"style":39},"python --version\npython3 --version\npython\npython3\n",[115,145811,145812,145818,145824,145829],{"__ignoreMap":39},[118,145813,145814,145816],{"class":120,"line":121},[118,145815,30373],{"class":1967},[118,145817,26286],{"class":177},[118,145819,145820,145822],{"class":120,"line":40},[118,145821,100872],{"class":1967},[118,145823,26286],{"class":177},[118,145825,145826],{"class":120,"line":1183},[118,145827,145828],{"class":1967},"python\n",[118,145830,145831],{"class":120,"line":1198},[118,145832,145833],{"class":1967},"python3\n",[15,145835,145836],{},"进入交互模式后，可以直接输入表达式：",[109,145838,145840],{"className":30371,"code":145839,"language":30373,"meta":39,"style":39},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[115,145841,145842,145853,145858,145872],{"__ignoreMap":39},[118,145843,145844,145847,145849,145851],{"class":120,"line":121},[118,145845,145846],{"class":124},">>>",[118,145848,25123],{"class":177},[118,145850,45559],{"class":124},[118,145852,47716],{"class":177},[118,145854,145855],{"class":120,"line":40},[118,145856,145857],{"class":177},"3\n",[118,145859,145860,145862,145865,145867,145870],{"class":120,"line":1183},[118,145861,145846],{"class":124},[118,145863,145864],{"class":177}," print",[118,145866,129],{"class":128},[118,145868,145869],{"class":233},"\"hello python\"",[118,145871,135],{"class":128},[118,145873,145874],{"class":120,"line":1198},[118,145875,145876],{"class":128},"hello python\n",[15,145878,145879],{},"退出交互模式：",[109,145881,145883],{"className":30371,"code":145882,"language":30373,"meta":39,"style":39},"exit()\n",[115,145884,145885],{"__ignoreMap":39},[118,145886,145887,145890],{"class":120,"line":121},[118,145888,145889],{"class":177},"exit",[118,145891,1980],{"class":128},[15,145893,145894],{},"或使用快捷键：",[109,145896,145899],{"className":145897,"code":145898,"language":5192,"meta":39},[5190],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[115,145900,145898],{"__ignoreMap":39},[60,145902,145904],{"id":145903},"_13-安装python","1.3 安装Python",[89,145906,145908],{"id":145907},"_131-windows安装","1.3.1 Windows安装",[72,145910,145911,145918,145921,145927,145933],{},[75,145912,145913,145914],{},"打开 Python 官网：",[21,145915,145916],{"href":145916,"rel":145917},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25],[75,145919,145920],{},"下载 Windows Installer。",[75,145922,145923,145924,28378],{},"安装时勾选 ",[115,145925,145926],{},"Add Python to PATH",[75,145928,145929,145930,28378],{},"点击 ",[115,145931,145932],{},"Install Now",[75,145934,145935],{},"安装完成后打开命令提示符验证：",[109,145937,145939],{"className":23827,"code":145938,"language":23829,"meta":39,"style":39},"python --version\npip --version\n",[115,145940,145941,145947],{"__ignoreMap":39},[118,145942,145943,145945],{"class":120,"line":121},[118,145944,30373],{"class":1967},[118,145946,26286],{"class":177},[118,145948,145949,145951],{"class":120,"line":40},[118,145950,23836],{"class":1967},[118,145952,26286],{"class":177},[15,145954,145955,145956,145959],{},"如果提示 ",[115,145957,145958],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[89,145961,145963],{"id":145962},"_132-macos安装","1.3.2 macOS安装",[15,145965,145966],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[109,145968,145970],{"className":23827,"code":145969,"language":23829,"meta":39,"style":39},"brew install python\npython3 --version\npip3 --version\n",[115,145971,145972,145981,145987],{"__ignoreMap":39},[118,145973,145974,145977,145979],{"class":120,"line":121},[118,145975,145976],{"class":1967},"brew",[118,145978,23839],{"class":233},[118,145980,124311],{"class":233},[118,145982,145983,145985],{"class":120,"line":40},[118,145984,100872],{"class":1967},[118,145986,26286],{"class":177},[118,145988,145989,145991],{"class":120,"line":1183},[118,145990,119693],{"class":1967},[118,145992,26286],{"class":177},[15,145994,145995],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[89,145997,145999],{"id":145998},"_133-linux安装","1.3.3 Linux安装",[15,146001,146002],{},"Ubuntu\u002FDebian：",[109,146004,146006],{"className":23827,"code":146005,"language":23829,"meta":39,"style":39},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[115,146007,146008,146016,146031,146037],{"__ignoreMap":39},[118,146009,146010,146012,146014],{"class":120,"line":121},[118,146011,24581],{"class":1967},[118,146013,117310],{"class":233},[118,146015,26235],{"class":233},[118,146017,146018,146020,146022,146024,146026,146028],{"class":120,"line":40},[118,146019,24581],{"class":1967},[118,146021,117310],{"class":233},[118,146023,23839],{"class":233},[118,146025,104396],{"class":233},[118,146027,100791],{"class":233},[118,146029,146030],{"class":233}," python3-venv\n",[118,146032,146033,146035],{"class":120,"line":1183},[118,146034,100872],{"class":1967},[118,146036,26286],{"class":177},[118,146038,146039,146041],{"class":120,"line":1198},[118,146040,119693],{"class":1967},[118,146042,26286],{"class":177},[15,146044,146045],{},"Fedora：",[109,146047,146049],{"className":23827,"code":146048,"language":23829,"meta":39,"style":39},"sudo dnf install python3 python3-pip\n",[115,146050,146051],{"__ignoreMap":39},[118,146052,146053,146055,146057,146059,146061],{"class":120,"line":121},[118,146054,24581],{"class":1967},[118,146056,26308],{"class":233},[118,146058,23839],{"class":233},[118,146060,104396],{"class":233},[118,146062,119758],{"class":233},[15,146064,146065,146066,146068],{},"Linux 上通常使用 ",[115,146067,100872],{}," 命令，避免和系统旧版本 Python 冲突。",[60,146070,146072],{"id":146071},"_14-pip包管理器","1.4 pip包管理器",[15,146074,146075,146077],{},[115,146076,23836],{}," 用来安装第三方库。",[109,146079,146081],{"className":23827,"code":146080,"language":23829,"meta":39,"style":39},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[115,146082,146083,146092,146101,146109,146115],{"__ignoreMap":39},[118,146084,146085,146087,146089],{"class":120,"line":121},[118,146086,23836],{"class":1967},[118,146088,23839],{"class":233},[118,146090,146091],{"class":233}," requests\n",[118,146093,146094,146096,146099],{"class":120,"line":40},[118,146095,23836],{"class":1967},[118,146097,146098],{"class":233}," uninstall",[118,146100,146091],{"class":233},[118,146102,146103,146105,146107],{"class":120,"line":1183},[118,146104,23836],{"class":1967},[118,146106,117567],{"class":233},[118,146108,146091],{"class":233},[118,146110,146111,146113],{"class":120,"line":1198},[118,146112,23836],{"class":1967},[118,146114,118948],{"class":233},[118,146116,146117,146119],{"class":120,"line":1204},[118,146118,23836],{"class":1967},[118,146120,146121],{"class":233}," freeze\n",[15,146123,146124],{},"国内网络较慢时可以临时使用镜像：",[109,146126,146128],{"className":23827,"code":146127,"language":23829,"meta":39,"style":39},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[115,146129,146130],{"__ignoreMap":39},[118,146131,146132,146134,146136,146139,146141],{"class":120,"line":121},[118,146133,23836],{"class":1967},[118,146135,23839],{"class":233},[118,146137,146138],{"class":233}," requests",[118,146140,26423],{"class":177},[118,146142,119721],{"class":233},[15,146144,146145],{},"常见第三方库：",[266,146147,146148,146157],{},[269,146149,146150],{},[272,146151,146152,146155],{},[275,146153,146154],{},"库",[275,146156,102689],{},[313,146158,146159,146167,146174,146182,146190,146198,146206],{},[272,146160,146161,146164],{},[318,146162,146163],{},"requests",[318,146165,146166],{},"网络请求",[272,146168,146169,146171],{},[318,146170,100619],{},[318,146172,146173],{},"数值计算",[272,146175,146176,146179],{},[318,146177,146178],{},"pandas",[318,146180,146181],{},"表格数据处理",[272,146183,146184,146187],{},[318,146185,146186],{},"matplotlib",[318,146188,146189],{},"绘图",[272,146191,146192,146195],{},[318,146193,146194],{},"pyecharts",[318,146196,146197],{},"ECharts 图表",[272,146199,146200,146203],{},[318,146201,146202],{},"flask",[318,146204,146205],{},"Web 后端",[272,146207,146208,146211],{},[318,146209,146210],{},"pytest",[318,146212,146213],{},"自动化测试",[60,146215,146217],{"id":146216},"_15-虚拟环境","1.5 虚拟环境",[15,146219,146220,146221,146224],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[115,146222,146223],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[15,146226,146227],{},"创建虚拟环境：",[109,146229,146231],{"className":23827,"code":146230,"language":23829,"meta":39,"style":39},"python -m venv .venv\n",[115,146232,146233],{"__ignoreMap":39},[118,146234,146235,146237,146239,146241],{"class":120,"line":121},[118,146236,30373],{"class":1967},[118,146238,100875],{"class":177},[118,146240,100878],{"class":233},[118,146242,100881],{"class":233},[15,146244,146245],{},"Windows 激活：",[109,146247,146249],{"className":23827,"code":146248,"language":23829,"meta":39,"style":39},".venv\\Scripts\\activate\n",[115,146250,146251],{"__ignoreMap":39},[118,146252,146253],{"class":120,"line":121},[118,146254,146248],{"class":1967},[15,146256,146257],{},"macOS\u002FLinux 激活：",[109,146259,146261],{"className":23827,"code":146260,"language":23829,"meta":39,"style":39},"source .venv\u002Fbin\u002Factivate\n",[115,146262,146263],{"__ignoreMap":39},[118,146264,146265,146267],{"class":120,"line":121},[118,146266,100886],{"class":177},[118,146268,100889],{"class":233},[15,146270,146271],{},"退出虚拟环境：",[109,146273,146275],{"className":23827,"code":146274,"language":23829,"meta":39,"style":39},"deactivate\n",[115,146276,146277],{"__ignoreMap":39},[118,146278,146279],{"class":120,"line":121},[118,146280,146274],{"class":1967},[15,146282,146283],{},"保存依赖：",[109,146285,146287],{"className":23827,"code":146286,"language":23829,"meta":39,"style":39},"pip freeze > requirements.txt\n",[115,146288,146289],{"__ignoreMap":39},[118,146290,146291,146293,146296,146298],{"class":120,"line":121},[118,146292,23836],{"class":1967},[118,146294,146295],{"class":233}," freeze",[118,146297,26215],{"class":124},[118,146299,146300],{"class":233}," requirements.txt\n",[15,146302,146303],{},"安装依赖：",[109,146305,146307],{"className":23827,"code":146306,"language":23829,"meta":39,"style":39},"pip install -r requirements.txt\n",[115,146308,146309],{"__ignoreMap":39},[118,146310,146311,146313,146315,146317],{"class":120,"line":121},[118,146312,23836],{"class":1967},[118,146314,23839],{"class":233},[118,146316,119632],{"class":177},[118,146318,146300],{"class":233},[60,146320,146322],{"id":146321},"_16-开发工具","1.6 开发工具",[89,146324,146326],{"id":146325},"_161-pycharm","1.6.1 PyCharm",[15,146328,146329],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[15,146331,122055],{},[72,146333,146334,146337,146340,146346,146349],{},[75,146335,146336],{},"New Project：创建项目。",[75,146338,146339],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[75,146341,146342,146343,125976],{},"New Python File：创建 ",[115,146344,146345],{},".py",[75,146347,146348],{},"Run：运行当前文件。",[75,146350,146351],{},"Debug：断点调试。",[89,146353,146355],{"id":146354},"_162-vs-code","1.6.2 VS Code",[15,146357,146358],{},"VS Code 轻量，适合后续多语言开发。",[15,146360,146361],{},"建议安装插件：",[72,146363,146364,146367,146370],{},[75,146365,146366],{},"Python。",[75,146368,146369],{},"Pylance。",[75,146371,146372],{},"Jupyter。",[15,146374,146375],{},"选择解释器：",[109,146377,146380],{"className":146378,"code":146379,"language":5192,"meta":39},[5190],"Ctrl + Shift + P -> Python: Select Interpreter\n",[115,146381,146379],{"__ignoreMap":39},[60,146383,146385],{"id":146384},"_17-第一个python程序","1.7 第一个Python程序",[15,146387,146388,146389,24623],{},"创建文件 ",[115,146390,146391],{},"hello.py",[109,146393,146395],{"className":30371,"code":146394,"language":30373,"meta":39,"style":39},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[115,146396,146397,146408],{"__ignoreMap":39},[118,146398,146399,146401,146403,146406],{"class":120,"line":121},[118,146400,30408],{"class":177},[118,146402,129],{"class":128},[118,146404,146405],{"class":233},"\"Hello World\"",[118,146407,135],{"class":128},[118,146409,146410,146412,146414,146417],{"class":120,"line":40},[118,146411,30408],{"class":177},[118,146413,129],{"class":128},[118,146415,146416],{"class":233},"\"你好，Python\"",[118,146418,135],{"class":128},[15,146420,146421],{},"在终端运行：",[109,146423,146425],{"className":23827,"code":146424,"language":23829,"meta":39,"style":39},"python hello.py\n",[115,146426,146427],{"__ignoreMap":39},[118,146428,146429,146431],{"class":120,"line":121},[118,146430,30373],{"class":1967},[118,146432,146433],{"class":233}," hello.py\n",[15,146435,146436],{},"或：",[109,146438,146440],{"className":23827,"code":146439,"language":23829,"meta":39,"style":39},"python3 hello.py\n",[115,146441,146442],{"__ignoreMap":39},[118,146443,146444,146446],{"class":120,"line":121},[118,146445,100872],{"class":1967},[118,146447,146433],{"class":233},[15,146449,146450],{},"输出：",[109,146452,146455],{"className":146453,"code":146454,"language":5192,"meta":39},[5190],"Hello World\n你好，Python\n",[115,146456,146454],{"__ignoreMap":39},[60,146458,146460],{"id":146459},"_18-print函数","1.8 print函数",[15,146462,146463,146466],{},[115,146464,146465],{},"print()"," 用来输出内容。",[109,146468,146470],{"className":30371,"code":146469,"language":30373,"meta":39,"style":39},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[115,146471,146472,146482,146492,146502],{"__ignoreMap":39},[118,146473,146474,146476,146478,146480],{"class":120,"line":121},[118,146475,30408],{"class":177},[118,146477,129],{"class":128},[118,146479,5849],{"class":233},[118,146481,135],{"class":128},[118,146483,146484,146486,146488,146490],{"class":120,"line":40},[118,146485,30408],{"class":177},[118,146487,129],{"class":128},[118,146489,439],{"class":177},[118,146491,135],{"class":128},[118,146493,146494,146496,146498,146500],{"class":120,"line":1183},[118,146495,30408],{"class":177},[118,146497,129],{"class":128},[118,146499,178],{"class":177},[118,146501,135],{"class":128},[118,146503,146504,146506,146508,146511,146513,146515],{"class":120,"line":1198},[118,146505,30408],{"class":177},[118,146507,129],{"class":128},[118,146509,146510],{"class":233},"\"年龄:\"",[118,146512,12440],{"class":128},[118,146514,778],{"class":177},[118,146516,135],{"class":128},[15,146518,146519],{},"多个内容用逗号隔开，默认中间加空格：",[109,146521,146523],{"className":30371,"code":146522,"language":30373,"meta":39,"style":39},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[115,146524,146525,146535,146545],{"__ignoreMap":39},[118,146526,146527,146530,146532],{"class":120,"line":121},[118,146528,146529],{"class":128},"name ",[118,146531,174],{"class":124},[118,146533,146534],{"class":233}," \"张三\"\n",[118,146536,146537,146540,146542],{"class":120,"line":40},[118,146538,146539],{"class":128},"age ",[118,146541,174],{"class":124},[118,146543,146544],{"class":177}," 18\n",[118,146546,146547,146549,146551,146554,146557,146559],{"class":120,"line":1183},[118,146548,30408],{"class":177},[118,146550,129],{"class":128},[118,146552,146553],{"class":233},"\"姓名:\"",[118,146555,146556],{"class":128},", name, ",[118,146558,146510],{"class":233},[118,146560,146561],{"class":128},", age)\n",[15,146563,146564],{},"修改分隔符：",[109,146566,146568],{"className":30371,"code":146567,"language":30373,"meta":39,"style":39},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[115,146569,146570],{"__ignoreMap":39},[118,146571,146572,146574,146576,146579,146581,146583,146585,146587,146589,146592,146594,146596],{"class":120,"line":121},[118,146573,30408],{"class":177},[118,146575,129],{"class":128},[118,146577,146578],{"class":233},"\"2024\"",[118,146580,12440],{"class":128},[118,146582,54309],{"class":233},[118,146584,12440],{"class":128},[118,146586,54309],{"class":233},[118,146588,12440],{"class":128},[118,146590,146591],{"class":5221},"sep",[118,146593,174],{"class":124},[118,146595,32476],{"class":233},[118,146597,135],{"class":128},[15,146599,146600],{},"修改结尾符：",[109,146602,146604],{"className":30371,"code":146603,"language":30373,"meta":39,"style":39},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[115,146605,146606,146624],{"__ignoreMap":39},[118,146607,146608,146610,146612,146614,146616,146618,146620,146622],{"class":120,"line":121},[118,146609,30408],{"class":177},[118,146611,129],{"class":128},[118,146613,5849],{"class":233},[118,146615,12440],{"class":128},[118,146617,45794],{"class":5221},[118,146619,174],{"class":124},[118,146621,4363],{"class":233},[118,146623,135],{"class":128},[118,146625,146626,146628,146630,146633],{"class":120,"line":40},[118,146627,30408],{"class":177},[118,146629,129],{"class":128},[118,146631,146632],{"class":233},"\"python\"",[118,146634,135],{"class":128},[60,146636,146638],{"id":146637},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[15,146640,146641],{},"交互运行适合临时验证：",[109,146643,146645],{"className":30371,"code":146644,"language":30373,"meta":39,"style":39},">>> 10 * 3\n30\n",[115,146646,146647,146657],{"__ignoreMap":39},[118,146648,146649,146651,146653,146655],{"class":120,"line":121},[118,146650,145846],{"class":124},[118,146652,2042],{"class":177},[118,146654,6523],{"class":124},[118,146656,120029],{"class":177},[118,146658,146659],{"class":120,"line":40},[118,146660,146661],{"class":177},"30\n",[15,146663,146664],{},"脚本运行适合保存程序：",[109,146666,146668],{"className":30371,"code":146667,"language":30373,"meta":39,"style":39},"price = 8\ncount = 5\nprint(price * count)\n",[115,146669,146670,146680,146689],{"__ignoreMap":39},[118,146671,146672,146675,146677],{"class":120,"line":121},[118,146673,146674],{"class":128},"price ",[118,146676,174],{"class":124},[118,146678,146679],{"class":177}," 8\n",[118,146681,146682,146685,146687],{"class":120,"line":40},[118,146683,146684],{"class":128},"count ",[118,146686,174],{"class":124},[118,146688,54420],{"class":177},[118,146690,146691,146693,146696,146698],{"class":120,"line":1183},[118,146692,30408],{"class":177},[118,146694,146695],{"class":128},"(price ",[118,146697,583],{"class":124},[118,146699,146700],{"class":128}," count)\n",[15,146702,146703],{},"实际学习中推荐：",[72,146705,146706,146709,146714],{},[75,146707,146708],{},"临时试一个语法，用交互模式。",[75,146710,146711,146712,125976],{},"写完整练习，用 ",[115,146713,146345],{},[75,146715,146716],{},"写项目，用独立目录和虚拟环境。",[60,146718,146720],{"id":146719},"_110-常见错误","1.10 常见错误",[89,146722,146724],{"id":146723},"_1101-命令找不到","1.10.1 命令找不到",[109,146726,146729],{"className":146727,"code":146728,"language":5192,"meta":39},[5190],"python: command not found\n",[115,146730,146728],{"__ignoreMap":39},[15,146732,146733],{},"原因：",[72,146735,146736,146739,146742],{},[75,146737,146738],{},"没安装 Python。",[75,146740,146741],{},"PATH 没配置。",[75,146743,146744,146745,28378],{},"Linux\u002FmacOS 应该使用 ",[115,146746,100872],{},[89,146748,146750],{"id":146749},"_1102-文件名冲突","1.10.2 文件名冲突",[15,146752,146753],{},"不要把文件命名为：",[109,146755,146758],{"className":146756,"code":146757,"language":5192,"meta":39},[5190],"random.py\njson.py\ntime.py\nrequests.py\n",[115,146759,146757],{"__ignoreMap":39},[15,146761,146762],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[89,146764,146766],{"id":146765},"_1103-中文乱码","1.10.3 中文乱码",[15,146768,146769],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[15,146771,146772],{},"如果读写文件出现乱码，要明确指定编码：",[109,146774,146776],{"className":30371,"code":146775,"language":30373,"meta":39,"style":39},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[115,146777,146778,146812],{"__ignoreMap":39},[118,146779,146780,146782,146785,146787,146790,146792,146795,146797,146800,146802,146805,146807,146809],{"class":120,"line":121},[118,146781,107826],{"class":124},[118,146783,146784],{"class":177}," open",[118,146786,129],{"class":128},[118,146788,146789],{"class":233},"\"data.txt\"",[118,146791,12440],{"class":128},[118,146793,146794],{"class":233},"\"r\"",[118,146796,12440],{"class":128},[118,146798,146799],{"class":5221},"encoding",[118,146801,174],{"class":124},[118,146803,146804],{"class":233},"\"utf-8\"",[118,146806,13719],{"class":128},[118,146808,31376],{"class":124},[118,146810,146811],{"class":128}," f:\n",[118,146813,146814,146817,146819],{"class":120,"line":40},[118,146815,146816],{"class":128},"    content ",[118,146818,174],{"class":124},[118,146820,146821],{"class":128}," f.read()\n",[60,146823,146825],{"id":146824},"_111-本章练习","1.11 本章练习",[72,146827,146828,146831,146837],{},[75,146829,146830],{},"安装 Python，并在终端输出版本号。",[75,146832,146833,146834,146836],{},"新建 ",[115,146835,146391],{},"，输出自己的姓名、年龄、学习目标。",[75,146838,104359,146839,146841],{},[115,146840,146465],{}," 输出下面格式：",[109,146843,146846],{"className":146844,"code":146845,"language":5192,"meta":39},[5190],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[115,146847,146845],{"__ignoreMap":39},[72,146849,146850],{"start":1198},[75,146851,104359,146852,146854],{},[115,146853,146591],{}," 输出日期：",[109,146856,146859],{"className":146857,"code":146858,"language":5192,"meta":39},[5190],"2024-10-10\n",[115,146860,146858],{"__ignoreMap":39},[72,146862,146863],{"start":1204},[75,146864,104359,146865,146867,146868,146870],{},[115,146866,45794],{}," 让两次 ",[115,146869,146465],{}," 输出在同一行。",[5131,146872,146873],{},"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":39,"searchDepth":40,"depth":40,"links":146875},[146876,146877,146878,146883,146884,146885,146889,146890,146891,146892,146897],{"id":145758,"depth":40,"text":145759},{"id":145802,"depth":40,"text":145803},{"id":145903,"depth":40,"text":145904,"children":146879},[146880,146881,146882],{"id":145907,"depth":1183,"text":145908},{"id":145962,"depth":1183,"text":145963},{"id":145998,"depth":1183,"text":145999},{"id":146071,"depth":40,"text":146072},{"id":146216,"depth":40,"text":146217},{"id":146321,"depth":40,"text":146322,"children":146886},[146887,146888],{"id":146325,"depth":1183,"text":146326},{"id":146354,"depth":1183,"text":146355},{"id":146384,"depth":40,"text":146385},{"id":146459,"depth":40,"text":146460},{"id":146637,"depth":40,"text":146638},{"id":146719,"depth":40,"text":146720,"children":146893},[146894,146895,146896],{"id":146723,"depth":1183,"text":146724},{"id":146749,"depth":1183,"text":146750},{"id":146765,"depth":1183,"text":146766},{"id":146824,"depth":40,"text":146825},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145750,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146904,"title":146905,"body":146906,"description":42,"extension":43,"meta":149310,"navigation":45,"path":149311,"seo":149312,"stem":149313,"__hash__":149314},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146907,"toc":149295},[146908,146911,146915,146918,146921,146938,146941,146983,146986,146990,146993,146996,147033,147036,147070,147073,147165,147169,147183,147186,147213,147216,147220,147323,147330,147333,147350,147354,147361,147550,147553,147626,147630,147633,147717,147720,147752,147756,147960,147963,147967,147973,148075,148078,148334,148338,148341,148344,148358,148360,148546,148550,148912,148918,148922,148925,149049,149052,149231,149234,149238,149271,149275,149292],[10,146909,146905],{"id":146910},"_10-json与pyecharts折线图",[60,146912,146914],{"id":146913},"_101-数据可视化","10.1 数据可视化",[15,146916,146917],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[15,146919,146920],{},"常见图表：",[72,146922,146923,146926,146929,146932,146935],{},[75,146924,146925],{},"折线图：看趋势。",[75,146927,146928],{},"柱状图：看分类对比。",[75,146930,146931],{},"饼图：看占比。",[75,146933,146934],{},"地图：看地域分布。",[75,146936,146937],{},"散点图：看两个变量之间的关系。",[15,146939,146940],{},"Python 可视化常用库：",[266,146942,146943,146951],{},[269,146944,146945],{},[272,146946,146947,146949],{},[275,146948,146154],{},[275,146950,23745],{},[313,146952,146953,146960,146968,146975],{},[272,146954,146955,146957],{},[318,146956,146186],{},[318,146958,146959],{},"基础、经典、可定制",[272,146961,146962,146965],{},[318,146963,146964],{},"seaborn",[318,146966,146967],{},"统计图表更美观",[272,146969,146970,146972],{},[318,146971,146194],{},[318,146973,146974],{},"生成交互式网页图表",[272,146976,146977,146980],{},[318,146978,146979],{},"plotly",[318,146981,146982],{},"交互图表能力强",[15,146984,146985],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[60,146987,146989],{"id":146988},"_102-json回顾","10.2 JSON回顾",[15,146991,146992],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[15,146994,146995],{},"Python 字典：",[109,146997,146999],{"className":30371,"code":146998,"language":30373,"meta":39,"style":39},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[115,147000,147001,147009,147020,147029],{"__ignoreMap":39},[118,147002,147003,147005,147007],{"class":120,"line":121},[118,147004,101651],{"class":128},[118,147006,174],{"class":124},[118,147008,15577],{"class":128},[118,147010,147011,147014,147016,147018],{"class":120,"line":40},[118,147012,147013],{"class":233},"    \"name\"",[118,147015,51430],{"class":128},[118,147017,69262],{"class":233},[118,147019,31459],{"class":128},[118,147021,147022,147025,147027],{"class":120,"line":1183},[118,147023,147024],{"class":233},"    \"value\"",[118,147026,51430],{"class":128},[118,147028,97451],{"class":177},[118,147030,147031],{"class":120,"line":1198},[118,147032,1569],{"class":128},[15,147034,147035],{},"JSON 字符串：",[109,147037,147040],{"className":147038,"code":147039,"language":145785,"meta":39,"style":39},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[115,147041,147042,147046,147057,147066],{"__ignoreMap":39},[118,147043,147044],{"class":120,"line":121},[118,147045,1550],{"class":128},[118,147047,147048,147051,147053,147055],{"class":120,"line":40},[118,147049,147050],{"class":177},"  \"name\"",[118,147052,51430],{"class":128},[118,147054,69262],{"class":233},[118,147056,31459],{"class":128},[118,147058,147059,147062,147064],{"class":120,"line":1183},[118,147060,147061],{"class":177},"  \"value\"",[118,147063,51430],{"class":128},[118,147065,97451],{"class":177},[118,147067,147068],{"class":120,"line":1198},[118,147069,1569],{"class":128},[15,147071,147072],{},"Python 与 JSON 的转换：",[109,147074,147076],{"className":30371,"code":147075,"language":30373,"meta":39,"style":39},"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",[115,147077,147078,147085,147089,147114,147118,147137,147144,147148,147158],{"__ignoreMap":39},[118,147079,147080,147082],{"class":120,"line":121},[118,147081,30385],{"class":124},[118,147083,147084],{"class":128}," json\n",[118,147086,147087],{"class":120,"line":40},[118,147088,2404],{"emptyLinePlaceholder":45},[118,147090,147091,147093,147095,147097,147099,147101,147103,147105,147108,147110,147112],{"class":120,"line":1183},[118,147092,101651],{"class":128},[118,147094,174],{"class":124},[118,147096,4452],{"class":128},[118,147098,62672],{"class":233},[118,147100,51430],{"class":128},[118,147102,69262],{"class":233},[118,147104,12440],{"class":128},[118,147106,147107],{"class":233},"\"value\"",[118,147109,51430],{"class":128},[118,147111,439],{"class":177},[118,147113,1569],{"class":128},[118,147115,147116],{"class":120,"line":1198},[118,147117,2404],{"emptyLinePlaceholder":45},[118,147119,147120,147123,147125,147128,147131,147133,147135],{"class":120,"line":1204},[118,147121,147122],{"class":128},"json_text ",[118,147124,174],{"class":124},[118,147126,147127],{"class":128}," json.dumps(data, ",[118,147129,147130],{"class":5221},"ensure_ascii",[118,147132,174],{"class":124},[118,147134,33980],{"class":177},[118,147136,135],{"class":128},[118,147138,147139,147141],{"class":120,"line":1218},[118,147140,30408],{"class":177},[118,147142,147143],{"class":128},"(json_text)\n",[118,147145,147146],{"class":120,"line":1224},[118,147147,2404],{"emptyLinePlaceholder":45},[118,147149,147150,147153,147155],{"class":120,"line":1315},[118,147151,147152],{"class":128},"new_data ",[118,147154,174],{"class":124},[118,147156,147157],{"class":128}," json.loads(json_text)\n",[118,147159,147160,147162],{"class":120,"line":1321},[118,147161,30408],{"class":177},[118,147163,147164],{"class":128},"(new_data)\n",[60,147166,147168],{"id":147167},"_103-安装pyecharts","10.3 安装pyecharts",[109,147170,147172],{"className":23827,"code":147171,"language":23829,"meta":39,"style":39},"pip install pyecharts\n",[115,147173,147174],{"__ignoreMap":39},[118,147175,147176,147178,147180],{"class":120,"line":121},[118,147177,23836],{"class":1967},[118,147179,23839],{"class":233},[118,147181,147182],{"class":233}," pyecharts\n",[15,147184,147185],{},"验证：",[109,147187,147189],{"className":30371,"code":147188,"language":30373,"meta":39,"style":39},"import pyecharts\n\nprint(pyecharts.__version__)\n",[115,147190,147191,147197,147201],{"__ignoreMap":39},[118,147192,147193,147195],{"class":120,"line":121},[118,147194,30385],{"class":124},[118,147196,147182],{"class":128},[118,147198,147199],{"class":120,"line":40},[118,147200,2404],{"emptyLinePlaceholder":45},[118,147202,147203,147205,147208,147211],{"class":120,"line":1183},[118,147204,30408],{"class":177},[118,147206,147207],{"class":128},"(pyecharts.",[118,147209,147210],{"class":177},"__version__",[118,147212,135],{"class":128},[15,147214,147215],{},"如果使用虚拟环境，要先激活环境再安装。",[60,147217,147219],{"id":147218},"_104-第一个折线图","10.4 第一个折线图",[109,147221,147223],{"className":30371,"code":147222,"language":30373,"meta":39,"style":39},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[115,147224,147225,147237,147241,147251,147281,147313],{"__ignoreMap":39},[118,147226,147227,147229,147232,147234],{"class":120,"line":121},[118,147228,30730],{"class":124},[118,147230,147231],{"class":128}," pyecharts.charts ",[118,147233,30385],{"class":124},[118,147235,147236],{"class":128}," Line\n",[118,147238,147239],{"class":120,"line":40},[118,147240,2404],{"emptyLinePlaceholder":45},[118,147242,147243,147246,147248],{"class":120,"line":1183},[118,147244,147245],{"class":128},"line ",[118,147247,174],{"class":124},[118,147249,147250],{"class":128}," Line()\n",[118,147252,147253,147256,147259,147261,147264,147266,147269,147271,147274,147276,147279],{"class":120,"line":1198},[118,147254,147255],{"class":128},"line.add_xaxis([",[118,147257,147258],{"class":233},"\"周一\"",[118,147260,12440],{"class":128},[118,147262,147263],{"class":233},"\"周二\"",[118,147265,12440],{"class":128},[118,147267,147268],{"class":233},"\"周三\"",[118,147270,12440],{"class":128},[118,147272,147273],{"class":233},"\"周四\"",[118,147275,12440],{"class":128},[118,147277,147278],{"class":233},"\"周五\"",[118,147280,4661],{"class":128},[118,147282,147283,147286,147289,147291,147293,147295,147297,147299,147301,147303,147306,147308,147311],{"class":120,"line":1204},[118,147284,147285],{"class":128},"line.add_yaxis(",[118,147287,147288],{"class":233},"\"销售额\"",[118,147290,77511],{"class":128},[118,147292,439],{"class":177},[118,147294,12440],{"class":128},[118,147296,945],{"class":177},[118,147298,12440],{"class":128},[118,147300,990],{"class":177},[118,147302,12440],{"class":128},[118,147304,147305],{"class":177},"150",[118,147307,12440],{"class":128},[118,147309,147310],{"class":177},"180",[118,147312,4661],{"class":128},[118,147314,147315,147318,147321],{"class":120,"line":1218},[118,147316,147317],{"class":128},"line.render(",[118,147319,147320],{"class":233},"\"line.html\"",[118,147322,135],{"class":128},[15,147324,147325,147326,147329],{},"运行后会生成 ",[115,147327,147328],{},"line.html","，用浏览器打开即可看到图表。",[15,147331,147332],{},"核心步骤：",[72,147334,147335,147338,147341,147344,147347],{},[75,147336,147337],{},"导入图表类。",[75,147339,147340],{},"创建图表对象。",[75,147342,147343],{},"添加 x 轴数据。",[75,147345,147346],{},"添加 y 轴数据。",[75,147348,147349],{},"渲染为 HTML。",[60,147351,147353],{"id":147352},"_105-全局配置","10.5 全局配置",[15,147355,147356,147357,147360],{},"常用配置在 ",[115,147358,147359],{},"pyecharts.options"," 中。",[109,147362,147364],{"className":30371,"code":147363,"language":30373,"meta":39,"style":39},"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",[115,147365,147366,147383,147393,147397,147405,147429,147457,147462,147481,147500,147518,147538,147542],{"__ignoreMap":39},[118,147367,147368,147370,147373,147375,147378,147380],{"class":120,"line":121},[118,147369,30730],{"class":124},[118,147371,147372],{"class":128}," pyecharts ",[118,147374,30385],{"class":124},[118,147376,147377],{"class":128}," options ",[118,147379,31376],{"class":124},[118,147381,147382],{"class":128}," opts\n",[118,147384,147385,147387,147389,147391],{"class":120,"line":40},[118,147386,30730],{"class":124},[118,147388,147231],{"class":128},[118,147390,30385],{"class":124},[118,147392,147236],{"class":128},[118,147394,147395],{"class":120,"line":1183},[118,147396,2404],{"emptyLinePlaceholder":45},[118,147398,147399,147401,147403],{"class":120,"line":1198},[118,147400,147245],{"class":128},[118,147402,174],{"class":124},[118,147404,147250],{"class":128},[118,147406,147407,147409,147411,147413,147415,147417,147419,147421,147423,147425,147427],{"class":120,"line":1204},[118,147408,147255],{"class":128},[118,147410,147258],{"class":233},[118,147412,12440],{"class":128},[118,147414,147263],{"class":233},[118,147416,12440],{"class":128},[118,147418,147268],{"class":233},[118,147420,12440],{"class":128},[118,147422,147273],{"class":233},[118,147424,12440],{"class":128},[118,147426,147278],{"class":233},[118,147428,4661],{"class":128},[118,147430,147431,147433,147435,147437,147439,147441,147443,147445,147447,147449,147451,147453,147455],{"class":120,"line":1218},[118,147432,147285],{"class":128},[118,147434,147288],{"class":233},[118,147436,77511],{"class":128},[118,147438,439],{"class":177},[118,147440,12440],{"class":128},[118,147442,945],{"class":177},[118,147444,12440],{"class":128},[118,147446,990],{"class":177},[118,147448,12440],{"class":128},[118,147450,147305],{"class":177},[118,147452,12440],{"class":128},[118,147454,147310],{"class":177},[118,147456,4661],{"class":128},[118,147458,147459],{"class":120,"line":1224},[118,147460,147461],{"class":128},"line.set_global_opts(\n",[118,147463,147464,147467,147469,147472,147474,147476,147479],{"class":120,"line":1315},[118,147465,147466],{"class":5221},"    title_opts",[118,147468,174],{"class":124},[118,147470,147471],{"class":128},"opts.TitleOpts(",[118,147473,51400],{"class":5221},[118,147475,174],{"class":124},[118,147477,147478],{"class":233},"\"一周销售额\"",[118,147480,38040],{"class":128},[118,147482,147483,147486,147488,147491,147493,147495,147498],{"class":120,"line":1321},[118,147484,147485],{"class":5221},"    xaxis_opts",[118,147487,174],{"class":124},[118,147489,147490],{"class":128},"opts.AxisOpts(",[118,147492,79803],{"class":5221},[118,147494,174],{"class":124},[118,147496,147497],{"class":233},"\"日期\"",[118,147499,38040],{"class":128},[118,147501,147502,147505,147507,147509,147511,147513,147516],{"class":120,"line":1333},[118,147503,147504],{"class":5221},"    yaxis_opts",[118,147506,174],{"class":124},[118,147508,147490],{"class":128},[118,147510,79803],{"class":5221},[118,147512,174],{"class":124},[118,147514,147515],{"class":233},"\"金额\"",[118,147517,38040],{"class":128},[118,147519,147520,147523,147525,147528,147531,147533,147536],{"class":120,"line":1616},[118,147521,147522],{"class":5221},"    tooltip_opts",[118,147524,174],{"class":124},[118,147526,147527],{"class":128},"opts.TooltipOpts(",[118,147529,147530],{"class":5221},"trigger",[118,147532,174],{"class":124},[118,147534,147535],{"class":233},"\"axis\"",[118,147537,38040],{"class":128},[118,147539,147540],{"class":120,"line":1621},[118,147541,135],{"class":128},[118,147543,147544,147546,147548],{"class":120,"line":1627},[118,147545,147317],{"class":128},[118,147547,147320],{"class":233},[118,147549,135],{"class":128},[15,147551,147552],{},"常见全局配置：",[266,147554,147555,147564],{},[269,147556,147557],{},[272,147558,147559,147562],{},[275,147560,147561],{},"配置",[275,147563,102689],{},[313,147565,147566,147576,147586,147596,147606,147616],{},[272,147567,147568,147573],{},[318,147569,147570],{},[115,147571,147572],{},"TitleOpts",[318,147574,147575],{},"标题",[272,147577,147578,147583],{},[318,147579,147580],{},[115,147581,147582],{},"LegendOpts",[318,147584,147585],{},"图例",[272,147587,147588,147593],{},[318,147589,147590],{},[115,147591,147592],{},"TooltipOpts",[318,147594,147595],{},"提示框",[272,147597,147598,147603],{},[318,147599,147600],{},[115,147601,147602],{},"AxisOpts",[318,147604,147605],{},"坐标轴",[272,147607,147608,147613],{},[318,147609,147610],{},[115,147611,147612],{},"VisualMapOpts",[318,147614,147615],{},"视觉映射",[272,147617,147618,147623],{},[318,147619,147620],{},[115,147621,147622],{},"DataZoomOpts",[318,147624,147625],{},"区域缩放",[60,147627,147629],{"id":147628},"_106-系列配置","10.6 系列配置",[15,147631,147632],{},"系列配置作用于某一组数据。",[109,147634,147636],{"className":30371,"code":147635,"language":30373,"meta":39,"style":39},"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",[115,147637,147638,147643,147654,147683,147694,147713],{"__ignoreMap":39},[118,147639,147640],{"class":120,"line":121},[118,147641,147642],{"class":128},"line.add_yaxis(\n",[118,147644,147645,147648,147650,147652],{"class":120,"line":40},[118,147646,147647],{"class":5221},"    series_name",[118,147649,174],{"class":124},[118,147651,147288],{"class":233},[118,147653,31459],{"class":128},[118,147655,147656,147659,147661,147663,147665,147667,147669,147671,147673,147675,147677,147679,147681],{"class":120,"line":1183},[118,147657,147658],{"class":5221},"    y_axis",[118,147660,174],{"class":124},[118,147662,1018],{"class":128},[118,147664,439],{"class":177},[118,147666,12440],{"class":128},[118,147668,945],{"class":177},[118,147670,12440],{"class":128},[118,147672,990],{"class":177},[118,147674,12440],{"class":128},[118,147676,147305],{"class":177},[118,147678,12440],{"class":128},[118,147680,147310],{"class":177},[118,147682,87829],{"class":128},[118,147684,147685,147688,147690,147692],{"class":120,"line":1198},[118,147686,147687],{"class":5221},"    is_smooth",[118,147689,174],{"class":124},[118,147691,31469],{"class":177},[118,147693,31459],{"class":128},[118,147695,147696,147699,147701,147704,147707,147709,147711],{"class":120,"line":1204},[118,147697,147698],{"class":5221},"    label_opts",[118,147700,174],{"class":124},[118,147702,147703],{"class":128},"opts.LabelOpts(",[118,147705,147706],{"class":5221},"is_show",[118,147708,174],{"class":124},[118,147710,31469],{"class":177},[118,147712,38040],{"class":128},[118,147714,147715],{"class":120,"line":1218},[118,147716,135],{"class":128},[15,147718,147719],{},"常用参数：",[72,147721,147722,147728,147734,147740,147746],{},[75,147723,147724,147727],{},[115,147725,147726],{},"series_name","：系列名称。",[75,147729,147730,147733],{},[115,147731,147732],{},"y_axis","：y 轴数据。",[75,147735,147736,147739],{},[115,147737,147738],{},"is_smooth","：是否平滑曲线。",[75,147741,147742,147745],{},[115,147743,147744],{},"label_opts","：标签配置。",[75,147747,147748,147751],{},[115,147749,147750],{},"symbol_size","：标记点大小。",[60,147753,147755],{"id":147754},"_107-多条折线","10.7 多条折线",[109,147757,147759],{"className":30371,"code":147758,"language":30373,"meta":39,"style":39},"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",[115,147760,147761,147775,147785,147789,147818,147822,147830,147835,147873,147910,147914,147931,147947,147951],{"__ignoreMap":39},[118,147762,147763,147765,147767,147769,147771,147773],{"class":120,"line":121},[118,147764,30730],{"class":124},[118,147766,147372],{"class":128},[118,147768,30385],{"class":124},[118,147770,147377],{"class":128},[118,147772,31376],{"class":124},[118,147774,147382],{"class":128},[118,147776,147777,147779,147781,147783],{"class":120,"line":40},[118,147778,30730],{"class":124},[118,147780,147231],{"class":128},[118,147782,30385],{"class":124},[118,147784,147236],{"class":128},[118,147786,147787],{"class":120,"line":1183},[118,147788,2404],{"emptyLinePlaceholder":45},[118,147790,147791,147794,147796,147798,147800,147802,147804,147806,147808,147810,147812,147814,147816],{"class":120,"line":1198},[118,147792,147793],{"class":128},"dates ",[118,147795,174],{"class":124},[118,147797,52219],{"class":128},[118,147799,147258],{"class":233},[118,147801,12440],{"class":128},[118,147803,147263],{"class":233},[118,147805,12440],{"class":128},[118,147807,147268],{"class":233},[118,147809,12440],{"class":128},[118,147811,147273],{"class":233},[118,147813,12440],{"class":128},[118,147815,147278],{"class":233},[118,147817,33239],{"class":128},[118,147819,147820],{"class":120,"line":1204},[118,147821,2404],{"emptyLinePlaceholder":45},[118,147823,147824,147826,147828],{"class":120,"line":1218},[118,147825,147245],{"class":128},[118,147827,174],{"class":124},[118,147829,147250],{"class":128},[118,147831,147832],{"class":120,"line":1224},[118,147833,147834],{"class":128},"line.add_xaxis(dates)\n",[118,147836,147837,147839,147842,147844,147846,147848,147851,147853,147855,147857,147859,147861,147863,147865,147867,147869,147871],{"class":120,"line":1315},[118,147838,147285],{"class":128},[118,147840,147841],{"class":233},"\"线上销售\"",[118,147843,77511],{"class":128},[118,147845,439],{"class":177},[118,147847,12440],{"class":128},[118,147849,147850],{"class":177},"130",[118,147852,12440],{"class":128},[118,147854,945],{"class":177},[118,147856,12440],{"class":128},[118,147858,21053],{"class":177},[118,147860,12440],{"class":128},[118,147862,1726],{"class":177},[118,147864,112195],{"class":128},[118,147866,147738],{"class":5221},[118,147868,174],{"class":124},[118,147870,31469],{"class":177},[118,147872,135],{"class":128},[118,147874,147875,147877,147880,147882,147884,147886,147888,147890,147892,147894,147896,147898,147900,147902,147904,147906,147908],{"class":120,"line":1321},[118,147876,147285],{"class":128},[118,147878,147879],{"class":233},"\"线下销售\"",[118,147881,77511],{"class":128},[118,147883,740],{"class":177},[118,147885,12440],{"class":128},[118,147887,990],{"class":177},[118,147889,12440],{"class":128},[118,147891,439],{"class":177},[118,147893,12440],{"class":128},[118,147895,945],{"class":177},[118,147897,12440],{"class":128},[118,147899,147305],{"class":177},[118,147901,112195],{"class":128},[118,147903,147738],{"class":5221},[118,147905,174],{"class":124},[118,147907,31469],{"class":177},[118,147909,135],{"class":128},[118,147911,147912],{"class":120,"line":1333},[118,147913,147461],{"class":128},[118,147915,147916,147918,147920,147922,147924,147926,147929],{"class":120,"line":1616},[118,147917,147466],{"class":5221},[118,147919,174],{"class":124},[118,147921,147471],{"class":128},[118,147923,51400],{"class":5221},[118,147925,174],{"class":124},[118,147927,147928],{"class":233},"\"线上线下销售趋势\"",[118,147930,38040],{"class":128},[118,147932,147933,147935,147937,147939,147941,147943,147945],{"class":120,"line":1621},[118,147934,147522],{"class":5221},[118,147936,174],{"class":124},[118,147938,147527],{"class":128},[118,147940,147530],{"class":5221},[118,147942,174],{"class":124},[118,147944,147535],{"class":233},[118,147946,38040],{"class":128},[118,147948,147949],{"class":120,"line":1627},[118,147950,135],{"class":128},[118,147952,147953,147955,147958],{"class":120,"line":1632},[118,147954,147317],{"class":128},[118,147956,147957],{"class":233},"\"sales.html\"",[118,147959,135],{"class":128},[15,147961,147962],{},"多条折线适合比较不同指标或不同地区。",[60,147964,147966],{"id":147965},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[15,147968,147969,147970,24623],{},"假设 ",[115,147971,147972],{},"sales.json",[109,147974,147976],{"className":147038,"code":147975,"language":145785,"meta":39,"style":39},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[115,147977,147978,147983,148015,148043,148071],{"__ignoreMap":39},[118,147979,147980],{"class":120,"line":121},[118,147981,147982],{"class":128},"[\n",[118,147984,147985,147988,147991,147993,147995,147997,148000,148002,148004,148006,148009,148011,148013],{"class":120,"line":40},[118,147986,147987],{"class":128},"  {",[118,147989,147990],{"class":177},"\"date\"",[118,147992,51430],{"class":128},[118,147994,147258],{"class":233},[118,147996,12440],{"class":128},[118,147998,147999],{"class":177},"\"online\"",[118,148001,51430],{"class":128},[118,148003,439],{"class":177},[118,148005,12440],{"class":128},[118,148007,148008],{"class":177},"\"offline\"",[118,148010,51430],{"class":128},[118,148012,740],{"class":177},[118,148014,4934],{"class":128},[118,148016,148017,148019,148021,148023,148025,148027,148029,148031,148033,148035,148037,148039,148041],{"class":120,"line":1183},[118,148018,147987],{"class":128},[118,148020,147990],{"class":177},[118,148022,51430],{"class":128},[118,148024,147263],{"class":233},[118,148026,12440],{"class":128},[118,148028,147999],{"class":177},[118,148030,51430],{"class":128},[118,148032,147850],{"class":177},[118,148034,12440],{"class":128},[118,148036,148008],{"class":177},[118,148038,51430],{"class":128},[118,148040,990],{"class":177},[118,148042,4934],{"class":128},[118,148044,148045,148047,148049,148051,148053,148055,148057,148059,148061,148063,148065,148067,148069],{"class":120,"line":1198},[118,148046,147987],{"class":128},[118,148048,147990],{"class":177},[118,148050,51430],{"class":128},[118,148052,147268],{"class":233},[118,148054,12440],{"class":128},[118,148056,147999],{"class":177},[118,148058,51430],{"class":128},[118,148060,945],{"class":177},[118,148062,12440],{"class":128},[118,148064,148008],{"class":177},[118,148066,51430],{"class":128},[118,148068,439],{"class":177},[118,148070,1569],{"class":128},[118,148072,148073],{"class":120,"line":1204},[118,148074,33239],{"class":128},[15,148076,148077],{},"读取并绘图：",[109,148079,148081],{"className":30371,"code":148080,"language":30373,"meta":39,"style":39},"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",[115,148082,148083,148089,148103,148113,148117,148149,148162,148166,148174,148183,148192,148196,148208,148217,148226,148235,148239,148247,148251,148268,148285,148289,148306,148322,148326],{"__ignoreMap":39},[118,148084,148085,148087],{"class":120,"line":121},[118,148086,30385],{"class":124},[118,148088,147084],{"class":128},[118,148090,148091,148093,148095,148097,148099,148101],{"class":120,"line":40},[118,148092,30730],{"class":124},[118,148094,147372],{"class":128},[118,148096,30385],{"class":124},[118,148098,147377],{"class":128},[118,148100,31376],{"class":124},[118,148102,147382],{"class":128},[118,148104,148105,148107,148109,148111],{"class":120,"line":1183},[118,148106,30730],{"class":124},[118,148108,147231],{"class":128},[118,148110,30385],{"class":124},[118,148112,147236],{"class":128},[118,148114,148115],{"class":120,"line":1198},[118,148116,2404],{"emptyLinePlaceholder":45},[118,148118,148119,148121,148123,148125,148128,148130,148132,148134,148136,148138,148140,148142,148144,148147],{"class":120,"line":1204},[118,148120,107826],{"class":124},[118,148122,146784],{"class":177},[118,148124,129],{"class":128},[118,148126,148127],{"class":233},"\"sales.json\"",[118,148129,12440],{"class":128},[118,148131,146794],{"class":233},[118,148133,12440],{"class":128},[118,148135,146799],{"class":5221},[118,148137,174],{"class":124},[118,148139,146804],{"class":233},[118,148141,13719],{"class":128},[118,148143,31376],{"class":124},[118,148145,148146],{"class":5221}," file",[118,148148,3743],{"class":128},[118,148150,148151,148153,148155,148158,148160],{"class":120,"line":1218},[118,148152,101414],{"class":128},[118,148154,174],{"class":124},[118,148156,148157],{"class":128}," json.load(",[118,148159,45347],{"class":5221},[118,148161,135],{"class":128},[118,148163,148164],{"class":120,"line":1224},[118,148165,2404],{"emptyLinePlaceholder":45},[118,148167,148168,148170,148172],{"class":120,"line":1315},[118,148169,147793],{"class":128},[118,148171,174],{"class":124},[118,148173,51831],{"class":128},[118,148175,148176,148179,148181],{"class":120,"line":1321},[118,148177,148178],{"class":128},"online_sales ",[118,148180,174],{"class":124},[118,148182,51831],{"class":128},[118,148184,148185,148188,148190],{"class":120,"line":1333},[118,148186,148187],{"class":128},"offline_sales ",[118,148189,174],{"class":124},[118,148191,51831],{"class":128},[118,148193,148194],{"class":120,"line":1616},[118,148195,2404],{"emptyLinePlaceholder":45},[118,148197,148198,148200,148203,148205],{"class":120,"line":1621},[118,148199,3029],{"class":124},[118,148201,148202],{"class":128}," item ",[118,148204,26036],{"class":124},[118,148206,148207],{"class":128}," data:\n",[118,148209,148210,148213,148215],{"class":120,"line":1627},[118,148211,148212],{"class":128},"    dates.append(item[",[118,148214,147990],{"class":233},[118,148216,4661],{"class":128},[118,148218,148219,148222,148224],{"class":120,"line":1632},[118,148220,148221],{"class":128},"    online_sales.append(item[",[118,148223,147999],{"class":233},[118,148225,4661],{"class":128},[118,148227,148228,148231,148233],{"class":120,"line":1646},[118,148229,148230],{"class":128},"    offline_sales.append(item[",[118,148232,148008],{"class":233},[118,148234,4661],{"class":128},[118,148236,148237],{"class":120,"line":1651},[118,148238,2404],{"emptyLinePlaceholder":45},[118,148240,148241,148243,148245],{"class":120,"line":1657},[118,148242,147245],{"class":128},[118,148244,174],{"class":124},[118,148246,147250],{"class":128},[118,148248,148249],{"class":120,"line":1678},[118,148250,147834],{"class":128},[118,148252,148253,148255,148257,148260,148262,148264,148266],{"class":120,"line":1683},[118,148254,147285],{"class":128},[118,148256,147841],{"class":233},[118,148258,148259],{"class":128},", online_sales, ",[118,148261,147738],{"class":5221},[118,148263,174],{"class":124},[118,148265,31469],{"class":177},[118,148267,135],{"class":128},[118,148269,148270,148272,148274,148277,148279,148281,148283],{"class":120,"line":1697},[118,148271,147285],{"class":128},[118,148273,147879],{"class":233},[118,148275,148276],{"class":128},", offline_sales, ",[118,148278,147738],{"class":5221},[118,148280,174],{"class":124},[118,148282,31469],{"class":177},[118,148284,135],{"class":128},[118,148286,148287],{"class":120,"line":1702},[118,148288,147461],{"class":128},[118,148290,148291,148293,148295,148297,148299,148301,148304],{"class":120,"line":1731},[118,148292,147466],{"class":5221},[118,148294,174],{"class":124},[118,148296,147471],{"class":128},[118,148298,51400],{"class":5221},[118,148300,174],{"class":124},[118,148302,148303],{"class":233},"\"销售趋势\"",[118,148305,38040],{"class":128},[118,148307,148308,148310,148312,148314,148316,148318,148320],{"class":120,"line":1736},[118,148309,147522],{"class":5221},[118,148311,174],{"class":124},[118,148313,147527],{"class":128},[118,148315,147530],{"class":5221},[118,148317,174],{"class":124},[118,148319,147535],{"class":233},[118,148321,38040],{"class":128},[118,148323,148324],{"class":120,"line":1753},[118,148325,135],{"class":128},[118,148327,148328,148330,148332],{"class":120,"line":1758},[118,148329,147317],{"class":128},[118,148331,147957],{"class":233},[118,148333,135],{"class":128},[60,148335,148337],{"id":148336},"_109-数据清洗","10.9 数据清洗",[15,148339,148340],{},"真实数据经常不整齐，需要清洗。",[15,148342,148343],{},"常见问题：",[72,148345,148346,148349,148352,148355],{},[75,148347,148348],{},"数字是字符串。",[75,148350,148351],{},"字段缺失。",[75,148353,148354],{},"空值。",[75,148356,148357],{},"日期格式不统一。",[15,148359,15140],{},[109,148361,148363],{"className":30371,"code":148362,"language":30373,"meta":39,"style":39},"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",[115,148364,148365,148374,148397,148417,148438,148442,148446,148454,148463,148467,148478,148492,148501,148506,148510,148518,148528,148532,148539],{"__ignoreMap":39},[118,148366,148367,148370,148372],{"class":120,"line":121},[118,148368,148369],{"class":128},"raw_data ",[118,148371,174],{"class":124},[118,148373,55440],{"class":128},[118,148375,148376,148379,148381,148383,148385,148387,148390,148392,148395],{"class":120,"line":40},[118,148377,148378],{"class":128},"    {",[118,148380,147990],{"class":233},[118,148382,51430],{"class":128},[118,148384,147258],{"class":233},[118,148386,12440],{"class":128},[118,148388,148389],{"class":233},"\"sales\"",[118,148391,51430],{"class":128},[118,148393,148394],{"class":233},"\"100\"",[118,148396,4934],{"class":128},[118,148398,148399,148401,148403,148405,148407,148409,148411,148413,148415],{"class":120,"line":1183},[118,148400,148378],{"class":128},[118,148402,147990],{"class":233},[118,148404,51430],{"class":128},[118,148406,147263],{"class":233},[118,148408,12440],{"class":128},[118,148410,148389],{"class":233},[118,148412,51430],{"class":128},[118,148414,7657],{"class":233},[118,148416,4934],{"class":128},[118,148418,148419,148421,148423,148425,148427,148429,148431,148433,148436],{"class":120,"line":1198},[118,148420,148378],{"class":128},[118,148422,147990],{"class":233},[118,148424,51430],{"class":128},[118,148426,147268],{"class":233},[118,148428,12440],{"class":128},[118,148430,148389],{"class":233},[118,148432,51430],{"class":128},[118,148434,148435],{"class":233},"\"120\"",[118,148437,4934],{"class":128},[118,148439,148440],{"class":120,"line":1204},[118,148441,33239],{"class":128},[118,148443,148444],{"class":120,"line":1218},[118,148445,2404],{"emptyLinePlaceholder":45},[118,148447,148448,148450,148452],{"class":120,"line":1224},[118,148449,147793],{"class":128},[118,148451,174],{"class":124},[118,148453,51831],{"class":128},[118,148455,148456,148459,148461],{"class":120,"line":1315},[118,148457,148458],{"class":128},"sales ",[118,148460,174],{"class":124},[118,148462,51831],{"class":128},[118,148464,148465],{"class":120,"line":1321},[118,148466,2404],{"emptyLinePlaceholder":45},[118,148468,148469,148471,148473,148475],{"class":120,"line":1333},[118,148470,3029],{"class":124},[118,148472,148202],{"class":128},[118,148474,26036],{"class":124},[118,148476,148477],{"class":128}," raw_data:\n",[118,148479,148480,148483,148485,148488,148490],{"class":120,"line":1616},[118,148481,148482],{"class":128},"    value ",[118,148484,174],{"class":124},[118,148486,148487],{"class":128}," item.get(",[118,148489,148389],{"class":233},[118,148491,135],{"class":128},[118,148493,148494,148496,148498],{"class":120,"line":1621},[118,148495,3105],{"class":124},[118,148497,38923],{"class":124},[118,148499,148500],{"class":128}," value:\n",[118,148502,148503],{"class":120,"line":1627},[118,148504,148505],{"class":124},"        continue\n",[118,148507,148508],{"class":120,"line":1632},[118,148509,2404],{"emptyLinePlaceholder":45},[118,148511,148512,148514,148516],{"class":120,"line":1646},[118,148513,148212],{"class":128},[118,148515,147990],{"class":233},[118,148517,4661],{"class":128},[118,148519,148520,148523,148525],{"class":120,"line":1651},[118,148521,148522],{"class":128},"    sales.append(",[118,148524,132],{"class":177},[118,148526,148527],{"class":128},"(value))\n",[118,148529,148530],{"class":120,"line":1657},[118,148531,2404],{"emptyLinePlaceholder":45},[118,148533,148534,148536],{"class":120,"line":1678},[118,148535,30408],{"class":177},[118,148537,148538],{"class":128},"(dates)\n",[118,148540,148541,148543],{"class":120,"line":1683},[118,148542,30408],{"class":177},[118,148544,148545],{"class":128},"(sales)\n",[60,148547,148549],{"id":148548},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[109,148551,148553],{"className":30371,"code":148552,"language":30373,"meta":39,"style":39},"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",[115,148554,148555,148569,148579,148583,148591,148612,148634,148656,148678,148700,148704,148708,148730,148751,148755,148763,148767,148771,148781,148790,148800,148816,148820,148824,148841,148857,148873,148889,148899,148903],{"__ignoreMap":39},[118,148556,148557,148559,148561,148563,148565,148567],{"class":120,"line":121},[118,148558,30730],{"class":124},[118,148560,147372],{"class":128},[118,148562,30385],{"class":124},[118,148564,147377],{"class":128},[118,148566,31376],{"class":124},[118,148568,147382],{"class":128},[118,148570,148571,148573,148575,148577],{"class":120,"line":40},[118,148572,30730],{"class":124},[118,148574,147231],{"class":128},[118,148576,30385],{"class":124},[118,148578,147236],{"class":128},[118,148580,148581],{"class":120,"line":1183},[118,148582,2404],{"emptyLinePlaceholder":45},[118,148584,148585,148587,148589],{"class":120,"line":1198},[118,148586,148458],{"class":128},[118,148588,174],{"class":124},[118,148590,55440],{"class":128},[118,148592,148593,148595,148597,148599,148602,148604,148606,148608,148610],{"class":120,"line":1204},[118,148594,148378],{"class":128},[118,148596,147990],{"class":233},[118,148598,51430],{"class":128},[118,148600,148601],{"class":233},"\"2024-10-01\"",[118,148603,12440],{"class":128},[118,148605,84077],{"class":233},[118,148607,51430],{"class":128},[118,148609,92016],{"class":177},[118,148611,4934],{"class":128},[118,148613,148614,148616,148618,148620,148623,148625,148627,148629,148632],{"class":120,"line":1218},[118,148615,148378],{"class":128},[118,148617,147990],{"class":233},[118,148619,51430],{"class":128},[118,148621,148622],{"class":233},"\"2024-10-02\"",[118,148624,12440],{"class":128},[118,148626,84077],{"class":233},[118,148628,51430],{"class":128},[118,148630,148631],{"class":177},"1800",[118,148633,4934],{"class":128},[118,148635,148636,148638,148640,148642,148645,148647,148649,148651,148654],{"class":120,"line":1224},[118,148637,148378],{"class":128},[118,148639,147990],{"class":233},[118,148641,51430],{"class":128},[118,148643,148644],{"class":233},"\"2024-10-03\"",[118,148646,12440],{"class":128},[118,148648,84077],{"class":233},[118,148650,51430],{"class":128},[118,148652,148653],{"class":177},"1500",[118,148655,4934],{"class":128},[118,148657,148658,148660,148662,148664,148667,148669,148671,148673,148676],{"class":120,"line":1315},[118,148659,148378],{"class":128},[118,148661,147990],{"class":233},[118,148663,51430],{"class":128},[118,148665,148666],{"class":233},"\"2024-10-04\"",[118,148668,12440],{"class":128},[118,148670,84077],{"class":233},[118,148672,51430],{"class":128},[118,148674,148675],{"class":177},"2100",[118,148677,4934],{"class":128},[118,148679,148680,148682,148684,148686,148689,148691,148693,148695,148698],{"class":120,"line":1321},[118,148681,148378],{"class":128},[118,148683,147990],{"class":233},[118,148685,51430],{"class":128},[118,148687,148688],{"class":233},"\"2024-10-05\"",[118,148690,12440],{"class":128},[118,148692,84077],{"class":233},[118,148694,51430],{"class":128},[118,148696,148697],{"class":177},"2600",[118,148699,4934],{"class":128},[118,148701,148702],{"class":120,"line":1333},[118,148703,33239],{"class":128},[118,148705,148706],{"class":120,"line":1616},[118,148707,2404],{"emptyLinePlaceholder":45},[118,148709,148710,148712,148714,148717,148719,148721,148723,148725,148727],{"class":120,"line":1621},[118,148711,147793],{"class":128},[118,148713,174],{"class":124},[118,148715,148716],{"class":128}," [item[",[118,148718,147990],{"class":233},[118,148720,4447],{"class":128},[118,148722,3029],{"class":124},[118,148724,148202],{"class":128},[118,148726,26036],{"class":124},[118,148728,148729],{"class":128}," sales]\n",[118,148731,148732,148735,148737,148739,148741,148743,148745,148747,148749],{"class":120,"line":1627},[118,148733,148734],{"class":128},"amounts ",[118,148736,174],{"class":124},[118,148738,148716],{"class":128},[118,148740,84077],{"class":233},[118,148742,4447],{"class":128},[118,148744,3029],{"class":124},[118,148746,148202],{"class":128},[118,148748,26036],{"class":124},[118,148750,148729],{"class":128},[118,148752,148753],{"class":120,"line":1632},[118,148754,2404],{"emptyLinePlaceholder":45},[118,148756,148757,148759,148761],{"class":120,"line":1646},[118,148758,147245],{"class":128},[118,148760,174],{"class":124},[118,148762,147250],{"class":128},[118,148764,148765],{"class":120,"line":1651},[118,148766,147834],{"class":128},[118,148768,148769],{"class":120,"line":1657},[118,148770,147642],{"class":128},[118,148772,148773,148775,148777,148779],{"class":120,"line":1678},[118,148774,147647],{"class":5221},[118,148776,174],{"class":124},[118,148778,147288],{"class":233},[118,148780,31459],{"class":128},[118,148782,148783,148785,148787],{"class":120,"line":1683},[118,148784,147658],{"class":5221},[118,148786,174],{"class":124},[118,148788,148789],{"class":128},"amounts,\n",[118,148791,148792,148794,148796,148798],{"class":120,"line":1697},[118,148793,147687],{"class":5221},[118,148795,174],{"class":124},[118,148797,31469],{"class":177},[118,148799,31459],{"class":128},[118,148801,148802,148804,148806,148808,148810,148812,148814],{"class":120,"line":1702},[118,148803,147698],{"class":5221},[118,148805,174],{"class":124},[118,148807,147703],{"class":128},[118,148809,147706],{"class":5221},[118,148811,174],{"class":124},[118,148813,31469],{"class":177},[118,148815,38040],{"class":128},[118,148817,148818],{"class":120,"line":1731},[118,148819,135],{"class":128},[118,148821,148822],{"class":120,"line":1736},[118,148823,147461],{"class":128},[118,148825,148826,148828,148830,148832,148834,148836,148839],{"class":120,"line":1753},[118,148827,147466],{"class":5221},[118,148829,174],{"class":124},[118,148831,147471],{"class":128},[118,148833,51400],{"class":5221},[118,148835,174],{"class":124},[118,148837,148838],{"class":233},"\"每日销售额\"",[118,148840,38040],{"class":128},[118,148842,148843,148845,148847,148849,148851,148853,148855],{"class":120,"line":1758},[118,148844,147485],{"class":5221},[118,148846,174],{"class":124},[118,148848,147490],{"class":128},[118,148850,79803],{"class":5221},[118,148852,174],{"class":124},[118,148854,147497],{"class":233},[118,148856,38040],{"class":128},[118,148858,148859,148861,148863,148865,148867,148869,148871],{"class":120,"line":1763},[118,148860,147504],{"class":5221},[118,148862,174],{"class":124},[118,148864,147490],{"class":128},[118,148866,79803],{"class":5221},[118,148868,174],{"class":124},[118,148870,147515],{"class":233},[118,148872,38040],{"class":128},[118,148874,148875,148877,148879,148881,148883,148885,148887],{"class":120,"line":1768},[118,148876,147522],{"class":5221},[118,148878,174],{"class":124},[118,148880,147527],{"class":128},[118,148882,147530],{"class":5221},[118,148884,174],{"class":124},[118,148886,147535],{"class":233},[118,148888,38040],{"class":128},[118,148890,148891,148894,148896],{"class":120,"line":1782},[118,148892,148893],{"class":5221},"    datazoom_opts",[118,148895,174],{"class":124},[118,148897,148898],{"class":128},"[opts.DataZoomOpts()],\n",[118,148900,148901],{"class":120,"line":1787},[118,148902,135],{"class":128},[118,148904,148905,148907,148910],{"class":120,"line":2581},[118,148906,147317],{"class":128},[118,148908,148909],{"class":233},"\"daily_sales.html\"",[118,148911,135],{"class":128},[15,148913,148914,148917],{},[115,148915,148916],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[60,148919,148921],{"id":148920},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[15,148923,148924],{},"如果数据结构如下：",[109,148926,148928],{"className":30371,"code":148927,"language":30373,"meta":39,"style":39},"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",[115,148929,148930,148938,148946,148968,148989,148994,149001,149021,149041,149045],{"__ignoreMap":39},[118,148931,148932,148934,148936],{"class":120,"line":121},[118,148933,101651],{"class":128},[118,148935,174],{"class":124},[118,148937,15577],{"class":128},[118,148939,148940,148943],{"class":120,"line":40},[118,148941,148942],{"class":233},"    \"北京\"",[118,148944,148945],{"class":128},": [\n",[118,148947,148948,148950,148952,148954,148957,148959,148962,148964,148966],{"class":120,"line":1183},[118,148949,4921],{"class":128},[118,148951,147990],{"class":233},[118,148953,51430],{"class":128},[118,148955,148956],{"class":233},"\"2024-01-01\"",[118,148958,12440],{"class":128},[118,148960,148961],{"class":233},"\"confirm\"",[118,148963,51430],{"class":128},[118,148965,574],{"class":177},[118,148967,4934],{"class":128},[118,148969,148970,148972,148974,148976,148979,148981,148983,148985,148987],{"class":120,"line":1198},[118,148971,4921],{"class":128},[118,148973,147990],{"class":233},[118,148975,51430],{"class":128},[118,148977,148978],{"class":233},"\"2024-01-02\"",[118,148980,12440],{"class":128},[118,148982,148961],{"class":233},[118,148984,51430],{"class":128},[118,148986,626],{"class":177},[118,148988,4934],{"class":128},[118,148990,148991],{"class":120,"line":1204},[118,148992,148993],{"class":128},"    ],\n",[118,148995,148996,148999],{"class":120,"line":1218},[118,148997,148998],{"class":233},"    \"上海\"",[118,149000,148945],{"class":128},[118,149002,149003,149005,149007,149009,149011,149013,149015,149017,149019],{"class":120,"line":1224},[118,149004,4921],{"class":128},[118,149006,147990],{"class":233},[118,149008,51430],{"class":128},[118,149010,148956],{"class":233},[118,149012,12440],{"class":128},[118,149014,148961],{"class":233},[118,149016,51430],{"class":128},[118,149018,523],{"class":177},[118,149020,4934],{"class":128},[118,149022,149023,149025,149027,149029,149031,149033,149035,149037,149039],{"class":120,"line":1315},[118,149024,4921],{"class":128},[118,149026,147990],{"class":233},[118,149028,51430],{"class":128},[118,149030,148978],{"class":233},[118,149032,12440],{"class":128},[118,149034,148961],{"class":233},[118,149036,51430],{"class":128},[118,149038,651],{"class":177},[118,149040,4934],{"class":128},[118,149042,149043],{"class":120,"line":1321},[118,149044,148993],{"class":128},[118,149046,149047],{"class":120,"line":1333},[118,149048,1569],{"class":128},[15,149050,149051],{},"绘制多地区趋势：",[109,149053,149055],{"className":30371,"code":149054,"language":30373,"meta":39,"style":39},"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",[115,149056,149057,149071,149081,149085,149110,149114,149122,149126,149130,149142,149164,149177,149181,149185,149202,149218,149222],{"__ignoreMap":39},[118,149058,149059,149061,149063,149065,149067,149069],{"class":120,"line":121},[118,149060,30730],{"class":124},[118,149062,147372],{"class":128},[118,149064,30385],{"class":124},[118,149066,147377],{"class":128},[118,149068,31376],{"class":124},[118,149070,147382],{"class":128},[118,149072,149073,149075,149077,149079],{"class":120,"line":40},[118,149074,30730],{"class":124},[118,149076,147231],{"class":128},[118,149078,30385],{"class":124},[118,149080,147236],{"class":128},[118,149082,149083],{"class":120,"line":1183},[118,149084,2404],{"emptyLinePlaceholder":45},[118,149086,149087,149089,149091,149093,149095,149097,149099,149101,149103,149106,149108],{"class":120,"line":1198},[118,149088,147793],{"class":128},[118,149090,174],{"class":124},[118,149092,148716],{"class":128},[118,149094,147990],{"class":233},[118,149096,4447],{"class":128},[118,149098,3029],{"class":124},[118,149100,148202],{"class":128},[118,149102,26036],{"class":124},[118,149104,149105],{"class":128}," data[",[118,149107,69262],{"class":233},[118,149109,77520],{"class":128},[118,149111,149112],{"class":120,"line":1204},[118,149113,2404],{"emptyLinePlaceholder":45},[118,149115,149116,149118,149120],{"class":120,"line":1218},[118,149117,147245],{"class":128},[118,149119,174],{"class":124},[118,149121,147250],{"class":128},[118,149123,149124],{"class":120,"line":1224},[118,149125,147834],{"class":128},[118,149127,149128],{"class":120,"line":1315},[118,149129,2404],{"emptyLinePlaceholder":45},[118,149131,149132,149134,149137,149139],{"class":120,"line":1321},[118,149133,3029],{"class":124},[118,149135,149136],{"class":128}," city, records ",[118,149138,26036],{"class":124},[118,149140,149141],{"class":128}," data.items():\n",[118,149143,149144,149147,149149,149151,149153,149155,149157,149159,149161],{"class":120,"line":1333},[118,149145,149146],{"class":128},"    values ",[118,149148,174],{"class":124},[118,149150,148716],{"class":128},[118,149152,148961],{"class":233},[118,149154,4447],{"class":128},[118,149156,3029],{"class":124},[118,149158,148202],{"class":128},[118,149160,26036],{"class":124},[118,149162,149163],{"class":128}," records]\n",[118,149165,149166,149169,149171,149173,149175],{"class":120,"line":1616},[118,149167,149168],{"class":128},"    line.add_yaxis(city, values, ",[118,149170,147738],{"class":5221},[118,149172,174],{"class":124},[118,149174,31469],{"class":177},[118,149176,135],{"class":128},[118,149178,149179],{"class":120,"line":1621},[118,149180,2404],{"emptyLinePlaceholder":45},[118,149182,149183],{"class":120,"line":1627},[118,149184,147461],{"class":128},[118,149186,149187,149189,149191,149193,149195,149197,149200],{"class":120,"line":1632},[118,149188,147466],{"class":5221},[118,149190,174],{"class":124},[118,149192,147471],{"class":128},[118,149194,51400],{"class":5221},[118,149196,174],{"class":124},[118,149198,149199],{"class":233},"\"多地区趋势图\"",[118,149201,38040],{"class":128},[118,149203,149204,149206,149208,149210,149212,149214,149216],{"class":120,"line":1646},[118,149205,147522],{"class":5221},[118,149207,174],{"class":124},[118,149209,147527],{"class":128},[118,149211,147530],{"class":5221},[118,149213,174],{"class":124},[118,149215,147535],{"class":233},[118,149217,38040],{"class":128},[118,149219,149220],{"class":120,"line":1651},[118,149221,135],{"class":128},[118,149223,149224,149226,149229],{"class":120,"line":1657},[118,149225,147317],{"class":128},[118,149227,149228],{"class":233},"\"trend.html\"",[118,149230,135],{"class":128},[15,149232,149233],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[60,149235,149237],{"id":149236},"_1012-易错点","10.12 易错点",[72,149239,149240,149246,149252,149262,149268],{},[75,149241,149242,149245],{},[115,149243,149244],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[75,149247,149248,149251],{},[115,149249,149250],{},"render()"," 生成的是 HTML，不是图片。",[75,149253,149254,149255,149258,149259,28378],{},"JSON 字符串用 ",[115,149256,149257],{},"json.loads()","，JSON 文件用 ",[115,149260,149261],{},"json.load()",[75,149263,149264,149265,28378],{},"中文 JSON 保存时加 ",[115,149266,149267],{},"ensure_ascii=False",[75,149269,149270],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[60,149272,149274],{"id":149273},"_1013-本章练习","10.13 本章练习",[72,149276,149277,149280,149283,149286,149289],{},[75,149278,149279],{},"安装 pyecharts 并生成第一个折线图。",[75,149281,149282],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[75,149284,149285],{},"绘制两条折线，对比线上和线下销售额。",[75,149287,149288],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[75,149290,149291],{},"对含有空值的销售数据进行清洗后再绘图。",[5131,149293,149294],{},"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":39,"searchDepth":40,"depth":40,"links":149296},[149297,149298,149299,149300,149301,149302,149303,149304,149305,149306,149307,149308,149309],{"id":146913,"depth":40,"text":146914},{"id":146988,"depth":40,"text":146989},{"id":147167,"depth":40,"text":147168},{"id":147218,"depth":40,"text":147219},{"id":147352,"depth":40,"text":147353},{"id":147628,"depth":40,"text":147629},{"id":147754,"depth":40,"text":147755},{"id":147965,"depth":40,"text":147966},{"id":148336,"depth":40,"text":148337},{"id":148548,"depth":40,"text":148549},{"id":148920,"depth":40,"text":148921},{"id":149236,"depth":40,"text":149237},{"id":149273,"depth":40,"text":149274},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146905,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149316,"title":149317,"body":149318,"description":42,"extension":43,"meta":151678,"navigation":45,"path":151679,"seo":151680,"stem":151681,"__hash__":151682},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149319,"toc":151655},[149320,149323,149327,149330,149333,149409,149412,149503,149506,149510,149513,149557,149570,149574,149577,149644,149647,149651,149654,149738,149746,149750,149755,149896,149899,149910,149916,149922,150036,150040,150043,150046,150299,150302,150306,150309,150413,150416,150420,150571,150575,150582,150695,150699,150702,150808,150811,150815,150818,150849,150852,150957,150960,150964,150968,150978,151046,151050,151057,151121,151124,151128,151134,151230,151239,151243,151567,151576,151580,151608,151612,151652],[10,149321,149317],{"id":149322},"_11-面向对象基础",[60,149324,149326],{"id":149325},"_111-什么是面向对象","11.1 什么是面向对象",[15,149328,149329],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[15,149331,149332],{},"面向过程：",[109,149334,149336],{"className":30371,"code":149335,"language":30373,"meta":39,"style":39},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[115,149337,149338,149347,149355,149359,149369,149400,149404],{"__ignoreMap":39},[118,149339,149340,149342,149344],{"class":120,"line":121},[118,149341,146529],{"class":128},[118,149343,174],{"class":124},[118,149345,149346],{"class":233}," \"小明\"\n",[118,149348,149349,149351,149353],{"class":120,"line":40},[118,149350,146539],{"class":128},[118,149352,174],{"class":124},[118,149354,146544],{"class":177},[118,149356,149357],{"class":120,"line":1183},[118,149358,2404],{"emptyLinePlaceholder":45},[118,149360,149361,149363,149366],{"class":120,"line":1198},[118,149362,31940],{"class":124},[118,149364,149365],{"class":1967}," introduce",[118,149367,149368],{"class":128},"(name, age):\n",[118,149370,149371,149373,149375,149377,149380,149382,149384,149386,149389,149391,149393,149395,149398],{"class":120,"line":1204},[118,149372,31292],{"class":177},[118,149374,129],{"class":128},[118,149376,181],{"class":124},[118,149378,149379],{"class":233},"\"我叫",[118,149381,1024],{"class":177},[118,149383,79803],{"class":128},[118,149385,1074],{"class":177},[118,149387,149388],{"class":233},"，今年",[118,149390,1024],{"class":177},[118,149392,70214],{"class":128},[118,149394,1074],{"class":177},[118,149396,149397],{"class":233},"岁\"",[118,149399,135],{"class":128},[118,149401,149402],{"class":120,"line":1218},[118,149403,2404],{"emptyLinePlaceholder":45},[118,149405,149406],{"class":120,"line":1224},[118,149407,149408],{"class":128},"introduce(name, age)\n",[15,149410,149411],{},"面向对象：",[109,149413,149415],{"className":30371,"code":149414,"language":30373,"meta":39,"style":39},"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",[115,149416,149417,149425,149433,149462,149466,149470,149480,149489,149498],{"__ignoreMap":39},[118,149418,149419,149421,149423],{"class":120,"line":121},[118,149420,14699],{"class":124},[118,149422,7903],{"class":1967},[118,149424,3743],{"class":128},[118,149426,149427,149429,149431],{"class":120,"line":40},[118,149428,30794],{"class":124},[118,149430,149365],{"class":1967},[118,149432,30800],{"class":128},[118,149434,149435,149437,149439,149441,149443,149446,149448,149450,149452,149454,149456,149458,149460],{"class":120,"line":1183},[118,149436,32444],{"class":177},[118,149438,129],{"class":128},[118,149440,181],{"class":124},[118,149442,149379],{"class":233},[118,149444,149445],{"class":177},"{self",[118,149447,80294],{"class":128},[118,149449,1074],{"class":177},[118,149451,149388],{"class":233},[118,149453,149445],{"class":177},[118,149455,80306],{"class":128},[118,149457,1074],{"class":177},[118,149459,149397],{"class":233},[118,149461,135],{"class":128},[118,149463,149464],{"class":120,"line":1198},[118,149465,2404],{"emptyLinePlaceholder":45},[118,149467,149468],{"class":120,"line":1204},[118,149469,2404],{"emptyLinePlaceholder":45},[118,149471,149472,149475,149477],{"class":120,"line":1218},[118,149473,149474],{"class":128},"student ",[118,149476,174],{"class":124},[118,149478,149479],{"class":128}," Student()\n",[118,149481,149482,149485,149487],{"class":120,"line":1224},[118,149483,149484],{"class":128},"student.name ",[118,149486,174],{"class":124},[118,149488,149346],{"class":233},[118,149490,149491,149494,149496],{"class":120,"line":1315},[118,149492,149493],{"class":128},"student.age ",[118,149495,174],{"class":124},[118,149497,146544],{"class":177},[118,149499,149500],{"class":120,"line":1321},[118,149501,149502],{"class":128},"student.introduce()\n",[15,149504,149505],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[60,149507,149509],{"id":149508},"_112-类和对象","11.2 类和对象",[15,149511,149512],{},"类是模板，对象是根据模板创建出来的具体实例。",[109,149514,149516],{"className":30371,"code":149515,"language":30373,"meta":39,"style":39},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[115,149517,149518,149526,149531,149535,149539,149548],{"__ignoreMap":39},[118,149519,149520,149522,149524],{"class":120,"line":121},[118,149521,14699],{"class":124},[118,149523,7903],{"class":1967},[118,149525,3743],{"class":128},[118,149527,149528],{"class":120,"line":40},[118,149529,149530],{"class":124},"    pass\n",[118,149532,149533],{"class":120,"line":1183},[118,149534,2404],{"emptyLinePlaceholder":45},[118,149536,149537],{"class":120,"line":1198},[118,149538,2404],{"emptyLinePlaceholder":45},[118,149540,149541,149544,149546],{"class":120,"line":1204},[118,149542,149543],{"class":128},"student1 ",[118,149545,174],{"class":124},[118,149547,149479],{"class":128},[118,149549,149550,149553,149555],{"class":120,"line":1218},[118,149551,149552],{"class":128},"student2 ",[118,149554,174],{"class":124},[118,149556,149479],{"class":128},[15,149558,149559,149562,149563,101011,149566,149569],{},[115,149560,149561],{},"Student"," 是类，",[115,149564,149565],{},"student1",[115,149567,149568],{},"student2"," 是对象。",[60,149571,149573],{"id":149572},"_113-属性","11.3 属性",[15,149575,149576],{},"属性是对象保存的数据。",[109,149578,149580],{"className":30371,"code":149579,"language":30373,"meta":39,"style":39},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[115,149581,149582,149590,149594,149598,149602,149610,149618,149626,149630,149637],{"__ignoreMap":39},[118,149583,149584,149586,149588],{"class":120,"line":121},[118,149585,14699],{"class":124},[118,149587,7903],{"class":1967},[118,149589,3743],{"class":128},[118,149591,149592],{"class":120,"line":40},[118,149593,149530],{"class":124},[118,149595,149596],{"class":120,"line":1183},[118,149597,2404],{"emptyLinePlaceholder":45},[118,149599,149600],{"class":120,"line":1198},[118,149601,2404],{"emptyLinePlaceholder":45},[118,149603,149604,149606,149608],{"class":120,"line":1204},[118,149605,149474],{"class":128},[118,149607,174],{"class":124},[118,149609,149479],{"class":128},[118,149611,149612,149614,149616],{"class":120,"line":1218},[118,149613,149484],{"class":128},[118,149615,174],{"class":124},[118,149617,149346],{"class":233},[118,149619,149620,149622,149624],{"class":120,"line":1224},[118,149621,149493],{"class":128},[118,149623,174],{"class":124},[118,149625,146544],{"class":177},[118,149627,149628],{"class":120,"line":1315},[118,149629,2404],{"emptyLinePlaceholder":45},[118,149631,149632,149634],{"class":120,"line":1321},[118,149633,30408],{"class":177},[118,149635,149636],{"class":128},"(student.name)\n",[118,149638,149639,149641],{"class":120,"line":1333},[118,149640,30408],{"class":177},[118,149642,149643],{"class":128},"(student.age)\n",[15,149645,149646],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[60,149648,149650],{"id":149649},"_114-方法","11.4 方法",[15,149652,149653],{},"类中的函数叫方法。",[109,149655,149656],{"className":30371,"code":149414,"language":30373,"meta":39,"style":39},[115,149657,149658,149666,149674,149702,149706,149710,149718,149726,149734],{"__ignoreMap":39},[118,149659,149660,149662,149664],{"class":120,"line":121},[118,149661,14699],{"class":124},[118,149663,7903],{"class":1967},[118,149665,3743],{"class":128},[118,149667,149668,149670,149672],{"class":120,"line":40},[118,149669,30794],{"class":124},[118,149671,149365],{"class":1967},[118,149673,30800],{"class":128},[118,149675,149676,149678,149680,149682,149684,149686,149688,149690,149692,149694,149696,149698,149700],{"class":120,"line":1183},[118,149677,32444],{"class":177},[118,149679,129],{"class":128},[118,149681,181],{"class":124},[118,149683,149379],{"class":233},[118,149685,149445],{"class":177},[118,149687,80294],{"class":128},[118,149689,1074],{"class":177},[118,149691,149388],{"class":233},[118,149693,149445],{"class":177},[118,149695,80306],{"class":128},[118,149697,1074],{"class":177},[118,149699,149397],{"class":233},[118,149701,135],{"class":128},[118,149703,149704],{"class":120,"line":1198},[118,149705,2404],{"emptyLinePlaceholder":45},[118,149707,149708],{"class":120,"line":1204},[118,149709,2404],{"emptyLinePlaceholder":45},[118,149711,149712,149714,149716],{"class":120,"line":1218},[118,149713,149474],{"class":128},[118,149715,174],{"class":124},[118,149717,149479],{"class":128},[118,149719,149720,149722,149724],{"class":120,"line":1224},[118,149721,149484],{"class":128},[118,149723,174],{"class":124},[118,149725,149346],{"class":233},[118,149727,149728,149730,149732],{"class":120,"line":1315},[118,149729,149493],{"class":128},[118,149731,174],{"class":124},[118,149733,146544],{"class":177},[118,149735,149736],{"class":120,"line":1321},[118,149737,149502],{"class":128},[15,149739,149740,149742,149743,149745],{},[115,149741,30816],{}," 表示当前对象。调用方法时不需要手动传入 ",[115,149744,30816],{},"，Python 会自动传。",[60,149747,149749],{"id":149748},"_115-构造方法__init__","11.5 构造方法__init__",[15,149751,149752,149754],{},[115,149753,30822],{}," 在对象创建时自动执行，用于初始化属性。",[109,149756,149758],{"className":30371,"code":149757,"language":30373,"meta":39,"style":39},"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",[115,149759,149760,149768,149777,149789,149801,149812,149816,149824,149862,149866,149870,149892],{"__ignoreMap":39},[118,149761,149762,149764,149766],{"class":120,"line":121},[118,149763,14699],{"class":124},[118,149765,7903],{"class":1967},[118,149767,3743],{"class":128},[118,149769,149770,149772,149774],{"class":120,"line":40},[118,149771,30794],{"class":124},[118,149773,30797],{"class":177},[118,149775,149776],{"class":128},"(self, name, age, score):\n",[118,149778,149779,149781,149784,149786],{"class":120,"line":1183},[118,149780,30838],{"class":177},[118,149782,149783],{"class":128},".name ",[118,149785,174],{"class":124},[118,149787,149788],{"class":128}," name\n",[118,149790,149791,149793,149796,149798],{"class":120,"line":1198},[118,149792,30838],{"class":177},[118,149794,149795],{"class":128},".age ",[118,149797,174],{"class":124},[118,149799,149800],{"class":128}," age\n",[118,149802,149803,149805,149808,149810],{"class":120,"line":1204},[118,149804,30838],{"class":177},[118,149806,149807],{"class":128},".score ",[118,149809,174],{"class":124},[118,149811,1583],{"class":128},[118,149813,149814],{"class":120,"line":1218},[118,149815,2404],{"emptyLinePlaceholder":45},[118,149817,149818,149820,149822],{"class":120,"line":1224},[118,149819,30794],{"class":124},[118,149821,149365],{"class":1967},[118,149823,30800],{"class":128},[118,149825,149826,149828,149830,149832,149834,149836,149838,149840,149842,149844,149846,149848,149851,149853,149856,149858,149860],{"class":120,"line":1315},[118,149827,32444],{"class":177},[118,149829,129],{"class":128},[118,149831,181],{"class":124},[118,149833,149379],{"class":233},[118,149835,149445],{"class":177},[118,149837,80294],{"class":128},[118,149839,1074],{"class":177},[118,149841,149388],{"class":233},[118,149843,149445],{"class":177},[118,149845,80306],{"class":128},[118,149847,1074],{"class":177},[118,149849,149850],{"class":233},"岁，成绩",[118,149852,149445],{"class":177},[118,149854,149855],{"class":128},".score",[118,149857,1074],{"class":177},[118,149859,379],{"class":233},[118,149861,135],{"class":128},[118,149863,149864],{"class":120,"line":1321},[118,149865,2404],{"emptyLinePlaceholder":45},[118,149867,149868],{"class":120,"line":1333},[118,149869,2404],{"emptyLinePlaceholder":45},[118,149871,149872,149874,149876,149879,149882,149884,149886,149888,149890],{"class":120,"line":1616},[118,149873,149474],{"class":128},[118,149875,174],{"class":124},[118,149877,149878],{"class":128}," Student(",[118,149880,149881],{"class":233},"\"小明\"",[118,149883,12440],{"class":128},[118,149885,778],{"class":177},[118,149887,12440],{"class":128},[118,149889,1117],{"class":177},[118,149891,135],{"class":128},[118,149893,149894],{"class":120,"line":1621},[118,149895,149502],{"class":128},[15,149897,149898],{},"构造方法的好处：",[72,149900,149901,149904,149907],{},[75,149902,149903],{},"创建对象时必须提供必要数据。",[75,149905,149906],{},"属性初始化集中，不容易漏。",[75,149908,149909],{},"对象状态更完整。",[60,149911,149913,149914],{"id":149912},"_116-str","11.6 ",[278,149915,1303],{},[15,149917,149918,149919,28378],{},"直接打印对象时，默认输出不直观。可以定义 ",[115,149920,149921],{},"__str__",[109,149923,149925],{"className":30371,"code":149924,"language":30373,"meta":39,"style":39},"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",[115,149926,149927,149935,149944,149954,149964,149968,149977,150005,150009,150013,150029],{"__ignoreMap":39},[118,149928,149929,149931,149933],{"class":120,"line":121},[118,149930,14699],{"class":124},[118,149932,7903],{"class":1967},[118,149934,3743],{"class":128},[118,149936,149937,149939,149941],{"class":120,"line":40},[118,149938,30794],{"class":124},[118,149940,30797],{"class":177},[118,149942,149943],{"class":128},"(self, name, age):\n",[118,149945,149946,149948,149950,149952],{"class":120,"line":1183},[118,149947,30838],{"class":177},[118,149949,149783],{"class":128},[118,149951,174],{"class":124},[118,149953,149788],{"class":128},[118,149955,149956,149958,149960,149962],{"class":120,"line":1198},[118,149957,30838],{"class":177},[118,149959,149795],{"class":128},[118,149961,174],{"class":124},[118,149963,149800],{"class":128},[118,149965,149966],{"class":120,"line":1204},[118,149967,2404],{"emptyLinePlaceholder":45},[118,149969,149970,149972,149975],{"class":120,"line":1218},[118,149971,30794],{"class":124},[118,149973,149974],{"class":177}," __str__",[118,149976,30800],{"class":128},[118,149978,149979,149981,149984,149987,149989,149991,149993,149996,149998,150000,150002],{"class":120,"line":1224},[118,149980,14757],{"class":124},[118,149982,149983],{"class":124}," f",[118,149985,149986],{"class":233},"\"Student(name=",[118,149988,149445],{"class":177},[118,149990,80294],{"class":128},[118,149992,1074],{"class":177},[118,149994,149995],{"class":233},", age=",[118,149997,149445],{"class":177},[118,149999,80306],{"class":128},[118,150001,1074],{"class":177},[118,150003,150004],{"class":233},")\"\n",[118,150006,150007],{"class":120,"line":1315},[118,150008,2404],{"emptyLinePlaceholder":45},[118,150010,150011],{"class":120,"line":1321},[118,150012,2404],{"emptyLinePlaceholder":45},[118,150014,150015,150017,150019,150021,150023,150025,150027],{"class":120,"line":1333},[118,150016,149474],{"class":128},[118,150018,174],{"class":124},[118,150020,149878],{"class":128},[118,150022,149881],{"class":233},[118,150024,12440],{"class":128},[118,150026,778],{"class":177},[118,150028,135],{"class":128},[118,150030,150031,150033],{"class":120,"line":1616},[118,150032,30408],{"class":177},[118,150034,150035],{"class":128},"(student)\n",[60,150037,150039],{"id":150038},"_117-封装","11.7 封装",[15,150041,150042],{},"封装就是把数据和方法放到类中，并控制访问方式。",[15,150044,150045],{},"Python 中以双下划线开头的属性通常视为私有属性。",[109,150047,150049],{"className":30371,"code":150048,"language":30373,"meta":39,"style":39},"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",[115,150050,150051,150060,150069,150081,150093,150097,150106,150115,150119,150129,150142,150153,150158,150169,150173,150182,150194,150205,150209,150222,150233,150237,150248,150252,150256,150274,150283,150292],{"__ignoreMap":39},[118,150052,150053,150055,150058],{"class":120,"line":121},[118,150054,14699],{"class":124},[118,150056,150057],{"class":1967}," Account",[118,150059,3743],{"class":128},[118,150061,150062,150064,150066],{"class":120,"line":40},[118,150063,30794],{"class":124},[118,150065,30797],{"class":177},[118,150067,150068],{"class":128},"(self, owner, balance):\n",[118,150070,150071,150073,150076,150078],{"class":120,"line":1183},[118,150072,30838],{"class":177},[118,150074,150075],{"class":128},".owner ",[118,150077,174],{"class":124},[118,150079,150080],{"class":128}," owner\n",[118,150082,150083,150085,150088,150090],{"class":120,"line":1198},[118,150084,30838],{"class":177},[118,150086,150087],{"class":128},".__balance ",[118,150089,174],{"class":124},[118,150091,150092],{"class":128}," balance\n",[118,150094,150095],{"class":120,"line":1204},[118,150096,2404],{"emptyLinePlaceholder":45},[118,150098,150099,150101,150104],{"class":120,"line":1218},[118,150100,30794],{"class":124},[118,150102,150103],{"class":1967}," get_balance",[118,150105,30800],{"class":128},[118,150107,150108,150110,150112],{"class":120,"line":1224},[118,150109,14757],{"class":124},[118,150111,38866],{"class":177},[118,150113,150114],{"class":128},".__balance\n",[118,150116,150117],{"class":120,"line":1315},[118,150118,2404],{"emptyLinePlaceholder":45},[118,150120,150121,150123,150126],{"class":120,"line":1321},[118,150122,30794],{"class":124},[118,150124,150125],{"class":1967}," deposit",[118,150127,150128],{"class":128},"(self, money):\n",[118,150130,150131,150133,150136,150138,150140],{"class":120,"line":1333},[118,150132,2501],{"class":124},[118,150134,150135],{"class":128}," money ",[118,150137,1592],{"class":124},[118,150139,4097],{"class":177},[118,150141,3743],{"class":128},[118,150143,150144,150146,150148,150151],{"class":120,"line":1616},[118,150145,34643],{"class":177},[118,150147,129],{"class":128},[118,150149,150150],{"class":233},"\"存款金额必须大于0\"",[118,150152,135],{"class":128},[118,150154,150155],{"class":120,"line":1621},[118,150156,150157],{"class":124},"            return\n",[118,150159,150160,150162,150164,150166],{"class":120,"line":1627},[118,150161,30838],{"class":177},[118,150163,150087],{"class":128},[118,150165,9482],{"class":124},[118,150167,150168],{"class":128}," money\n",[118,150170,150171],{"class":120,"line":1632},[118,150172,2404],{"emptyLinePlaceholder":45},[118,150174,150175,150177,150180],{"class":120,"line":1646},[118,150176,30794],{"class":124},[118,150178,150179],{"class":1967}," withdraw",[118,150181,150128],{"class":128},[118,150183,150184,150186,150188,150190,150192],{"class":120,"line":1651},[118,150185,2501],{"class":124},[118,150187,150135],{"class":128},[118,150189,1592],{"class":124},[118,150191,4097],{"class":177},[118,150193,3743],{"class":128},[118,150195,150196,150198,150200,150203],{"class":120,"line":1657},[118,150197,34643],{"class":177},[118,150199,129],{"class":128},[118,150201,150202],{"class":233},"\"取款金额必须大于0\"",[118,150204,135],{"class":128},[118,150206,150207],{"class":120,"line":1678},[118,150208,150157],{"class":124},[118,150210,150211,150213,150215,150217,150219],{"class":120,"line":1683},[118,150212,2501],{"class":124},[118,150214,150135],{"class":128},[118,150216,1088],{"class":124},[118,150218,38866],{"class":177},[118,150220,150221],{"class":128},".__balance:\n",[118,150223,150224,150226,150228,150231],{"class":120,"line":1697},[118,150225,34643],{"class":177},[118,150227,129],{"class":128},[118,150229,150230],{"class":233},"\"余额不足\"",[118,150232,135],{"class":128},[118,150234,150235],{"class":120,"line":1702},[118,150236,150157],{"class":124},[118,150238,150239,150241,150243,150246],{"class":120,"line":1731},[118,150240,30838],{"class":177},[118,150242,150087],{"class":128},[118,150244,150245],{"class":124},"-=",[118,150247,150168],{"class":128},[118,150249,150250],{"class":120,"line":1736},[118,150251,2404],{"emptyLinePlaceholder":45},[118,150253,150254],{"class":120,"line":1753},[118,150255,2404],{"emptyLinePlaceholder":45},[118,150257,150258,150261,150263,150266,150268,150270,150272],{"class":120,"line":1758},[118,150259,150260],{"class":128},"account ",[118,150262,174],{"class":124},[118,150264,150265],{"class":128}," Account(",[118,150267,149881],{"class":233},[118,150269,12440],{"class":128},[118,150271,6415],{"class":177},[118,150273,135],{"class":128},[118,150275,150276,150279,150281],{"class":120,"line":1763},[118,150277,150278],{"class":128},"account.deposit(",[118,150280,1726],{"class":177},[118,150282,135],{"class":128},[118,150284,150285,150288,150290],{"class":120,"line":1768},[118,150286,150287],{"class":128},"account.withdraw(",[118,150289,439],{"class":177},[118,150291,135],{"class":128},[118,150293,150294,150296],{"class":120,"line":1782},[118,150295,30408],{"class":177},[118,150297,150298],{"class":128},"(account.get_balance())\n",[15,150300,150301],{},"封装的意义是避免外部随意修改内部状态。",[60,150303,150305],{"id":150304},"_118-继承","11.8 继承",[15,150307,150308],{},"继承可以让子类复用父类的属性和方法。",[109,150310,150312],{"className":30371,"code":150311,"language":30373,"meta":39,"style":39},"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",[115,150313,150314,150323,150332,150343,150347,150351,150365,150374,150385,150389,150393,150403,150408],{"__ignoreMap":39},[118,150315,150316,150318,150321],{"class":120,"line":121},[118,150317,14699],{"class":124},[118,150319,150320],{"class":1967}," Animal",[118,150322,3743],{"class":128},[118,150324,150325,150327,150330],{"class":120,"line":40},[118,150326,30794],{"class":124},[118,150328,150329],{"class":1967}," eat",[118,150331,30800],{"class":128},[118,150333,150334,150336,150338,150341],{"class":120,"line":1183},[118,150335,32444],{"class":177},[118,150337,129],{"class":128},[118,150339,150340],{"class":233},"\"吃东西\"",[118,150342,135],{"class":128},[118,150344,150345],{"class":120,"line":1198},[118,150346,2404],{"emptyLinePlaceholder":45},[118,150348,150349],{"class":120,"line":1204},[118,150350,2404],{"emptyLinePlaceholder":45},[118,150352,150353,150355,150358,150360,150363],{"class":120,"line":1218},[118,150354,14699],{"class":124},[118,150356,150357],{"class":1967}," Dog",[118,150359,129],{"class":128},[118,150361,150362],{"class":1967},"Animal",[118,150364,30779],{"class":128},[118,150366,150367,150369,150372],{"class":120,"line":1224},[118,150368,30794],{"class":124},[118,150370,150371],{"class":1967}," bark",[118,150373,30800],{"class":128},[118,150375,150376,150378,150380,150383],{"class":120,"line":1315},[118,150377,32444],{"class":177},[118,150379,129],{"class":128},[118,150381,150382],{"class":233},"\"汪汪\"",[118,150384,135],{"class":128},[118,150386,150387],{"class":120,"line":1321},[118,150388,2404],{"emptyLinePlaceholder":45},[118,150390,150391],{"class":120,"line":1333},[118,150392,2404],{"emptyLinePlaceholder":45},[118,150394,150395,150398,150400],{"class":120,"line":1616},[118,150396,150397],{"class":128},"dog ",[118,150399,174],{"class":124},[118,150401,150402],{"class":128}," Dog()\n",[118,150404,150405],{"class":120,"line":1621},[118,150406,150407],{"class":128},"dog.eat()\n",[118,150409,150410],{"class":120,"line":1627},[118,150411,150412],{"class":128},"dog.bark()\n",[15,150414,150415],{},"子类可以扩展新方法，也可以重写父类方法。",[60,150417,150419],{"id":150418},"_119-方法重写","11.9 方法重写",[109,150421,150423],{"className":30371,"code":150422,"language":30373,"meta":39,"style":39},"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",[115,150424,150425,150433,150442,150453,150457,150461,150473,150481,150491,150495,150499,150512,150520,150531,150535,150539,150547,150557,150561,150566],{"__ignoreMap":39},[118,150426,150427,150429,150431],{"class":120,"line":121},[118,150428,14699],{"class":124},[118,150430,150320],{"class":1967},[118,150432,3743],{"class":128},[118,150434,150435,150437,150440],{"class":120,"line":40},[118,150436,30794],{"class":124},[118,150438,150439],{"class":1967}," speak",[118,150441,30800],{"class":128},[118,150443,150444,150446,150448,150451],{"class":120,"line":1183},[118,150445,32444],{"class":177},[118,150447,129],{"class":128},[118,150449,150450],{"class":233},"\"动物叫\"",[118,150452,135],{"class":128},[118,150454,150455],{"class":120,"line":1198},[118,150456,2404],{"emptyLinePlaceholder":45},[118,150458,150459],{"class":120,"line":1204},[118,150460,2404],{"emptyLinePlaceholder":45},[118,150462,150463,150465,150467,150469,150471],{"class":120,"line":1218},[118,150464,14699],{"class":124},[118,150466,150357],{"class":1967},[118,150468,129],{"class":128},[118,150470,150362],{"class":1967},[118,150472,30779],{"class":128},[118,150474,150475,150477,150479],{"class":120,"line":1224},[118,150476,30794],{"class":124},[118,150478,150439],{"class":1967},[118,150480,30800],{"class":128},[118,150482,150483,150485,150487,150489],{"class":120,"line":1315},[118,150484,32444],{"class":177},[118,150486,129],{"class":128},[118,150488,150382],{"class":233},[118,150490,135],{"class":128},[118,150492,150493],{"class":120,"line":1321},[118,150494,2404],{"emptyLinePlaceholder":45},[118,150496,150497],{"class":120,"line":1333},[118,150498,2404],{"emptyLinePlaceholder":45},[118,150500,150501,150503,150506,150508,150510],{"class":120,"line":1616},[118,150502,14699],{"class":124},[118,150504,150505],{"class":1967}," Cat",[118,150507,129],{"class":128},[118,150509,150362],{"class":1967},[118,150511,30779],{"class":128},[118,150513,150514,150516,150518],{"class":120,"line":1621},[118,150515,30794],{"class":124},[118,150517,150439],{"class":1967},[118,150519,30800],{"class":128},[118,150521,150522,150524,150526,150529],{"class":120,"line":1627},[118,150523,32444],{"class":177},[118,150525,129],{"class":128},[118,150527,150528],{"class":233},"\"喵喵\"",[118,150530,135],{"class":128},[118,150532,150533],{"class":120,"line":1632},[118,150534,2404],{"emptyLinePlaceholder":45},[118,150536,150537],{"class":120,"line":1646},[118,150538,2404],{"emptyLinePlaceholder":45},[118,150540,150541,150543,150545],{"class":120,"line":1651},[118,150542,150397],{"class":128},[118,150544,174],{"class":124},[118,150546,150402],{"class":128},[118,150548,150549,150552,150554],{"class":120,"line":1657},[118,150550,150551],{"class":128},"cat ",[118,150553,174],{"class":124},[118,150555,150556],{"class":128}," Cat()\n",[118,150558,150559],{"class":120,"line":1678},[118,150560,2404],{"emptyLinePlaceholder":45},[118,150562,150563],{"class":120,"line":1683},[118,150564,150565],{"class":128},"dog.speak()\n",[118,150567,150568],{"class":120,"line":1697},[118,150569,150570],{"class":128},"cat.speak()\n",[60,150572,150574],{"id":150573},"_1110-super","11.10 super",[15,150576,150577,150578,150581],{},"子类可以通过 ",[115,150579,150580],{},"super()"," 调用父类方法。",[109,150583,150585],{"className":30371,"code":150584,"language":30373,"meta":39,"style":39},"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",[115,150586,150587,150595,150604,150614,150618,150622,150634,150643,150654,150664,150668,150672,150688],{"__ignoreMap":39},[118,150588,150589,150591,150593],{"class":120,"line":121},[118,150590,14699],{"class":124},[118,150592,15574],{"class":1967},[118,150594,3743],{"class":128},[118,150596,150597,150599,150601],{"class":120,"line":40},[118,150598,30794],{"class":124},[118,150600,30797],{"class":177},[118,150602,150603],{"class":128},"(self, name):\n",[118,150605,150606,150608,150610,150612],{"class":120,"line":1183},[118,150607,30838],{"class":177},[118,150609,149783],{"class":128},[118,150611,174],{"class":124},[118,150613,149788],{"class":128},[118,150615,150616],{"class":120,"line":1198},[118,150617,2404],{"emptyLinePlaceholder":45},[118,150619,150620],{"class":120,"line":1204},[118,150621,2404],{"emptyLinePlaceholder":45},[118,150623,150624,150626,150628,150630,150632],{"class":120,"line":1218},[118,150625,14699],{"class":124},[118,150627,7903],{"class":1967},[118,150629,129],{"class":128},[118,150631,19051],{"class":1967},[118,150633,30779],{"class":128},[118,150635,150636,150638,150640],{"class":120,"line":1224},[118,150637,30794],{"class":124},[118,150639,30797],{"class":177},[118,150641,150642],{"class":128},"(self, name, score):\n",[118,150644,150645,150647,150649,150651],{"class":120,"line":1315},[118,150646,30810],{"class":177},[118,150648,17266],{"class":128},[118,150650,30822],{"class":177},[118,150652,150653],{"class":128},"(name)\n",[118,150655,150656,150658,150660,150662],{"class":120,"line":1321},[118,150657,30838],{"class":177},[118,150659,149807],{"class":128},[118,150661,174],{"class":124},[118,150663,1583],{"class":128},[118,150665,150666],{"class":120,"line":1333},[118,150667,2404],{"emptyLinePlaceholder":45},[118,150669,150670],{"class":120,"line":1616},[118,150671,2404],{"emptyLinePlaceholder":45},[118,150673,150674,150676,150678,150680,150682,150684,150686],{"class":120,"line":1621},[118,150675,149474],{"class":128},[118,150677,174],{"class":124},[118,150679,149878],{"class":128},[118,150681,149881],{"class":233},[118,150683,12440],{"class":128},[118,150685,1117],{"class":177},[118,150687,135],{"class":128},[118,150689,150690,150692],{"class":120,"line":1627},[118,150691,30408],{"class":177},[118,150693,150694],{"class":128},"(student.name, student.score)\n",[60,150696,150698],{"id":150697},"_1111-多态","11.11 多态",[15,150700,150701],{},"多态指不同对象响应同一个方法，表现出不同结果。",[109,150703,150705],{"className":30371,"code":150704,"language":30373,"meta":39,"style":39},"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",[115,150706,150707,150715,150723,150733,150737,150741,150749,150757,150767,150771,150775,150785,150790,150794,150798,150803],{"__ignoreMap":39},[118,150708,150709,150711,150713],{"class":120,"line":121},[118,150710,14699],{"class":124},[118,150712,150357],{"class":1967},[118,150714,3743],{"class":128},[118,150716,150717,150719,150721],{"class":120,"line":40},[118,150718,30794],{"class":124},[118,150720,150439],{"class":1967},[118,150722,30800],{"class":128},[118,150724,150725,150727,150729,150731],{"class":120,"line":1183},[118,150726,32444],{"class":177},[118,150728,129],{"class":128},[118,150730,150382],{"class":233},[118,150732,135],{"class":128},[118,150734,150735],{"class":120,"line":1198},[118,150736,2404],{"emptyLinePlaceholder":45},[118,150738,150739],{"class":120,"line":1204},[118,150740,2404],{"emptyLinePlaceholder":45},[118,150742,150743,150745,150747],{"class":120,"line":1218},[118,150744,14699],{"class":124},[118,150746,150505],{"class":1967},[118,150748,3743],{"class":128},[118,150750,150751,150753,150755],{"class":120,"line":1224},[118,150752,30794],{"class":124},[118,150754,150439],{"class":1967},[118,150756,30800],{"class":128},[118,150758,150759,150761,150763,150765],{"class":120,"line":1315},[118,150760,32444],{"class":177},[118,150762,129],{"class":128},[118,150764,150528],{"class":233},[118,150766,135],{"class":128},[118,150768,150769],{"class":120,"line":1321},[118,150770,2404],{"emptyLinePlaceholder":45},[118,150772,150773],{"class":120,"line":1333},[118,150774,2404],{"emptyLinePlaceholder":45},[118,150776,150777,150779,150782],{"class":120,"line":1616},[118,150778,31940],{"class":124},[118,150780,150781],{"class":1967}," make_sound",[118,150783,150784],{"class":128},"(animal):\n",[118,150786,150787],{"class":120,"line":1621},[118,150788,150789],{"class":128},"    animal.speak()\n",[118,150791,150792],{"class":120,"line":1627},[118,150793,2404],{"emptyLinePlaceholder":45},[118,150795,150796],{"class":120,"line":1632},[118,150797,2404],{"emptyLinePlaceholder":45},[118,150799,150800],{"class":120,"line":1646},[118,150801,150802],{"class":128},"make_sound(Dog())\n",[118,150804,150805],{"class":120,"line":1651},[118,150806,150807],{"class":128},"make_sound(Cat())\n",[15,150809,150810],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[60,150812,150814],{"id":150813},"_1112-类属性和实例属性","11.12 类属性和实例属性",[15,150816,150817],{},"实例属性属于对象：",[109,150819,150821],{"className":30371,"code":150820,"language":30373,"meta":39,"style":39},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[115,150822,150823,150831,150839],{"__ignoreMap":39},[118,150824,150825,150827,150829],{"class":120,"line":121},[118,150826,14699],{"class":124},[118,150828,7903],{"class":1967},[118,150830,3743],{"class":128},[118,150832,150833,150835,150837],{"class":120,"line":40},[118,150834,30794],{"class":124},[118,150836,30797],{"class":177},[118,150838,150603],{"class":128},[118,150840,150841,150843,150845,150847],{"class":120,"line":1183},[118,150842,30838],{"class":177},[118,150844,149783],{"class":128},[118,150846,174],{"class":124},[118,150848,149788],{"class":128},[15,150850,150851],{},"类属性属于类，所有对象共享：",[109,150853,150855],{"className":30371,"code":150854,"language":30373,"meta":39,"style":39},"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",[115,150856,150857,150865,150875,150879,150887,150897,150901,150905,150918,150932,150936,150943,150950],{"__ignoreMap":39},[118,150858,150859,150861,150863],{"class":120,"line":121},[118,150860,14699],{"class":124},[118,150862,7903],{"class":1967},[118,150864,3743],{"class":128},[118,150866,150867,150870,150872],{"class":120,"line":40},[118,150868,150869],{"class":128},"    school ",[118,150871,174],{"class":124},[118,150873,150874],{"class":233}," \"黑马学校\"\n",[118,150876,150877],{"class":120,"line":1183},[118,150878,2404],{"emptyLinePlaceholder":45},[118,150880,150881,150883,150885],{"class":120,"line":1198},[118,150882,30794],{"class":124},[118,150884,30797],{"class":177},[118,150886,150603],{"class":128},[118,150888,150889,150891,150893,150895],{"class":120,"line":1204},[118,150890,30838],{"class":177},[118,150892,149783],{"class":128},[118,150894,174],{"class":124},[118,150896,149788],{"class":128},[118,150898,150899],{"class":120,"line":1218},[118,150900,2404],{"emptyLinePlaceholder":45},[118,150902,150903],{"class":120,"line":1224},[118,150904,2404],{"emptyLinePlaceholder":45},[118,150906,150907,150910,150912,150914,150916],{"class":120,"line":1315},[118,150908,150909],{"class":128},"s1 ",[118,150911,174],{"class":124},[118,150913,149878],{"class":128},[118,150915,149881],{"class":233},[118,150917,135],{"class":128},[118,150919,150920,150923,150925,150927,150930],{"class":120,"line":1321},[118,150921,150922],{"class":128},"s2 ",[118,150924,174],{"class":124},[118,150926,149878],{"class":128},[118,150928,150929],{"class":233},"\"小红\"",[118,150931,135],{"class":128},[118,150933,150934],{"class":120,"line":1333},[118,150935,2404],{"emptyLinePlaceholder":45},[118,150937,150938,150940],{"class":120,"line":1616},[118,150939,30408],{"class":177},[118,150941,150942],{"class":128},"(s1.school)\n",[118,150944,150945,150947],{"class":120,"line":1621},[118,150946,30408],{"class":177},[118,150948,150949],{"class":128},"(s2.school)\n",[118,150951,150952,150954],{"class":120,"line":1627},[118,150953,30408],{"class":177},[118,150955,150956],{"class":128},"(Student.school)\n",[15,150958,150959],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[60,150961,150963],{"id":150962},"_1113-类方法和静态方法","11.13 类方法和静态方法",[89,150965,150967],{"id":150966},"_11131-类方法","11.13.1 类方法",[15,150969,150970,150971,150974,150975,28378],{},"类方法使用 ",[115,150972,150973],{},"@classmethod","，第一个参数通常是 ",[115,150976,150977],{},"cls",[109,150979,150981],{"className":30371,"code":150980,"language":30373,"meta":39,"style":39},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[115,150982,150983,150991,150999,151003,151011,151021,151031,151035,151039],{"__ignoreMap":39},[118,150984,150985,150987,150989],{"class":120,"line":121},[118,150986,14699],{"class":124},[118,150988,7903],{"class":1967},[118,150990,3743],{"class":128},[118,150992,150993,150995,150997],{"class":120,"line":40},[118,150994,150869],{"class":128},[118,150996,174],{"class":124},[118,150998,150874],{"class":233},[118,151000,151001],{"class":120,"line":1183},[118,151002,2404],{"emptyLinePlaceholder":45},[118,151004,151005,151008],{"class":120,"line":1198},[118,151006,151007],{"class":1967},"    @",[118,151009,151010],{"class":177},"classmethod\n",[118,151012,151013,151015,151018],{"class":120,"line":1204},[118,151014,30794],{"class":124},[118,151016,151017],{"class":1967}," get_school",[118,151019,151020],{"class":128},"(cls):\n",[118,151022,151023,151025,151028],{"class":120,"line":1218},[118,151024,14757],{"class":124},[118,151026,151027],{"class":177}," cls",[118,151029,151030],{"class":128},".school\n",[118,151032,151033],{"class":120,"line":1224},[118,151034,2404],{"emptyLinePlaceholder":45},[118,151036,151037],{"class":120,"line":1315},[118,151038,2404],{"emptyLinePlaceholder":45},[118,151040,151041,151043],{"class":120,"line":1321},[118,151042,30408],{"class":177},[118,151044,151045],{"class":128},"(Student.get_school())\n",[89,151047,151049],{"id":151048},"_11132-静态方法","11.13.2 静态方法",[15,151051,151052,151053,151056],{},"静态方法使用 ",[115,151054,151055],{},"@staticmethod","，不需要访问实例和类。",[109,151058,151060],{"className":30371,"code":151059,"language":30373,"meta":39,"style":39},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[115,151061,151062,151071,151078,151087,151098,151102,151106],{"__ignoreMap":39},[118,151063,151064,151066,151069],{"class":120,"line":121},[118,151065,14699],{"class":124},[118,151067,151068],{"class":1967}," MathUtils",[118,151070,3743],{"class":128},[118,151072,151073,151075],{"class":120,"line":40},[118,151074,151007],{"class":1967},[118,151076,151077],{"class":177},"staticmethod\n",[118,151079,151080,151082,151084],{"class":120,"line":1183},[118,151081,30794],{"class":124},[118,151083,5214],{"class":1967},[118,151085,151086],{"class":128},"(a, b):\n",[118,151088,151089,151091,151093,151095],{"class":120,"line":1198},[118,151090,14757],{"class":124},[118,151092,10874],{"class":128},[118,151094,609],{"class":124},[118,151096,151097],{"class":128}," b\n",[118,151099,151100],{"class":120,"line":1204},[118,151101,2404],{"emptyLinePlaceholder":45},[118,151103,151104],{"class":120,"line":1218},[118,151105,2404],{"emptyLinePlaceholder":45},[118,151107,151108,151110,151113,151115,151117,151119],{"class":120,"line":1224},[118,151109,30408],{"class":177},[118,151111,151112],{"class":128},"(MathUtils.add(",[118,151114,346],{"class":177},[118,151116,12440],{"class":128},[118,151118,206],{"class":177},[118,151120,30490],{"class":128},[15,151122,151123],{},"静态方法本质上是放在类命名空间里的普通函数。",[60,151125,151127],{"id":151126},"_1114-dataclass","11.14 dataclass",[15,151129,151130,151133],{},[115,151131,151132],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[109,151135,151137],{"className":30371,"code":151136,"language":30373,"meta":39,"style":39},"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",[115,151138,151139,151151,151155,151159,151164,151172,151180,151188,151196,151200,151204,151224],{"__ignoreMap":39},[118,151140,151141,151143,151146,151148],{"class":120,"line":121},[118,151142,30730],{"class":124},[118,151144,151145],{"class":128}," dataclasses ",[118,151147,30385],{"class":124},[118,151149,151150],{"class":128}," dataclass\n",[118,151152,151153],{"class":120,"line":40},[118,151154,2404],{"emptyLinePlaceholder":45},[118,151156,151157],{"class":120,"line":1183},[118,151158,2404],{"emptyLinePlaceholder":45},[118,151160,151161],{"class":120,"line":1198},[118,151162,151163],{"class":1967},"@dataclass\n",[118,151165,151166,151168,151170],{"class":120,"line":1204},[118,151167,14699],{"class":124},[118,151169,7903],{"class":1967},[118,151171,3743],{"class":128},[118,151173,151174,151177],{"class":120,"line":1218},[118,151175,151176],{"class":128},"    name: ",[118,151178,151179],{"class":177},"str\n",[118,151181,151182,151185],{"class":120,"line":1224},[118,151183,151184],{"class":128},"    age: ",[118,151186,151187],{"class":177},"int\n",[118,151189,151190,151193],{"class":120,"line":1315},[118,151191,151192],{"class":128},"    score: ",[118,151194,151195],{"class":177},"float\n",[118,151197,151198],{"class":120,"line":1321},[118,151199,2404],{"emptyLinePlaceholder":45},[118,151201,151202],{"class":120,"line":1333},[118,151203,2404],{"emptyLinePlaceholder":45},[118,151205,151206,151208,151210,151212,151214,151216,151218,151220,151222],{"class":120,"line":1616},[118,151207,149474],{"class":128},[118,151209,174],{"class":124},[118,151211,149878],{"class":128},[118,151213,149881],{"class":233},[118,151215,12440],{"class":128},[118,151217,778],{"class":177},[118,151219,12440],{"class":128},[118,151221,1117],{"class":177},[118,151223,135],{"class":128},[118,151225,151226,151228],{"class":120,"line":1621},[118,151227,30408],{"class":177},[118,151229,150035],{"class":128},[15,151231,151232,151233,341,151235,151238],{},"它会自动生成 ",[115,151234,30822],{},[115,151236,151237],{},"__repr__"," 等方法。适合数据模型类。",[60,151240,151242],{"id":151241},"_1115-小案例学生类","11.15 小案例：学生类",[109,151244,151246],{"className":30371,"code":151245,"language":30373,"meta":39,"style":39},"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",[115,151247,151248,151256,151265,151277,151287,151297,151307,151311,151320,151333,151337,151346,151352,151364,151376,151388,151400,151404,151408,151414,151424,151433,151443,151451,151459,151468,151472,151476,151484,151520,151524,151528,151553,151560],{"__ignoreMap":39},[118,151249,151250,151252,151254],{"class":120,"line":121},[118,151251,14699],{"class":124},[118,151253,7903],{"class":1967},[118,151255,3743],{"class":128},[118,151257,151258,151260,151262],{"class":120,"line":40},[118,151259,30794],{"class":124},[118,151261,30797],{"class":177},[118,151263,151264],{"class":128},"(self, student_id, name, age, score):\n",[118,151266,151267,151269,151272,151274],{"class":120,"line":1183},[118,151268,30838],{"class":177},[118,151270,151271],{"class":128},".student_id ",[118,151273,174],{"class":124},[118,151275,151276],{"class":128}," student_id\n",[118,151278,151279,151281,151283,151285],{"class":120,"line":1198},[118,151280,30838],{"class":177},[118,151282,149783],{"class":128},[118,151284,174],{"class":124},[118,151286,149788],{"class":128},[118,151288,151289,151291,151293,151295],{"class":120,"line":1204},[118,151290,30838],{"class":177},[118,151292,149795],{"class":128},[118,151294,174],{"class":124},[118,151296,149800],{"class":128},[118,151298,151299,151301,151303,151305],{"class":120,"line":1218},[118,151300,30838],{"class":177},[118,151302,149807],{"class":128},[118,151304,174],{"class":124},[118,151306,1583],{"class":128},[118,151308,151309],{"class":120,"line":1224},[118,151310,2404],{"emptyLinePlaceholder":45},[118,151312,151313,151315,151318],{"class":120,"line":1315},[118,151314,30794],{"class":124},[118,151316,151317],{"class":1967}," is_passed",[118,151319,30800],{"class":128},[118,151321,151322,151324,151326,151328,151330],{"class":120,"line":1321},[118,151323,14757],{"class":124},[118,151325,38866],{"class":177},[118,151327,149807],{"class":128},[118,151329,1714],{"class":124},[118,151331,151332],{"class":177}," 60\n",[118,151334,151335],{"class":120,"line":1333},[118,151336,2404],{"emptyLinePlaceholder":45},[118,151338,151339,151341,151344],{"class":120,"line":1616},[118,151340,30794],{"class":124},[118,151342,151343],{"class":1967}," to_dict",[118,151345,30800],{"class":128},[118,151347,151348,151350],{"class":120,"line":1621},[118,151349,14757],{"class":124},[118,151351,15577],{"class":128},[118,151353,151354,151357,151359,151361],{"class":120,"line":1627},[118,151355,151356],{"class":233},"            \"student_id\"",[118,151358,51430],{"class":128},[118,151360,30816],{"class":177},[118,151362,151363],{"class":128},".student_id,\n",[118,151365,151366,151369,151371,151373],{"class":120,"line":1632},[118,151367,151368],{"class":233},"            \"name\"",[118,151370,51430],{"class":128},[118,151372,30816],{"class":177},[118,151374,151375],{"class":128},".name,\n",[118,151377,151378,151381,151383,151385],{"class":120,"line":1646},[118,151379,151380],{"class":233},"            \"age\"",[118,151382,51430],{"class":128},[118,151384,30816],{"class":177},[118,151386,151387],{"class":128},".age,\n",[118,151389,151390,151393,151395,151397],{"class":120,"line":1651},[118,151391,151392],{"class":233},"            \"score\"",[118,151394,51430],{"class":128},[118,151396,30816],{"class":177},[118,151398,151399],{"class":128},".score,\n",[118,151401,151402],{"class":120,"line":1657},[118,151403,2533],{"class":128},[118,151405,151406],{"class":120,"line":1678},[118,151407,2404],{"emptyLinePlaceholder":45},[118,151409,151410,151412],{"class":120,"line":1683},[118,151411,151007],{"class":1967},[118,151413,151010],{"class":177},[118,151415,151416,151418,151421],{"class":120,"line":1697},[118,151417,30794],{"class":124},[118,151419,151420],{"class":1967}," from_dict",[118,151422,151423],{"class":128},"(cls, data):\n",[118,151425,151426,151428,151430],{"class":120,"line":1702},[118,151427,14757],{"class":124},[118,151429,151027],{"class":177},[118,151431,151432],{"class":128},"(\n",[118,151434,151435,151438,151441],{"class":120,"line":1731},[118,151436,151437],{"class":128},"            data[",[118,151439,151440],{"class":233},"\"student_id\"",[118,151442,87829],{"class":128},[118,151444,151445,151447,151449],{"class":120,"line":1736},[118,151446,151437],{"class":128},[118,151448,62672],{"class":233},[118,151450,87829],{"class":128},[118,151452,151453,151455,151457],{"class":120,"line":1753},[118,151454,151437],{"class":128},[118,151456,69117],{"class":233},[118,151458,87829],{"class":128},[118,151460,151461,151463,151466],{"class":120,"line":1758},[118,151462,151437],{"class":128},[118,151464,151465],{"class":233},"\"score\"",[118,151467,87829],{"class":128},[118,151469,151470],{"class":120,"line":1763},[118,151471,38119],{"class":128},[118,151473,151474],{"class":120,"line":1768},[118,151475,2404],{"emptyLinePlaceholder":45},[118,151477,151478,151480,151482],{"class":120,"line":1782},[118,151479,30794],{"class":124},[118,151481,149974],{"class":177},[118,151483,30800],{"class":128},[118,151485,151486,151488,151490,151492,151494,151497,151499,151502,151504,151506,151508,151510,151512,151514,151516,151518],{"class":120,"line":1787},[118,151487,14757],{"class":124},[118,151489,149983],{"class":124},[118,151491,379],{"class":233},[118,151493,149445],{"class":177},[118,151495,151496],{"class":128},".student_id",[118,151498,1074],{"class":177},[118,151500,151501],{"class":177}," {self",[118,151503,80294],{"class":128},[118,151505,1074],{"class":177},[118,151507,151501],{"class":177},[118,151509,80306],{"class":128},[118,151511,1074],{"class":177},[118,151513,151501],{"class":177},[118,151515,149855],{"class":128},[118,151517,1074],{"class":177},[118,151519,25138],{"class":233},[118,151521,151522],{"class":120,"line":2581},[118,151523,2404],{"emptyLinePlaceholder":45},[118,151525,151526],{"class":120,"line":2595},[118,151527,2404],{"emptyLinePlaceholder":45},[118,151529,151530,151532,151534,151536,151539,151541,151543,151545,151547,151549,151551],{"class":120,"line":2603},[118,151531,149474],{"class":128},[118,151533,174],{"class":124},[118,151535,149878],{"class":128},[118,151537,151538],{"class":233},"\"001\"",[118,151540,12440],{"class":128},[118,151542,149881],{"class":233},[118,151544,12440],{"class":128},[118,151546,778],{"class":177},[118,151548,12440],{"class":128},[118,151550,1117],{"class":177},[118,151552,135],{"class":128},[118,151554,151555,151557],{"class":120,"line":2608},[118,151556,30408],{"class":177},[118,151558,151559],{"class":128},"(student.is_passed())\n",[118,151561,151562,151564],{"class":120,"line":2614},[118,151563,30408],{"class":177},[118,151565,151566],{"class":128},"(student.to_dict())\n",[15,151568,151569,101011,151572,151575],{},[115,151570,151571],{},"to_dict()",[115,151573,151574],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[60,151577,151579],{"id":151578},"_1116-易错点","11.16 易错点",[72,151581,151582,151588,151594,151599,151602,151605],{},[75,151583,151584,151585,28378],{},"类名推荐使用大驼峰，如 ",[115,151586,151587],{},"StudentManager",[75,151589,151590,151591,151593],{},"方法第一个参数必须写 ",[115,151592,30816],{},"，调用时不用传。",[75,151595,151596,151598],{},[115,151597,30822],{}," 不是普通方法，它在创建对象时自动执行。",[75,151600,151601],{},"私有属性不是绝对安全，只是约定和名称改写。",[75,151603,151604],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[75,151606,151607],{},"类中方法太多时，说明职责可能过重。",[60,151609,151611],{"id":151610},"_1117-本章练习","11.17 本章练习",[72,151613,151614,151620,151626,151631,151644],{},[75,151615,151616,151617,151619],{},"定义 ",[115,151618,149561],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[75,151621,151616,151622,151625],{},[115,151623,151624],{},"Account"," 类，实现存款、取款、查询余额。",[75,151627,151616,151628,151630],{},[115,151629,17231],{}," 类，计算圆的周长和面积。",[75,151632,151616,151633,341,151636,151639,151640,151643],{},[115,151634,151635],{},"Dog",[115,151637,151638],{},"Cat"," 类，并用同一个函数调用它们的 ",[115,151641,151642],{},"speak()"," 方法。",[75,151645,104359,151646,151648,151649,28378],{},[115,151647,151132],{}," 定义一个商品类 ",[115,151650,151651],{},"Product",[5131,151653,151654],{},"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":39,"searchDepth":40,"depth":40,"links":151656},[151657,151658,151659,151660,151661,151662,151664,151665,151666,151667,151668,151669,151670,151674,151675,151676,151677],{"id":149325,"depth":40,"text":149326},{"id":149508,"depth":40,"text":149509},{"id":149572,"depth":40,"text":149573},{"id":149649,"depth":40,"text":149650},{"id":149748,"depth":40,"text":149749},{"id":149912,"depth":40,"text":151663},"11.6 str",{"id":150038,"depth":40,"text":150039},{"id":150304,"depth":40,"text":150305},{"id":150418,"depth":40,"text":150419},{"id":150573,"depth":40,"text":150574},{"id":150697,"depth":40,"text":150698},{"id":150813,"depth":40,"text":150814},{"id":150962,"depth":40,"text":150963,"children":151671},[151672,151673],{"id":150966,"depth":1183,"text":150967},{"id":151048,"depth":1183,"text":151049},{"id":151126,"depth":40,"text":151127},{"id":151241,"depth":40,"text":151242},{"id":151578,"depth":40,"text":151579},{"id":151610,"depth":40,"text":151611},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149317,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151684,"title":151685,"body":151686,"description":42,"extension":43,"meta":154999,"navigation":45,"path":155000,"seo":155001,"stem":155002,"__hash__":155003},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151687,"toc":154975},[151688,151691,151695,151698,151701,151730,151733,151741,151745,151749,151752,151775,151778,151784,151788,153234,153237,153258,153262,153265,153277,153280,153464,153467,153593,153596,153600,153604,153740,153744,153830,153834,153916,153920,153957,153961,154150,154154,154157,154387,154391,154394,154575,154578,154582,154585,154591,154594,154620,154624,154627,154641,154644,154669,154672,154686,154689,154706,154709,154726,154729,154746,154750,154776,154780,154803,154807,154810,154812,154818,154820,154841,154844,154850,154856,154860,154863,154939,154942,154946,154972],[10,151689,151685],{"id":151690},"_12-综合案例与复习路线",[60,151692,151694],{"id":151693},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[15,151696,151697],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[15,151699,151700],{},"一个合格的入门综合项目最好覆盖：",[72,151702,151703,151706,151709,151712,151715,151718,151721,151724,151727],{},[75,151704,151705],{},"输入输出。",[75,151707,151708],{},"判断和循环。",[75,151710,151711],{},"函数拆分。",[75,151713,151714],{},"列表、字典等容器。",[75,151716,151717],{},"文件持久化。",[75,151719,151720],{},"异常处理。",[75,151722,151723],{},"模块拆分。",[75,151725,151726],{},"可选：面向对象。",[75,151728,151729],{},"可选：数据可视化。",[15,151731,151732],{},"本章整理两个方向：",[72,151734,151735,151738],{},[75,151736,151737],{},"学生管理系统。",[75,151739,151740],{},"销售数据统计和可视化。",[60,151742,151744],{"id":151743},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[89,151746,151748],{"id":151747},"_1221-需求","12.2.1 需求",[15,151750,151751],{},"实现一个命令行学生管理系统：",[72,151753,151754,151757,151760,151763,151766,151769,151772],{},[75,151755,151756],{},"添加学生。",[75,151758,151759],{},"删除学生。",[75,151761,151762],{},"修改学生。",[75,151764,151765],{},"查询学生。",[75,151767,151768],{},"显示所有学生。",[75,151770,151771],{},"保存到 JSON 文件。",[75,151773,151774],{},"程序启动时自动读取 JSON 文件。",[15,151776,151777],{},"学生字段：",[109,151779,151782],{"className":151780,"code":151781,"language":5192,"meta":39},[5190],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[115,151783,151781],{"__ignoreMap":39},[60,151785,151787],{"id":151786},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[109,151789,151791],{"className":30371,"code":151790,"language":30373,"meta":39,"style":39},"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",[115,151792,151793,151799,151809,151813,151827,151831,151835,151844,151856,151862,151866,151872,151903,151913,151920,151931,151937,151941,151945,151955,151986,152012,152016,152020,152029,152040,152051,152062,152073,152084,152095,152106,152110,152114,152124,152136,152152,152159,152166,152170,152174,152184,152192,152199,152212,152222,152233,152237,152241,152250,152258,152264,152276,152284,152295,152299,152303,152312,152328,152332,152339,152350,152355,152359,152375,152390,152405,152409,152414,152422,152430,152438,152446,152450,152455,152466,152470,152474,152483,152498,152508,152512,152524,152535,152539,152543,152548,152552,152563,152567,152571,152580,152595,152603,152607,152619,152629,152633,152637,152652,152665,152678,152682,152695,152707,152719,152723,152727,152738,152742,152746,152755,152770,152778,152782,152794,152804,152808,152812,152817,152821,152825,152835,152841,152863,152882,152901,152920,152925,152929,152933,152942,152950,152961,152965,152969,152995,153005,153010,153014,153018,153026,153036,153040,153048,153053,153069,153073,153087,153092,153106,153111,153124,153129,153142,153147,153160,153165,153178,153189,153193,153199,153210,153214,153218,153230],{"__ignoreMap":39},[118,151794,151795,151797],{"class":120,"line":121},[118,151796,30385],{"class":124},[118,151798,147084],{"class":128},[118,151800,151801,151803,151805,151807],{"class":120,"line":40},[118,151802,30730],{"class":124},[118,151804,108304],{"class":128},[118,151806,30385],{"class":124},[118,151808,108309],{"class":128},[118,151810,151811],{"class":120,"line":1183},[118,151812,2404],{"emptyLinePlaceholder":45},[118,151814,151815,151818,151820,151822,151825],{"class":120,"line":1198},[118,151816,151817],{"class":177},"DATA_FILE",[118,151819,13569],{"class":124},[118,151821,108538],{"class":128},[118,151823,151824],{"class":233},"\"students.json\"",[118,151826,135],{"class":128},[118,151828,151829],{"class":120,"line":1204},[118,151830,2404],{"emptyLinePlaceholder":45},[118,151832,151833],{"class":120,"line":1218},[118,151834,2404],{"emptyLinePlaceholder":45},[118,151836,151837,151839,151842],{"class":120,"line":1224},[118,151838,31940],{"class":124},[118,151840,151841],{"class":1967}," load_students",[118,151843,31946],{"class":128},[118,151845,151846,151848,151850,151853],{"class":120,"line":1315},[118,151847,3105],{"class":124},[118,151849,38923],{"class":124},[118,151851,151852],{"class":177}," DATA_FILE",[118,151854,151855],{"class":128},".exists():\n",[118,151857,151858,151860],{"class":120,"line":1321},[118,151859,14757],{"class":124},[118,151861,51831],{"class":128},[118,151863,151864],{"class":120,"line":1333},[118,151865,2404],{"emptyLinePlaceholder":45},[118,151867,151868,151870],{"class":120,"line":1616},[118,151869,125777],{"class":124},[118,151871,3743],{"class":128},[118,151873,151874,151877,151879,151881,151883,151885,151887,151889,151891,151893,151895,151897,151899,151901],{"class":120,"line":1621},[118,151875,151876],{"class":124},"        with",[118,151878,146784],{"class":177},[118,151880,129],{"class":128},[118,151882,151817],{"class":177},[118,151884,12440],{"class":128},[118,151886,146794],{"class":233},[118,151888,12440],{"class":128},[118,151890,146799],{"class":5221},[118,151892,174],{"class":124},[118,151894,146804],{"class":233},[118,151896,13719],{"class":128},[118,151898,31376],{"class":124},[118,151900,148146],{"class":5221},[118,151902,3743],{"class":128},[118,151904,151905,151907,151909,151911],{"class":120,"line":1627},[118,151906,15737],{"class":124},[118,151908,148157],{"class":128},[118,151910,45347],{"class":5221},[118,151912,135],{"class":128},[118,151914,151915,151917],{"class":120,"line":1632},[118,151916,125805],{"class":124},[118,151918,151919],{"class":128}," json.JSONDecodeError:\n",[118,151921,151922,151924,151926,151929],{"class":120,"line":1646},[118,151923,32444],{"class":177},[118,151925,129],{"class":128},[118,151927,151928],{"class":233},"\"数据文件格式错误，已使用空数据启动\"",[118,151930,135],{"class":128},[118,151932,151933,151935],{"class":120,"line":1651},[118,151934,14757],{"class":124},[118,151936,51831],{"class":128},[118,151938,151939],{"class":120,"line":1657},[118,151940,2404],{"emptyLinePlaceholder":45},[118,151942,151943],{"class":120,"line":1678},[118,151944,2404],{"emptyLinePlaceholder":45},[118,151946,151947,151949,151952],{"class":120,"line":1683},[118,151948,31940],{"class":124},[118,151950,151951],{"class":1967}," save_students",[118,151953,151954],{"class":128},"(students):\n",[118,151956,151957,151959,151961,151963,151965,151967,151970,151972,151974,151976,151978,151980,151982,151984],{"class":120,"line":1697},[118,151958,34171],{"class":124},[118,151960,146784],{"class":177},[118,151962,129],{"class":128},[118,151964,151817],{"class":177},[118,151966,12440],{"class":128},[118,151968,151969],{"class":233},"\"w\"",[118,151971,12440],{"class":128},[118,151973,146799],{"class":5221},[118,151975,174],{"class":124},[118,151977,146804],{"class":233},[118,151979,13719],{"class":128},[118,151981,31376],{"class":124},[118,151983,148146],{"class":5221},[118,151985,3743],{"class":128},[118,151987,151988,151991,151993,151995,151997,151999,152001,152003,152006,152008,152010],{"class":120,"line":1702},[118,151989,151990],{"class":128},"        json.dump(students, ",[118,151992,45347],{"class":5221},[118,151994,12440],{"class":128},[118,151996,147130],{"class":5221},[118,151998,174],{"class":124},[118,152000,33980],{"class":177},[118,152002,12440],{"class":128},[118,152004,152005],{"class":5221},"indent",[118,152007,174],{"class":124},[118,152009,206],{"class":177},[118,152011,135],{"class":128},[118,152013,152014],{"class":120,"line":1731},[118,152015,2404],{"emptyLinePlaceholder":45},[118,152017,152018],{"class":120,"line":1736},[118,152019,2404],{"emptyLinePlaceholder":45},[118,152021,152022,152024,152027],{"class":120,"line":1753},[118,152023,31940],{"class":124},[118,152025,152026],{"class":1967}," show_menu",[118,152028,31946],{"class":128},[118,152030,152031,152033,152035,152038],{"class":120,"line":1758},[118,152032,31292],{"class":177},[118,152034,129],{"class":128},[118,152036,152037],{"class":233},"\"====== 学生管理系统 ======\"",[118,152039,135],{"class":128},[118,152041,152042,152044,152046,152049],{"class":120,"line":1763},[118,152043,31292],{"class":177},[118,152045,129],{"class":128},[118,152047,152048],{"class":233},"\"1. 添加学生\"",[118,152050,135],{"class":128},[118,152052,152053,152055,152057,152060],{"class":120,"line":1768},[118,152054,31292],{"class":177},[118,152056,129],{"class":128},[118,152058,152059],{"class":233},"\"2. 删除学生\"",[118,152061,135],{"class":128},[118,152063,152064,152066,152068,152071],{"class":120,"line":1782},[118,152065,31292],{"class":177},[118,152067,129],{"class":128},[118,152069,152070],{"class":233},"\"3. 修改学生\"",[118,152072,135],{"class":128},[118,152074,152075,152077,152079,152082],{"class":120,"line":1787},[118,152076,31292],{"class":177},[118,152078,129],{"class":128},[118,152080,152081],{"class":233},"\"4. 查询学生\"",[118,152083,135],{"class":128},[118,152085,152086,152088,152090,152093],{"class":120,"line":2581},[118,152087,31292],{"class":177},[118,152089,129],{"class":128},[118,152091,152092],{"class":233},"\"5. 显示所有学生\"",[118,152094,135],{"class":128},[118,152096,152097,152099,152101,152104],{"class":120,"line":2595},[118,152098,31292],{"class":177},[118,152100,129],{"class":128},[118,152102,152103],{"class":233},"\"0. 退出系统\"",[118,152105,135],{"class":128},[118,152107,152108],{"class":120,"line":2603},[118,152109,2404],{"emptyLinePlaceholder":45},[118,152111,152112],{"class":120,"line":2608},[118,152113,2404],{"emptyLinePlaceholder":45},[118,152115,152116,152118,152121],{"class":120,"line":2614},[118,152117,31940],{"class":124},[118,152119,152120],{"class":1967}," find_student",[118,152122,152123],{"class":128},"(students, student_id):\n",[118,152125,152126,152128,152131,152133],{"class":120,"line":2620},[118,152127,3205],{"class":124},[118,152129,152130],{"class":128}," student ",[118,152132,26036],{"class":124},[118,152134,152135],{"class":128}," students:\n",[118,152137,152138,152140,152143,152145,152147,152149],{"class":120,"line":2625},[118,152139,2501],{"class":124},[118,152141,152142],{"class":128}," student[",[118,152144,151440],{"class":233},[118,152146,4447],{"class":128},[118,152148,2953],{"class":124},[118,152150,152151],{"class":128}," student_id:\n",[118,152153,152154,152156],{"class":120,"line":7953},[118,152155,15737],{"class":124},[118,152157,152158],{"class":128}," student\n",[118,152160,152161,152163],{"class":120,"line":7977},[118,152162,4094],{"class":124},[118,152164,152165],{"class":177}," None\n",[118,152167,152168],{"class":120,"line":7982},[118,152169,2404],{"emptyLinePlaceholder":45},[118,152171,152172],{"class":120,"line":7988},[118,152173,2404],{"emptyLinePlaceholder":45},[118,152175,152176,152178,152181],{"class":120,"line":8015},[118,152177,31940],{"class":124},[118,152179,152180],{"class":1967}," input_int",[118,152182,152183],{"class":128},"(prompt):\n",[118,152185,152186,152188,152190],{"class":120,"line":8020},[118,152187,2255],{"class":124},[118,152189,95285],{"class":177},[118,152191,3743],{"class":128},[118,152193,152194,152197],{"class":120,"line":8026},[118,152195,152196],{"class":124},"        try",[118,152198,3743],{"class":128},[118,152200,152201,152203,152205,152207,152209],{"class":120,"line":8038},[118,152202,15737],{"class":124},[118,152204,2386],{"class":177},[118,152206,129],{"class":128},[118,152208,53814],{"class":177},[118,152210,152211],{"class":128},"(prompt))\n",[118,152213,152214,152217,152220],{"class":120,"line":8050},[118,152215,152216],{"class":124},"        except",[118,152218,152219],{"class":177}," ValueError",[118,152221,3743],{"class":128},[118,152223,152224,152226,152228,152231],{"class":120,"line":8062},[118,152225,34643],{"class":177},[118,152227,129],{"class":128},[118,152229,152230],{"class":233},"\"请输入整数\"",[118,152232,135],{"class":128},[118,152234,152235],{"class":120,"line":9721},[118,152236,2404],{"emptyLinePlaceholder":45},[118,152238,152239],{"class":120,"line":9746},[118,152240,2404],{"emptyLinePlaceholder":45},[118,152242,152243,152245,152248],{"class":120,"line":9769},[118,152244,31940],{"class":124},[118,152246,152247],{"class":1967}," input_float",[118,152249,152183],{"class":128},[118,152251,152252,152254,152256],{"class":120,"line":9793},[118,152253,2255],{"class":124},[118,152255,95285],{"class":177},[118,152257,3743],{"class":128},[118,152259,152260,152262],{"class":120,"line":9798},[118,152261,152196],{"class":124},[118,152263,3743],{"class":128},[118,152265,152266,152268,152270,152272,152274],{"class":120,"line":9803},[118,152267,15737],{"class":124},[118,152269,109790],{"class":177},[118,152271,129],{"class":128},[118,152273,53814],{"class":177},[118,152275,152211],{"class":128},[118,152277,152278,152280,152282],{"class":120,"line":9808},[118,152279,152216],{"class":124},[118,152281,152219],{"class":177},[118,152283,3743],{"class":128},[118,152285,152286,152288,152290,152293],{"class":120,"line":9817},[118,152287,34643],{"class":177},[118,152289,129],{"class":128},[118,152291,152292],{"class":233},"\"请输入数字\"",[118,152294,135],{"class":128},[118,152296,152297],{"class":120,"line":9822},[118,152298,2404],{"emptyLinePlaceholder":45},[118,152300,152301],{"class":120,"line":9828},[118,152302,2404],{"emptyLinePlaceholder":45},[118,152304,152305,152307,152310],{"class":120,"line":9849},[118,152306,31940],{"class":124},[118,152308,152309],{"class":1967}," add_student",[118,152311,151954],{"class":128},[118,152313,152314,152317,152319,152321,152323,152326],{"class":120,"line":9855},[118,152315,152316],{"class":128},"    student_id ",[118,152318,174],{"class":124},[118,152320,60598],{"class":177},[118,152322,129],{"class":128},[118,152324,152325],{"class":233},"\"请输入学号:\"",[118,152327,135],{"class":128},[118,152329,152330],{"class":120,"line":9869},[118,152331,2404],{"emptyLinePlaceholder":45},[118,152333,152334,152336],{"class":120,"line":9875},[118,152335,3105],{"class":124},[118,152337,152338],{"class":128}," find_student(students, student_id):\n",[118,152340,152341,152343,152345,152348],{"class":120,"line":9902},[118,152342,32444],{"class":177},[118,152344,129],{"class":128},[118,152346,152347],{"class":233},"\"学号已存在\"",[118,152349,135],{"class":128},[118,152351,152352],{"class":120,"line":9911},[118,152353,152354],{"class":124},"        return\n",[118,152356,152357],{"class":120,"line":9917},[118,152358,2404],{"emptyLinePlaceholder":45},[118,152360,152361,152364,152366,152368,152370,152373],{"class":120,"line":9925},[118,152362,152363],{"class":128},"    name ",[118,152365,174],{"class":124},[118,152367,60598],{"class":177},[118,152369,129],{"class":128},[118,152371,152372],{"class":233},"\"请输入姓名:\"",[118,152374,135],{"class":128},[118,152376,152377,152380,152382,152385,152388],{"class":120,"line":9930},[118,152378,152379],{"class":128},"    age ",[118,152381,174],{"class":124},[118,152383,152384],{"class":128}," input_int(",[118,152386,152387],{"class":233},"\"请输入年龄:\"",[118,152389,135],{"class":128},[118,152391,152392,152395,152397,152400,152403],{"class":120,"line":16609},[118,152393,152394],{"class":128},"    score ",[118,152396,174],{"class":124},[118,152398,152399],{"class":128}," input_float(",[118,152401,152402],{"class":233},"\"请输入成绩:\"",[118,152404,135],{"class":128},[118,152406,152407],{"class":120,"line":16615},[118,152408,2404],{"emptyLinePlaceholder":45},[118,152410,152411],{"class":120,"line":16638},[118,152412,152413],{"class":128},"    students.append({\n",[118,152415,152416,152419],{"class":120,"line":16644},[118,152417,152418],{"class":233},"        \"student_id\"",[118,152420,152421],{"class":128},": student_id,\n",[118,152423,152424,152427],{"class":120,"line":16667},[118,152425,152426],{"class":233},"        \"name\"",[118,152428,152429],{"class":128},": name,\n",[118,152431,152432,152435],{"class":120,"line":16681},[118,152433,152434],{"class":233},"        \"age\"",[118,152436,152437],{"class":128},": age,\n",[118,152439,152440,152443],{"class":120,"line":16701},[118,152441,152442],{"class":233},"        \"score\"",[118,152444,152445],{"class":128},": score,\n",[118,152447,152448],{"class":120,"line":16707},[118,152449,33454],{"class":128},[118,152451,152452],{"class":120,"line":16718},[118,152453,152454],{"class":128},"    save_students(students)\n",[118,152456,152457,152459,152461,152464],{"class":120,"line":16741},[118,152458,31292],{"class":177},[118,152460,129],{"class":128},[118,152462,152463],{"class":233},"\"添加成功\"",[118,152465,135],{"class":128},[118,152467,152468],{"class":120,"line":16763},[118,152469,2404],{"emptyLinePlaceholder":45},[118,152471,152472],{"class":120,"line":16768},[118,152473,2404],{"emptyLinePlaceholder":45},[118,152475,152476,152478,152481],{"class":120,"line":16774},[118,152477,31940],{"class":124},[118,152479,152480],{"class":1967}," delete_student",[118,152482,151954],{"class":128},[118,152484,152485,152487,152489,152491,152493,152496],{"class":120,"line":16788},[118,152486,152316],{"class":128},[118,152488,174],{"class":124},[118,152490,60598],{"class":177},[118,152492,129],{"class":128},[118,152494,152495],{"class":233},"\"请输入要删除的学号:\"",[118,152497,135],{"class":128},[118,152499,152500,152503,152505],{"class":120,"line":16801},[118,152501,152502],{"class":128},"    student ",[118,152504,174],{"class":124},[118,152506,152507],{"class":128}," find_student(students, student_id)\n",[118,152509,152510],{"class":120,"line":16806},[118,152511,2404],{"emptyLinePlaceholder":45},[118,152513,152514,152516,152518,152520,152522],{"class":120,"line":16820},[118,152515,3105],{"class":124},[118,152517,152130],{"class":128},[118,152519,38920],{"class":124},[118,152521,38926],{"class":177},[118,152523,3743],{"class":128},[118,152525,152526,152528,152530,152533],{"class":120,"line":16825},[118,152527,32444],{"class":177},[118,152529,129],{"class":128},[118,152531,152532],{"class":233},"\"学生不存在\"",[118,152534,135],{"class":128},[118,152536,152537],{"class":120,"line":16831},[118,152538,152354],{"class":124},[118,152540,152541],{"class":120,"line":16836},[118,152542,2404],{"emptyLinePlaceholder":45},[118,152544,152545],{"class":120,"line":16850},[118,152546,152547],{"class":128},"    students.remove(student)\n",[118,152549,152550],{"class":120,"line":16855},[118,152551,152454],{"class":128},[118,152553,152554,152556,152558,152561],{"class":120,"line":16860},[118,152555,31292],{"class":177},[118,152557,129],{"class":128},[118,152559,152560],{"class":233},"\"删除成功\"",[118,152562,135],{"class":128},[118,152564,152565],{"class":120,"line":16874},[118,152566,2404],{"emptyLinePlaceholder":45},[118,152568,152569],{"class":120,"line":16886},[118,152570,2404],{"emptyLinePlaceholder":45},[118,152572,152573,152575,152578],{"class":120,"line":16891},[118,152574,31940],{"class":124},[118,152576,152577],{"class":1967}," update_student",[118,152579,151954],{"class":128},[118,152581,152582,152584,152586,152588,152590,152593],{"class":120,"line":16904},[118,152583,152316],{"class":128},[118,152585,174],{"class":124},[118,152587,60598],{"class":177},[118,152589,129],{"class":128},[118,152591,152592],{"class":233},"\"请输入要修改的学号:\"",[118,152594,135],{"class":128},[118,152596,152597,152599,152601],{"class":120,"line":16909},[118,152598,152502],{"class":128},[118,152600,174],{"class":124},[118,152602,152507],{"class":128},[118,152604,152605],{"class":120,"line":16914},[118,152606,2404],{"emptyLinePlaceholder":45},[118,152608,152609,152611,152613,152615,152617],{"class":120,"line":16919},[118,152610,3105],{"class":124},[118,152612,152130],{"class":128},[118,152614,38920],{"class":124},[118,152616,38926],{"class":177},[118,152618,3743],{"class":128},[118,152620,152621,152623,152625,152627],{"class":120,"line":16932},[118,152622,32444],{"class":177},[118,152624,129],{"class":128},[118,152626,152532],{"class":233},[118,152628,135],{"class":128},[118,152630,152631],{"class":120,"line":16937},[118,152632,152354],{"class":124},[118,152634,152635],{"class":120,"line":32626},[118,152636,2404],{"emptyLinePlaceholder":45},[118,152638,152639,152641,152643,152645,152647,152650],{"class":120,"line":32632},[118,152640,152363],{"class":128},[118,152642,174],{"class":124},[118,152644,60598],{"class":177},[118,152646,129],{"class":128},[118,152648,152649],{"class":233},"\"请输入新姓名:\"",[118,152651,135],{"class":128},[118,152653,152654,152656,152658,152660,152663],{"class":120,"line":32638},[118,152655,152379],{"class":128},[118,152657,174],{"class":124},[118,152659,152384],{"class":128},[118,152661,152662],{"class":233},"\"请输入新年龄:\"",[118,152664,135],{"class":128},[118,152666,152667,152669,152671,152673,152676],{"class":120,"line":32644},[118,152668,152394],{"class":128},[118,152670,174],{"class":124},[118,152672,152399],{"class":128},[118,152674,152675],{"class":233},"\"请输入新成绩:\"",[118,152677,135],{"class":128},[118,152679,152680],{"class":120,"line":32650},[118,152681,2404],{"emptyLinePlaceholder":45},[118,152683,152684,152687,152689,152691,152693],{"class":120,"line":32661},[118,152685,152686],{"class":128},"    student[",[118,152688,62672],{"class":233},[118,152690,4447],{"class":128},[118,152692,174],{"class":124},[118,152694,149788],{"class":128},[118,152696,152697,152699,152701,152703,152705],{"class":120,"line":32667},[118,152698,152686],{"class":128},[118,152700,69117],{"class":233},[118,152702,4447],{"class":128},[118,152704,174],{"class":124},[118,152706,149800],{"class":128},[118,152708,152709,152711,152713,152715,152717],{"class":120,"line":32687},[118,152710,152686],{"class":128},[118,152712,151465],{"class":233},[118,152714,4447],{"class":128},[118,152716,174],{"class":124},[118,152718,1583],{"class":128},[118,152720,152721],{"class":120,"line":32693},[118,152722,2404],{"emptyLinePlaceholder":45},[118,152724,152725],{"class":120,"line":32704},[118,152726,152454],{"class":128},[118,152728,152729,152731,152733,152736],{"class":120,"line":32710},[118,152730,31292],{"class":177},[118,152732,129],{"class":128},[118,152734,152735],{"class":233},"\"修改成功\"",[118,152737,135],{"class":128},[118,152739,152740],{"class":120,"line":32716},[118,152741,2404],{"emptyLinePlaceholder":45},[118,152743,152744],{"class":120,"line":32722},[118,152745,2404],{"emptyLinePlaceholder":45},[118,152747,152748,152750,152753],{"class":120,"line":32728},[118,152749,31940],{"class":124},[118,152751,152752],{"class":1967}," query_student",[118,152754,151954],{"class":128},[118,152756,152757,152759,152761,152763,152765,152768],{"class":120,"line":32734},[118,152758,152316],{"class":128},[118,152760,174],{"class":124},[118,152762,60598],{"class":177},[118,152764,129],{"class":128},[118,152766,152767],{"class":233},"\"请输入要查询的学号:\"",[118,152769,135],{"class":128},[118,152771,152772,152774,152776],{"class":120,"line":32740},[118,152773,152502],{"class":128},[118,152775,174],{"class":124},[118,152777,152507],{"class":128},[118,152779,152780],{"class":120,"line":32746},[118,152781,2404],{"emptyLinePlaceholder":45},[118,152783,152784,152786,152788,152790,152792],{"class":120,"line":32766},[118,152785,3105],{"class":124},[118,152787,152130],{"class":128},[118,152789,38920],{"class":124},[118,152791,38926],{"class":177},[118,152793,3743],{"class":128},[118,152795,152796,152798,152800,152802],{"class":120,"line":32772},[118,152797,32444],{"class":177},[118,152799,129],{"class":128},[118,152801,152532],{"class":233},[118,152803,135],{"class":128},[118,152805,152806],{"class":120,"line":32788},[118,152807,152354],{"class":124},[118,152809,152810],{"class":120,"line":32794},[118,152811,2404],{"emptyLinePlaceholder":45},[118,152813,152814],{"class":120,"line":32808},[118,152815,152816],{"class":128},"    print_student(student)\n",[118,152818,152819],{"class":120,"line":32814},[118,152820,2404],{"emptyLinePlaceholder":45},[118,152822,152823],{"class":120,"line":32829},[118,152824,2404],{"emptyLinePlaceholder":45},[118,152826,152827,152829,152832],{"class":120,"line":32835},[118,152828,31940],{"class":124},[118,152830,152831],{"class":1967}," print_student",[118,152833,152834],{"class":128},"(student):\n",[118,152836,152837,152839],{"class":120,"line":32844},[118,152838,31292],{"class":177},[118,152840,151432],{"class":128},[118,152842,152843,152846,152848,152850,152853,152856,152858,152861],{"class":120,"line":32850},[118,152844,152845],{"class":124},"        f",[118,152847,379],{"class":233},[118,152849,1024],{"class":177},[118,152851,152852],{"class":128},"student[",[118,152854,152855],{"class":233},"'student_id'",[118,152857,1068],{"class":128},[118,152859,152860],{"class":177},"}\\t",[118,152862,25138],{"class":233},[118,152864,152865,152867,152869,152871,152873,152876,152878,152880],{"class":120,"line":32859},[118,152866,152845],{"class":124},[118,152868,379],{"class":233},[118,152870,1024],{"class":177},[118,152872,152852],{"class":128},[118,152874,152875],{"class":233},"'name'",[118,152877,1068],{"class":128},[118,152879,152860],{"class":177},[118,152881,25138],{"class":233},[118,152883,152884,152886,152888,152890,152892,152895,152897,152899],{"class":120,"line":32865},[118,152885,152845],{"class":124},[118,152887,379],{"class":233},[118,152889,1024],{"class":177},[118,152891,152852],{"class":128},[118,152893,152894],{"class":233},"'age'",[118,152896,1068],{"class":128},[118,152898,152860],{"class":177},[118,152900,25138],{"class":233},[118,152902,152903,152905,152907,152909,152911,152914,152916,152918],{"class":120,"line":32871},[118,152904,152845],{"class":124},[118,152906,379],{"class":233},[118,152908,1024],{"class":177},[118,152910,152852],{"class":128},[118,152912,152913],{"class":233},"'score'",[118,152915,1068],{"class":128},[118,152917,1074],{"class":177},[118,152919,25138],{"class":233},[118,152921,152922],{"class":120,"line":32880},[118,152923,152924],{"class":128},"    )\n",[118,152926,152927],{"class":120,"line":32886},[118,152928,2404],{"emptyLinePlaceholder":45},[118,152930,152931],{"class":120,"line":32897},[118,152932,2404],{"emptyLinePlaceholder":45},[118,152934,152935,152937,152940],{"class":120,"line":32903},[118,152936,31940],{"class":124},[118,152938,152939],{"class":1967}," show_all_students",[118,152941,151954],{"class":128},[118,152943,152944,152946,152948],{"class":120,"line":32922},[118,152945,3105],{"class":124},[118,152947,38923],{"class":124},[118,152949,152135],{"class":128},[118,152951,152952,152954,152956,152959],{"class":120,"line":32928},[118,152953,32444],{"class":177},[118,152955,129],{"class":128},[118,152957,152958],{"class":233},"\"暂无学生\"",[118,152960,135],{"class":128},[118,152962,152963],{"class":120,"line":32939},[118,152964,152354],{"class":124},[118,152966,152967],{"class":120,"line":32945},[118,152968,2404],{"emptyLinePlaceholder":45},[118,152970,152971,152973,152975,152978,152980,152983,152985,152988,152990,152993],{"class":120,"line":32965},[118,152972,31292],{"class":177},[118,152974,129],{"class":128},[118,152976,152977],{"class":233},"\"学号",[118,152979,1234],{"class":177},[118,152981,152982],{"class":233},"姓名",[118,152984,1234],{"class":177},[118,152986,152987],{"class":233},"年龄",[118,152989,1234],{"class":177},[118,152991,152992],{"class":233},"成绩\"",[118,152994,135],{"class":128},[118,152996,152997,152999,153001,153003],{"class":120,"line":32981},[118,152998,3205],{"class":124},[118,153000,152130],{"class":128},[118,153002,26036],{"class":124},[118,153004,152135],{"class":128},[118,153006,153007],{"class":120,"line":32987},[118,153008,153009],{"class":128},"        print_student(student)\n",[118,153011,153012],{"class":120,"line":33001},[118,153013,2404],{"emptyLinePlaceholder":45},[118,153015,153016],{"class":120,"line":33007},[118,153017,2404],{"emptyLinePlaceholder":45},[118,153019,153020,153022,153024],{"class":120,"line":33013},[118,153021,31940],{"class":124},[118,153023,1977],{"class":1967},[118,153025,31946],{"class":128},[118,153027,153028,153031,153033],{"class":120,"line":33024},[118,153029,153030],{"class":128},"    students ",[118,153032,174],{"class":124},[118,153034,153035],{"class":128}," load_students()\n",[118,153037,153038],{"class":120,"line":33030},[118,153039,2404],{"emptyLinePlaceholder":45},[118,153041,153042,153044,153046],{"class":120,"line":33036},[118,153043,2255],{"class":124},[118,153045,95285],{"class":177},[118,153047,3743],{"class":128},[118,153049,153050],{"class":120,"line":33046},[118,153051,153052],{"class":128},"        show_menu()\n",[118,153054,153055,153058,153060,153062,153064,153067],{"class":120,"line":33052},[118,153056,153057],{"class":128},"        choice ",[118,153059,174],{"class":124},[118,153061,60598],{"class":177},[118,153063,129],{"class":128},[118,153065,153066],{"class":233},"\"请输入操作:\"",[118,153068,135],{"class":128},[118,153070,153071],{"class":120,"line":33063},[118,153072,2404],{"emptyLinePlaceholder":45},[118,153074,153075,153077,153080,153082,153085],{"class":120,"line":33069},[118,153076,2501],{"class":124},[118,153078,153079],{"class":128}," choice ",[118,153081,2953],{"class":124},[118,153083,153084],{"class":233}," \"1\"",[118,153086,3743],{"class":128},[118,153088,153089],{"class":120,"line":33079},[118,153090,153091],{"class":128},"            add_student(students)\n",[118,153093,153094,153097,153099,153101,153104],{"class":120,"line":33084},[118,153095,153096],{"class":124},"        elif",[118,153098,153079],{"class":128},[118,153100,2953],{"class":124},[118,153102,153103],{"class":233}," \"2\"",[118,153105,3743],{"class":128},[118,153107,153108],{"class":120,"line":33090},[118,153109,153110],{"class":128},"            delete_student(students)\n",[118,153112,153113,153115,153117,153119,153122],{"class":120,"line":33139},[118,153114,153096],{"class":124},[118,153116,153079],{"class":128},[118,153118,2953],{"class":124},[118,153120,153121],{"class":233}," \"3\"",[118,153123,3743],{"class":128},[118,153125,153126],{"class":120,"line":33186},[118,153127,153128],{"class":128},"            update_student(students)\n",[118,153130,153131,153133,153135,153137,153140],{"class":120,"line":33191},[118,153132,153096],{"class":124},[118,153134,153079],{"class":128},[118,153136,2953],{"class":124},[118,153138,153139],{"class":233}," \"4\"",[118,153141,3743],{"class":128},[118,153143,153144],{"class":120,"line":33197},[118,153145,153146],{"class":128},"            query_student(students)\n",[118,153148,153149,153151,153153,153155,153158],{"class":120,"line":33216},[118,153150,153096],{"class":124},[118,153152,153079],{"class":128},[118,153154,2953],{"class":124},[118,153156,153157],{"class":233}," \"5\"",[118,153159,3743],{"class":128},[118,153161,153162],{"class":120,"line":33222},[118,153163,153164],{"class":128},"            show_all_students(students)\n",[118,153166,153167,153169,153171,153173,153176],{"class":120,"line":33242},[118,153168,153096],{"class":124},[118,153170,153079],{"class":128},[118,153172,2953],{"class":124},[118,153174,153175],{"class":233}," \"0\"",[118,153177,3743],{"class":128},[118,153179,153180,153182,153184,153187],{"class":120,"line":33248},[118,153181,34643],{"class":177},[118,153183,129],{"class":128},[118,153185,153186],{"class":233},"\"退出系统\"",[118,153188,135],{"class":128},[118,153190,153191],{"class":120,"line":33254},[118,153192,115091],{"class":124},[118,153194,153195,153197],{"class":120,"line":33264},[118,153196,2538],{"class":124},[118,153198,3743],{"class":128},[118,153200,153201,153203,153205,153208],{"class":120,"line":33269},[118,153202,34643],{"class":177},[118,153204,129],{"class":128},[118,153206,153207],{"class":233},"\"输入错误\"",[118,153209,135],{"class":128},[118,153211,153212],{"class":120,"line":33275},[118,153213,2404],{"emptyLinePlaceholder":45},[118,153215,153216],{"class":120,"line":33291},[118,153217,2404],{"emptyLinePlaceholder":45},[118,153219,153220,153222,153224,153226,153228],{"class":120,"line":33336},[118,153221,1535],{"class":124},[118,153223,31213],{"class":177},[118,153225,101552],{"class":124},[118,153227,101555],{"class":233},[118,153229,3743],{"class":128},[118,153231,153232],{"class":120,"line":33342},[118,153233,101562],{"class":128},[15,153235,153236],{},"这个项目串联了：",[72,153238,153239,153242,153245,153248,153251,153253],{},[75,153240,153241],{},"菜单循环。",[75,153243,153244],{},"函数封装。",[75,153246,153247],{},"列表字典。",[75,153249,153250],{},"JSON 读写。",[75,153252,151720],{},[75,153254,153255,28378],{},[115,153256,153257],{},"if __name__ == \"__main__\"",[60,153259,153261],{"id":153260},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[15,153263,153264],{},"可以进一步拆成两个类：",[72,153266,153267,153272],{},[75,153268,153269,153271],{},[115,153270,149561],{},"：表示单个学生。",[75,153273,153274,153276],{},[115,153275,151587],{},"：负责学生增删改查和文件保存。",[15,153278,153279],{},"示意代码：",[109,153281,153283],{"className":30371,"code":153282,"language":30373,"meta":39,"style":39},"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",[115,153284,153285,153295,153299,153303,153307,153315,153322,153328,153334,153340,153344,153352,153358,153368,153378,153388,153398,153402,153406,153412,153420,153428,153436,153444,153452,153460],{"__ignoreMap":39},[118,153286,153287,153289,153291,153293],{"class":120,"line":121},[118,153288,30730],{"class":124},[118,153290,151145],{"class":128},[118,153292,30385],{"class":124},[118,153294,151150],{"class":128},[118,153296,153297],{"class":120,"line":40},[118,153298,2404],{"emptyLinePlaceholder":45},[118,153300,153301],{"class":120,"line":1183},[118,153302,2404],{"emptyLinePlaceholder":45},[118,153304,153305],{"class":120,"line":1198},[118,153306,151163],{"class":1967},[118,153308,153309,153311,153313],{"class":120,"line":1204},[118,153310,14699],{"class":124},[118,153312,7903],{"class":1967},[118,153314,3743],{"class":128},[118,153316,153317,153320],{"class":120,"line":1218},[118,153318,153319],{"class":128},"    student_id: ",[118,153321,151179],{"class":177},[118,153323,153324,153326],{"class":120,"line":1224},[118,153325,151176],{"class":128},[118,153327,151179],{"class":177},[118,153329,153330,153332],{"class":120,"line":1315},[118,153331,151184],{"class":128},[118,153333,151187],{"class":177},[118,153335,153336,153338],{"class":120,"line":1321},[118,153337,151192],{"class":128},[118,153339,151195],{"class":177},[118,153341,153342],{"class":120,"line":1333},[118,153343,2404],{"emptyLinePlaceholder":45},[118,153345,153346,153348,153350],{"class":120,"line":1616},[118,153347,30794],{"class":124},[118,153349,151343],{"class":1967},[118,153351,30800],{"class":128},[118,153353,153354,153356],{"class":120,"line":1621},[118,153355,14757],{"class":124},[118,153357,15577],{"class":128},[118,153359,153360,153362,153364,153366],{"class":120,"line":1627},[118,153361,151356],{"class":233},[118,153363,51430],{"class":128},[118,153365,30816],{"class":177},[118,153367,151363],{"class":128},[118,153369,153370,153372,153374,153376],{"class":120,"line":1632},[118,153371,151368],{"class":233},[118,153373,51430],{"class":128},[118,153375,30816],{"class":177},[118,153377,151375],{"class":128},[118,153379,153380,153382,153384,153386],{"class":120,"line":1646},[118,153381,151380],{"class":233},[118,153383,51430],{"class":128},[118,153385,30816],{"class":177},[118,153387,151387],{"class":128},[118,153389,153390,153392,153394,153396],{"class":120,"line":1651},[118,153391,151392],{"class":233},[118,153393,51430],{"class":128},[118,153395,30816],{"class":177},[118,153397,151399],{"class":128},[118,153399,153400],{"class":120,"line":1657},[118,153401,2533],{"class":128},[118,153403,153404],{"class":120,"line":1678},[118,153405,2404],{"emptyLinePlaceholder":45},[118,153407,153408,153410],{"class":120,"line":1683},[118,153409,151007],{"class":1967},[118,153411,151010],{"class":177},[118,153413,153414,153416,153418],{"class":120,"line":1697},[118,153415,30794],{"class":124},[118,153417,151420],{"class":1967},[118,153419,151423],{"class":128},[118,153421,153422,153424,153426],{"class":120,"line":1702},[118,153423,14757],{"class":124},[118,153425,151027],{"class":177},[118,153427,151432],{"class":128},[118,153429,153430,153432,153434],{"class":120,"line":1731},[118,153431,151437],{"class":128},[118,153433,151440],{"class":233},[118,153435,87829],{"class":128},[118,153437,153438,153440,153442],{"class":120,"line":1736},[118,153439,151437],{"class":128},[118,153441,62672],{"class":233},[118,153443,87829],{"class":128},[118,153445,153446,153448,153450],{"class":120,"line":1753},[118,153447,151437],{"class":128},[118,153449,69117],{"class":233},[118,153451,87829],{"class":128},[118,153453,153454,153456,153458],{"class":120,"line":1758},[118,153455,151437],{"class":128},[118,153457,151465],{"class":233},[118,153459,87829],{"class":128},[118,153461,153462],{"class":120,"line":1763},[118,153463,38119],{"class":128},[15,153465,153466],{},"管理器示意：",[109,153468,153470],{"className":30371,"code":153469,"language":30373,"meta":39,"style":39},"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",[115,153471,153472,153481,153489,153500,153504,153514,153527,153538,153545,153551,153555,153564,153573,153579,153586],{"__ignoreMap":39},[118,153473,153474,153476,153479],{"class":120,"line":121},[118,153475,14699],{"class":124},[118,153477,153478],{"class":1967}," StudentManager",[118,153480,3743],{"class":128},[118,153482,153483,153485,153487],{"class":120,"line":40},[118,153484,30794],{"class":124},[118,153486,30797],{"class":177},[118,153488,30800],{"class":128},[118,153490,153491,153493,153496,153498],{"class":120,"line":1183},[118,153492,30838],{"class":177},[118,153494,153495],{"class":128},".students ",[118,153497,174],{"class":124},[118,153499,51831],{"class":128},[118,153501,153502],{"class":120,"line":1198},[118,153503,2404],{"emptyLinePlaceholder":45},[118,153505,153506,153508,153511],{"class":120,"line":1204},[118,153507,30794],{"class":124},[118,153509,153510],{"class":1967}," find_by_id",[118,153512,153513],{"class":128},"(self, student_id):\n",[118,153515,153516,153518,153520,153522,153524],{"class":120,"line":1218},[118,153517,3407],{"class":124},[118,153519,152130],{"class":128},[118,153521,26036],{"class":124},[118,153523,38866],{"class":177},[118,153525,153526],{"class":128},".students:\n",[118,153528,153529,153531,153534,153536],{"class":120,"line":1224},[118,153530,4646],{"class":124},[118,153532,153533],{"class":128}," student.student_id ",[118,153535,2953],{"class":124},[118,153537,152151],{"class":128},[118,153539,153540,153543],{"class":120,"line":1315},[118,153541,153542],{"class":124},"                return",[118,153544,152158],{"class":128},[118,153546,153547,153549],{"class":120,"line":1321},[118,153548,14757],{"class":124},[118,153550,152165],{"class":177},[118,153552,153553],{"class":120,"line":1333},[118,153554,2404],{"emptyLinePlaceholder":45},[118,153556,153557,153559,153561],{"class":120,"line":1616},[118,153558,30794],{"class":124},[118,153560,5214],{"class":1967},[118,153562,153563],{"class":128},"(self, student):\n",[118,153565,153566,153568,153570],{"class":120,"line":1621},[118,153567,2501],{"class":124},[118,153569,38866],{"class":177},[118,153571,153572],{"class":128},".find_by_id(student.student_id):\n",[118,153574,153575,153577],{"class":120,"line":1627},[118,153576,15737],{"class":124},[118,153578,125800],{"class":177},[118,153580,153581,153583],{"class":120,"line":1632},[118,153582,30838],{"class":177},[118,153584,153585],{"class":128},".students.append(student)\n",[118,153587,153588,153590],{"class":120,"line":1646},[118,153589,14757],{"class":124},[118,153591,153592],{"class":177}," True\n",[15,153594,153595],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[60,153597,153599],{"id":153598},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[89,153601,153603],{"id":153602},"_1251-数据结构","12.5.1 数据结构",[109,153605,153607],{"className":30371,"code":153606,"language":30373,"meta":39,"style":39},"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",[115,153608,153609,153617,153648,153678,153707,153736],{"__ignoreMap":39},[118,153610,153611,153613,153615],{"class":120,"line":121},[118,153612,148458],{"class":128},[118,153614,174],{"class":124},[118,153616,55440],{"class":128},[118,153618,153619,153621,153623,153625,153627,153629,153632,153634,153637,153639,153641,153643,153646],{"class":120,"line":40},[118,153620,148378],{"class":128},[118,153622,147990],{"class":233},[118,153624,51430],{"class":128},[118,153626,148601],{"class":233},[118,153628,12440],{"class":128},[118,153630,153631],{"class":233},"\"category\"",[118,153633,51430],{"class":128},[118,153635,153636],{"class":233},"\"手机\"",[118,153638,12440],{"class":128},[118,153640,84077],{"class":233},[118,153642,51430],{"class":128},[118,153644,153645],{"class":177},"12000",[118,153647,4934],{"class":128},[118,153649,153650,153652,153654,153656,153658,153660,153662,153664,153667,153669,153671,153673,153676],{"class":120,"line":1183},[118,153651,148378],{"class":128},[118,153653,147990],{"class":233},[118,153655,51430],{"class":128},[118,153657,148601],{"class":233},[118,153659,12440],{"class":128},[118,153661,153631],{"class":233},[118,153663,51430],{"class":128},[118,153665,153666],{"class":233},"\"电脑\"",[118,153668,12440],{"class":128},[118,153670,84077],{"class":233},[118,153672,51430],{"class":128},[118,153674,153675],{"class":177},"18000",[118,153677,4934],{"class":128},[118,153679,153680,153682,153684,153686,153688,153690,153692,153694,153696,153698,153700,153702,153705],{"class":120,"line":1198},[118,153681,148378],{"class":128},[118,153683,147990],{"class":233},[118,153685,51430],{"class":128},[118,153687,148622],{"class":233},[118,153689,12440],{"class":128},[118,153691,153631],{"class":233},[118,153693,51430],{"class":128},[118,153695,153636],{"class":233},[118,153697,12440],{"class":128},[118,153699,84077],{"class":233},[118,153701,51430],{"class":128},[118,153703,153704],{"class":177},"15000",[118,153706,4934],{"class":128},[118,153708,153709,153711,153713,153715,153717,153719,153721,153723,153725,153727,153729,153731,153734],{"class":120,"line":1204},[118,153710,148378],{"class":128},[118,153712,147990],{"class":233},[118,153714,51430],{"class":128},[118,153716,148622],{"class":233},[118,153718,12440],{"class":128},[118,153720,153631],{"class":233},[118,153722,51430],{"class":128},[118,153724,153666],{"class":233},[118,153726,12440],{"class":128},[118,153728,84077],{"class":233},[118,153730,51430],{"class":128},[118,153732,153733],{"class":177},"16000",[118,153735,4934],{"class":128},[118,153737,153738],{"class":120,"line":1218},[118,153739,33239],{"class":128},[89,153741,153743],{"id":153742},"_1252-按日期统计","12.5.2 按日期统计",[109,153745,153747],{"className":30371,"code":153746,"language":30373,"meta":39,"style":39},"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",[115,153748,153749,153758,153762,153773,153787,153800,153819,153823],{"__ignoreMap":39},[118,153750,153751,153754,153756],{"class":120,"line":121},[118,153752,153753],{"class":128},"daily_total ",[118,153755,174],{"class":124},[118,153757,87861],{"class":128},[118,153759,153760],{"class":120,"line":40},[118,153761,2404],{"emptyLinePlaceholder":45},[118,153763,153764,153766,153768,153770],{"class":120,"line":1183},[118,153765,3029],{"class":124},[118,153767,148202],{"class":128},[118,153769,26036],{"class":124},[118,153771,153772],{"class":128}," sales:\n",[118,153774,153775,153778,153780,153783,153785],{"class":120,"line":1198},[118,153776,153777],{"class":128},"    date ",[118,153779,174],{"class":124},[118,153781,153782],{"class":128}," item[",[118,153784,147990],{"class":233},[118,153786,33239],{"class":128},[118,153788,153789,153792,153794,153796,153798],{"class":120,"line":1204},[118,153790,153791],{"class":128},"    amount ",[118,153793,174],{"class":124},[118,153795,153782],{"class":128},[118,153797,84077],{"class":233},[118,153799,33239],{"class":128},[118,153801,153802,153805,153807,153810,153812,153814,153816],{"class":120,"line":1218},[118,153803,153804],{"class":128},"    daily_total[date] ",[118,153806,174],{"class":124},[118,153808,153809],{"class":128}," daily_total.get(date, ",[118,153811,320],{"class":177},[118,153813,13719],{"class":128},[118,153815,609],{"class":124},[118,153817,153818],{"class":128}," amount\n",[118,153820,153821],{"class":120,"line":1224},[118,153822,2404],{"emptyLinePlaceholder":45},[118,153824,153825,153827],{"class":120,"line":1315},[118,153826,30408],{"class":177},[118,153828,153829],{"class":128},"(daily_total)\n",[89,153831,153833],{"id":153832},"_1253-按类别统计","12.5.3 按类别统计",[109,153835,153837],{"className":30371,"code":153836,"language":30373,"meta":39,"style":39},"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",[115,153838,153839,153848,153852,153862,153875,153887,153905,153909],{"__ignoreMap":39},[118,153840,153841,153844,153846],{"class":120,"line":121},[118,153842,153843],{"class":128},"category_total ",[118,153845,174],{"class":124},[118,153847,87861],{"class":128},[118,153849,153850],{"class":120,"line":40},[118,153851,2404],{"emptyLinePlaceholder":45},[118,153853,153854,153856,153858,153860],{"class":120,"line":1183},[118,153855,3029],{"class":124},[118,153857,148202],{"class":128},[118,153859,26036],{"class":124},[118,153861,153772],{"class":128},[118,153863,153864,153867,153869,153871,153873],{"class":120,"line":1198},[118,153865,153866],{"class":128},"    category ",[118,153868,174],{"class":124},[118,153870,153782],{"class":128},[118,153872,153631],{"class":233},[118,153874,33239],{"class":128},[118,153876,153877,153879,153881,153883,153885],{"class":120,"line":1204},[118,153878,153791],{"class":128},[118,153880,174],{"class":124},[118,153882,153782],{"class":128},[118,153884,84077],{"class":233},[118,153886,33239],{"class":128},[118,153888,153889,153892,153894,153897,153899,153901,153903],{"class":120,"line":1218},[118,153890,153891],{"class":128},"    category_total[category] ",[118,153893,174],{"class":124},[118,153895,153896],{"class":128}," category_total.get(category, ",[118,153898,320],{"class":177},[118,153900,13719],{"class":128},[118,153902,609],{"class":124},[118,153904,153818],{"class":128},[118,153906,153907],{"class":120,"line":1224},[118,153908,2404],{"emptyLinePlaceholder":45},[118,153910,153911,153913],{"class":120,"line":1315},[118,153912,30408],{"class":177},[118,153914,153915],{"class":128},"(category_total)\n",[89,153917,153919],{"id":153918},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[109,153921,153923],{"className":30371,"code":153922,"language":30373,"meta":39,"style":39},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[115,153924,153925,153950],{"__ignoreMap":39},[118,153926,153927,153930,153932,153934,153937,153940,153943,153946,153948],{"class":120,"line":121},[118,153928,153929],{"class":128},"top_date, top_amount ",[118,153931,174],{"class":124},[118,153933,5956],{"class":177},[118,153935,153936],{"class":128},"(daily_total.items(), ",[118,153938,153939],{"class":5221},"key",[118,153941,153942],{"class":124},"=lambda",[118,153944,153945],{"class":128}," item: item[",[118,153947,346],{"class":177},[118,153949,4661],{"class":128},[118,153951,153952,153954],{"class":120,"line":40},[118,153953,30408],{"class":177},[118,153955,153956],{"class":128},"(top_date, top_amount)\n",[60,153958,153960],{"id":153959},"_126-绘制柱状图","12.6 绘制柱状图",[109,153962,153964],{"className":30371,"code":153963,"language":30373,"meta":39,"style":39},"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",[115,153965,153966,153980,153991,153995,154003,154015,154027,154038,154042,154046,154056,154067,154081,154086,154103,154120,154136,154140],{"__ignoreMap":39},[118,153967,153968,153970,153972,153974,153976,153978],{"class":120,"line":121},[118,153969,30730],{"class":124},[118,153971,147372],{"class":128},[118,153973,30385],{"class":124},[118,153975,147377],{"class":128},[118,153977,31376],{"class":124},[118,153979,147382],{"class":128},[118,153981,153982,153984,153986,153988],{"class":120,"line":40},[118,153983,30730],{"class":124},[118,153985,147231],{"class":128},[118,153987,30385],{"class":124},[118,153989,153990],{"class":128}," Bar\n",[118,153992,153993],{"class":120,"line":1183},[118,153994,2404],{"emptyLinePlaceholder":45},[118,153996,153997,153999,154001],{"class":120,"line":1198},[118,153998,153843],{"class":128},[118,154000,174],{"class":124},[118,154002,15577],{"class":128},[118,154004,154005,154008,154010,154013],{"class":120,"line":1204},[118,154006,154007],{"class":233},"    \"手机\"",[118,154009,51430],{"class":128},[118,154011,154012],{"class":177},"27000",[118,154014,31459],{"class":128},[118,154016,154017,154020,154022,154025],{"class":120,"line":1218},[118,154018,154019],{"class":233},"    \"电脑\"",[118,154021,51430],{"class":128},[118,154023,154024],{"class":177},"34000",[118,154026,31459],{"class":128},[118,154028,154029,154032,154034,154036],{"class":120,"line":1224},[118,154030,154031],{"class":233},"    \"耳机\"",[118,154033,51430],{"class":128},[118,154035,124392],{"class":177},[118,154037,31459],{"class":128},[118,154039,154040],{"class":120,"line":1315},[118,154041,1569],{"class":128},[118,154043,154044],{"class":120,"line":1321},[118,154045,2404],{"emptyLinePlaceholder":45},[118,154047,154048,154051,154053],{"class":120,"line":1333},[118,154049,154050],{"class":128},"bar ",[118,154052,174],{"class":124},[118,154054,154055],{"class":128}," Bar()\n",[118,154057,154058,154061,154064],{"class":120,"line":1616},[118,154059,154060],{"class":128},"bar.add_xaxis(",[118,154062,154063],{"class":177},"list",[118,154065,154066],{"class":128},"(category_total.keys()))\n",[118,154068,154069,154072,154074,154076,154078],{"class":120,"line":1621},[118,154070,154071],{"class":128},"bar.add_yaxis(",[118,154073,147288],{"class":233},[118,154075,12440],{"class":128},[118,154077,154063],{"class":177},[118,154079,154080],{"class":128},"(category_total.values()))\n",[118,154082,154083],{"class":120,"line":1627},[118,154084,154085],{"class":128},"bar.set_global_opts(\n",[118,154087,154088,154090,154092,154094,154096,154098,154101],{"class":120,"line":1632},[118,154089,147466],{"class":5221},[118,154091,174],{"class":124},[118,154093,147471],{"class":128},[118,154095,51400],{"class":5221},[118,154097,174],{"class":124},[118,154099,154100],{"class":233},"\"品类销售额\"",[118,154102,38040],{"class":128},[118,154104,154105,154107,154109,154111,154113,154115,154118],{"class":120,"line":1646},[118,154106,147485],{"class":5221},[118,154108,174],{"class":124},[118,154110,147490],{"class":128},[118,154112,79803],{"class":5221},[118,154114,174],{"class":124},[118,154116,154117],{"class":233},"\"品类\"",[118,154119,38040],{"class":128},[118,154121,154122,154124,154126,154128,154130,154132,154134],{"class":120,"line":1651},[118,154123,147504],{"class":5221},[118,154125,174],{"class":124},[118,154127,147490],{"class":128},[118,154129,79803],{"class":5221},[118,154131,174],{"class":124},[118,154133,147288],{"class":233},[118,154135,38040],{"class":128},[118,154137,154138],{"class":120,"line":1657},[118,154139,135],{"class":128},[118,154141,154142,154145,154148],{"class":120,"line":1678},[118,154143,154144],{"class":128},"bar.render(",[118,154146,154147],{"class":233},"\"category_sales.html\"",[118,154149,135],{"class":128},[60,154151,154153],{"id":154152},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[15,154155,154156],{},"时间线适合展示不同日期、月份、年份的数据变化。",[109,154158,154160],{"className":30371,"code":154159,"language":30373,"meta":39,"style":39},"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",[115,154161,154162,154176,154187,154191,154199,154223,154246,154271,154275,154279,154289,154293,154304,154313,154323,154337,154368,154373,154377],{"__ignoreMap":39},[118,154163,154164,154166,154168,154170,154172,154174],{"class":120,"line":121},[118,154165,30730],{"class":124},[118,154167,147372],{"class":128},[118,154169,30385],{"class":124},[118,154171,147377],{"class":128},[118,154173,31376],{"class":124},[118,154175,147382],{"class":128},[118,154177,154178,154180,154182,154184],{"class":120,"line":40},[118,154179,30730],{"class":124},[118,154181,147231],{"class":128},[118,154183,30385],{"class":124},[118,154185,154186],{"class":128}," Bar, Timeline\n",[118,154188,154189],{"class":120,"line":1183},[118,154190,2404],{"emptyLinePlaceholder":45},[118,154192,154193,154195,154197],{"class":120,"line":1198},[118,154194,101651],{"class":128},[118,154196,174],{"class":124},[118,154198,15577],{"class":128},[118,154200,154201,154204,154207,154209,154211,154213,154215,154217,154219,154221],{"class":120,"line":1204},[118,154202,154203],{"class":233},"    \"2024-10-01\"",[118,154205,154206],{"class":128},": {",[118,154208,153636],{"class":233},[118,154210,51430],{"class":128},[118,154212,153645],{"class":177},[118,154214,12440],{"class":128},[118,154216,153666],{"class":233},[118,154218,51430],{"class":128},[118,154220,153675],{"class":177},[118,154222,4934],{"class":128},[118,154224,154225,154228,154230,154232,154234,154236,154238,154240,154242,154244],{"class":120,"line":1218},[118,154226,154227],{"class":233},"    \"2024-10-02\"",[118,154229,154206],{"class":128},[118,154231,153636],{"class":233},[118,154233,51430],{"class":128},[118,154235,153704],{"class":177},[118,154237,12440],{"class":128},[118,154239,153666],{"class":233},[118,154241,51430],{"class":128},[118,154243,153733],{"class":177},[118,154245,4934],{"class":128},[118,154247,154248,154251,154253,154255,154257,154260,154262,154264,154266,154269],{"class":120,"line":1224},[118,154249,154250],{"class":233},"    \"2024-10-03\"",[118,154252,154206],{"class":128},[118,154254,153636],{"class":233},[118,154256,51430],{"class":128},[118,154258,154259],{"class":177},"17000",[118,154261,12440],{"class":128},[118,154263,153666],{"class":233},[118,154265,51430],{"class":128},[118,154267,154268],{"class":177},"19000",[118,154270,4934],{"class":128},[118,154272,154273],{"class":120,"line":1315},[118,154274,1569],{"class":128},[118,154276,154277],{"class":120,"line":1321},[118,154278,2404],{"emptyLinePlaceholder":45},[118,154280,154281,154284,154286],{"class":120,"line":1333},[118,154282,154283],{"class":128},"timeline ",[118,154285,174],{"class":124},[118,154287,154288],{"class":128}," Timeline()\n",[118,154290,154291],{"class":120,"line":1616},[118,154292,2404],{"emptyLinePlaceholder":45},[118,154294,154295,154297,154300,154302],{"class":120,"line":1621},[118,154296,3029],{"class":124},[118,154298,154299],{"class":128}," date, category_data ",[118,154301,26036],{"class":124},[118,154303,149141],{"class":128},[118,154305,154306,154309,154311],{"class":120,"line":1627},[118,154307,154308],{"class":128},"    bar ",[118,154310,174],{"class":124},[118,154312,154055],{"class":128},[118,154314,154315,154318,154320],{"class":120,"line":1632},[118,154316,154317],{"class":128},"    bar.add_xaxis(",[118,154319,154063],{"class":177},[118,154321,154322],{"class":128},"(category_data.keys()))\n",[118,154324,154325,154328,154330,154332,154334],{"class":120,"line":1646},[118,154326,154327],{"class":128},"    bar.add_yaxis(",[118,154329,147288],{"class":233},[118,154331,12440],{"class":128},[118,154333,154063],{"class":177},[118,154335,154336],{"class":128},"(category_data.values()))\n",[118,154338,154339,154342,154345,154347,154349,154351,154353,154355,154357,154359,154361,154363,154366],{"class":120,"line":1651},[118,154340,154341],{"class":128},"    bar.set_global_opts(",[118,154343,154344],{"class":5221},"title_opts",[118,154346,174],{"class":124},[118,154348,147471],{"class":128},[118,154350,51400],{"class":5221},[118,154352,174],{"class":124},[118,154354,181],{"class":124},[118,154356,379],{"class":233},[118,154358,1024],{"class":177},[118,154360,73919],{"class":128},[118,154362,1074],{"class":177},[118,154364,154365],{"class":233},"销售额\"",[118,154367,30490],{"class":128},[118,154369,154370],{"class":120,"line":1657},[118,154371,154372],{"class":128},"    timeline.add(bar, date)\n",[118,154374,154375],{"class":120,"line":1678},[118,154376,2404],{"emptyLinePlaceholder":45},[118,154378,154379,154382,154385],{"class":120,"line":1683},[118,154380,154381],{"class":128},"timeline.render(",[118,154383,154384],{"class":233},"\"timeline_sales.html\"",[118,154386,135],{"class":128},[60,154388,154390],{"id":154389},"_128-绘制地图","12.8 绘制地图",[15,154392,154393],{},"地图适合展示地区数据。",[109,154395,154397],{"className":30371,"code":154396,"language":30373,"meta":39,"style":39},"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",[115,154398,154399,154413,154424,154428,154436,154449,154461,154474,154487,154491,154495,154505,154520,154525,154542,154561,154565],{"__ignoreMap":39},[118,154400,154401,154403,154405,154407,154409,154411],{"class":120,"line":121},[118,154402,30730],{"class":124},[118,154404,147372],{"class":128},[118,154406,30385],{"class":124},[118,154408,147377],{"class":128},[118,154410,31376],{"class":124},[118,154412,147382],{"class":128},[118,154414,154415,154417,154419,154421],{"class":120,"line":40},[118,154416,30730],{"class":124},[118,154418,147231],{"class":128},[118,154420,30385],{"class":124},[118,154422,154423],{"class":128}," Map\n",[118,154425,154426],{"class":120,"line":1183},[118,154427,2404],{"emptyLinePlaceholder":45},[118,154429,154430,154432,154434],{"class":120,"line":1198},[118,154431,101651],{"class":128},[118,154433,174],{"class":124},[118,154435,55440],{"class":128},[118,154437,154438,154441,154443,154445,154447],{"class":120,"line":1204},[118,154439,154440],{"class":128},"    (",[118,154442,69262],{"class":233},[118,154444,12440],{"class":128},[118,154446,945],{"class":177},[118,154448,38040],{"class":128},[118,154450,154451,154453,154455,154457,154459],{"class":120,"line":1218},[118,154452,154440],{"class":128},[118,154454,69282],{"class":233},[118,154456,12440],{"class":128},[118,154458,147305],{"class":177},[118,154460,38040],{"class":128},[118,154462,154463,154465,154468,154470,154472],{"class":120,"line":1224},[118,154464,154440],{"class":128},[118,154466,154467],{"class":233},"\"广东\"",[118,154469,12440],{"class":128},[118,154471,1726],{"class":177},[118,154473,38040],{"class":128},[118,154475,154476,154478,154481,154483,154485],{"class":120,"line":1315},[118,154477,154440],{"class":128},[118,154479,154480],{"class":233},"\"浙江\"",[118,154482,12440],{"class":128},[118,154484,147310],{"class":177},[118,154486,38040],{"class":128},[118,154488,154489],{"class":120,"line":1321},[118,154490,33239],{"class":128},[118,154492,154493],{"class":120,"line":1333},[118,154494,2404],{"emptyLinePlaceholder":45},[118,154496,154497,154500,154502],{"class":120,"line":1616},[118,154498,154499],{"class":128},"map_chart ",[118,154501,174],{"class":124},[118,154503,154504],{"class":128}," Map()\n",[118,154506,154507,154510,154512,154515,154518],{"class":120,"line":1621},[118,154508,154509],{"class":128},"map_chart.add(",[118,154511,147288],{"class":233},[118,154513,154514],{"class":128},", data, ",[118,154516,154517],{"class":233},"\"china\"",[118,154519,135],{"class":128},[118,154521,154522],{"class":120,"line":1627},[118,154523,154524],{"class":128},"map_chart.set_global_opts(\n",[118,154526,154527,154529,154531,154533,154535,154537,154540],{"class":120,"line":1632},[118,154528,147466],{"class":5221},[118,154530,174],{"class":124},[118,154532,147471],{"class":128},[118,154534,51400],{"class":5221},[118,154536,174],{"class":124},[118,154538,154539],{"class":233},"\"地区销售额\"",[118,154541,38040],{"class":128},[118,154543,154544,154547,154549,154552,154555,154557,154559],{"class":120,"line":1646},[118,154545,154546],{"class":5221},"    visualmap_opts",[118,154548,174],{"class":124},[118,154550,154551],{"class":128},"opts.VisualMapOpts(",[118,154553,154554],{"class":5221},"max_",[118,154556,174],{"class":124},[118,154558,1726],{"class":177},[118,154560,38040],{"class":128},[118,154562,154563],{"class":120,"line":1651},[118,154564,135],{"class":128},[118,154566,154567,154570,154573],{"class":120,"line":1657},[118,154568,154569],{"class":128},"map_chart.render(",[118,154571,154572],{"class":233},"\"map_sales.html\"",[118,154574,135],{"class":128},[15,154576,154577],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[60,154579,154581],{"id":154580},"_129-项目拆分建议","12.9 项目拆分建议",[15,154583,154584],{},"当代码超过一个文件时，可以这样组织：",[109,154586,154589],{"className":154587,"code":154588,"language":5192,"meta":39},[5190],"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",[115,154590,154588],{"__ignoreMap":39},[15,154592,154593],{},"职责：",[72,154595,154596,154602,154608,154614],{},[75,154597,154598,154601],{},[115,154599,154600],{},"main.py","：程序入口。",[75,154603,154604,154607],{},[115,154605,154606],{},"file_utils.py","：读写 JSON。",[75,154609,154610,154613],{},[115,154611,154612],{},"sales_service.py","：统计销售数据。",[75,154615,154616,154619],{},[115,154617,154618],{},"chart_builder.py","：生成图表。",[60,154621,154623],{"id":154622},"_1210-python基础复习清单","12.10 Python基础复习清单",[15,154625,154626],{},"语法基础：",[72,154628,154629,154632,154635,154638],{},[75,154630,154631],{},"会写变量、注释、输入输出。",[75,154633,154634],{},"会使用 int、float、str、bool。",[75,154636,154637],{},"会做类型转换。",[75,154639,154640],{},"会使用 f-string 格式化输出。",[15,154642,154643],{},"流程控制：",[72,154645,154646,154652,154658,154666],{},[75,154647,154648,154649,28378],{},"会写 ",[115,154650,154651],{},"if elif else",[75,154653,154648,154654,101011,154656,28378],{},[115,154655,108656],{},[115,154657,3029],{},[75,154659,154660,154661,101011,154663,28378],{},"理解 ",[115,154662,2057],{},[115,154664,154665],{},"continue",[75,154667,154668],{},"能写嵌套循环。",[15,154670,154671],{},"函数：",[72,154673,154674,154677,154680,154683],{},[75,154675,154676],{},"会定义和调用函数。",[75,154678,154679],{},"理解参数和返回值。",[75,154681,154682],{},"知道局部变量和全局变量。",[75,154684,154685],{},"会使用默认参数、关键字参数、不定长参数。",[15,154687,154688],{},"容器：",[72,154690,154691,154694,154697,154700,154703],{},[75,154692,154693],{},"会使用列表增删改查。",[75,154695,154696],{},"会遍历列表、字典。",[75,154698,154699],{},"会使用切片。",[75,154701,154702],{},"会用集合去重。",[75,154704,154705],{},"会处理列表嵌套字典。",[15,154707,154708],{},"文件和模块：",[72,154710,154711,154714,154717,154720,154723],{},[75,154712,154713],{},"会读写文本文件。",[75,154715,154716],{},"会读写 JSON。",[75,154718,154719],{},"会捕获常见异常。",[75,154721,154722],{},"会导入模块和第三方包。",[75,154724,154725],{},"会创建简单包结构。",[15,154727,154728],{},"项目能力：",[72,154730,154731,154734,154737,154740,154743],{},[75,154732,154733],{},"能把代码拆成函数。",[75,154735,154736],{},"能把数据保存到文件。",[75,154738,154739],{},"能处理用户输入错误。",[75,154741,154742],{},"能写一个完整菜单程序。",[75,154744,154745],{},"能用 pyecharts 生成图表。",[60,154747,154749],{"id":154748},"_1211-推荐练习顺序","12.11 推荐练习顺序",[72,154751,154752,154755,154758,154761,154764,154767,154770,154773],{},[75,154753,154754],{},"猜数字游戏。",[75,154756,154757],{},"ATM 菜单程序。",[75,154759,154760],{},"学生成绩统计。",[75,154762,154763],{},"学生管理系统函数版。",[75,154765,154766],{},"学生管理系统文件持久化版。",[75,154768,154769],{},"学生管理系统面向对象版。",[75,154771,154772],{},"销售数据统计。",[75,154774,154775],{},"销售数据可视化。",[60,154777,154779],{"id":154778},"_1212-常见学习误区","12.12 常见学习误区",[72,154781,154782,154785,154788,154791,154794,154797,154800],{},[75,154783,154784],{},"只看视频不敲代码。",[75,154786,154787],{},"一报错就复制错误去搜，不先读报错位置。",[75,154789,154790],{},"变量名随便写，后续自己看不懂。",[75,154792,154793],{},"所有代码都写在一个文件一个函数里。",[75,154795,154796],{},"不保存练习代码，复习时没有材料。",[75,154798,154799],{},"还没掌握列表字典就急着学框架。",[75,154801,154802],{},"不会读官方文档，只依赖教程。",[60,154804,154806],{"id":154805},"_1213-如何读报错","12.13 如何读报错",[15,154808,154809],{},"报错通常从下往上看最后几行。",[15,154811,15140],{},[109,154813,154816],{"className":154814,"code":154815,"language":5192,"meta":39},[5190],"ValueError: invalid literal for int() with base 10: 'abc'\n",[115,154817,154815],{"__ignoreMap":39},[15,154819,24604],{},[72,154821,154822,154828,154838],{},[75,154823,154824,154825,28378],{},"异常类型是 ",[115,154826,154827],{},"ValueError",[75,154829,107338,154830,154833,154834,154837],{},[115,154831,154832],{},"int()"," 无法把 ",[115,154835,154836],{},"'abc'"," 转成整数。",[75,154839,154840],{},"应该检查输入内容或增加异常处理。",[15,154842,154843],{},"再看文件名和行号：",[109,154845,154848],{"className":154846,"code":154847,"language":5192,"meta":39},[5190],"File \"main.py\", line 10, in \u003Cmodule>\n",[115,154849,154847],{"__ignoreMap":39},[15,154851,154852,154853,154855],{},"表示错误发生在 ",[115,154854,154600],{}," 第 10 行。",[60,154857,154859],{"id":154858},"_1214-后续学习方向","12.14 后续学习方向",[15,154861,154862],{},"Python 基础完成后，可以按兴趣选择方向：",[72,154864,154865,154877,154886,154898,154909,154918,154928],{},[75,154866,154867,154868,341,154871,341,154874,28378],{},"自动化办公：",[115,154869,154870],{},"openpyxl",[115,154872,154873],{},"python-docx",[115,154875,154876],{},"pdfplumber",[75,154878,154879,154880,341,154882,341,154884,28378],{},"数据分析：",[115,154881,100619],{},[115,154883,146178],{},[115,154885,146186],{},[75,154887,154888,154889,341,154892,341,154895,28378],{},"Web 后端：",[115,154890,154891],{},"Flask",[115,154893,154894],{},"FastAPI",[115,154896,154897],{},"Django",[75,154899,154900,154901,341,154903,341,154906,28378],{},"爬虫：",[115,154902,146163],{},[115,154904,154905],{},"BeautifulSoup",[115,154907,154908],{},"Scrapy",[75,154910,154911,154912,341,154914,154917],{},"测试开发：",[115,154913,146210],{},[115,154915,154916],{},"selenium","、接口测试。",[75,154919,154920,154921,341,154923,341,154925,28378],{},"人工智能：",[115,154922,100619],{},[115,154924,146178],{},[115,154926,154927],{},"pytorch",[75,154929,154930,154931,341,154933,341,154936,28378],{},"运维脚本：",[115,154932,145779],{},[115,154934,154935],{},"subprocess",[115,154937,154938],{},"paramiko",[15,154940,154941],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[60,154943,154945],{"id":154944},"_1215-结课练习","12.15 结课练习",[72,154947,154948,154951,154954,154957,154960,154963,154966,154969],{},[75,154949,154950],{},"完成函数版学生管理系统。",[75,154952,154953],{},"给学生管理系统增加 JSON 持久化。",[75,154955,154956],{},"给学生管理系统增加异常处理。",[75,154958,154959],{},"把学生管理系统改成面向对象版。",[75,154961,154962],{},"使用 pyecharts 绘制学生成绩柱状图。",[75,154964,154965],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[75,154967,154968],{},"按品类统计销售额并绘制柱状图。",[75,154970,154971],{},"写一份自己的 Python 学习路线图。",[5131,154973,154974],{},"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":39,"searchDepth":40,"depth":40,"links":154976},[154977,154978,154981,154982,154983,154989,154990,154991,154992,154993,154994,154995,154996,154997,154998],{"id":151693,"depth":40,"text":151694},{"id":151743,"depth":40,"text":151744,"children":154979},[154980],{"id":151747,"depth":1183,"text":151748},{"id":151786,"depth":40,"text":151787},{"id":153260,"depth":40,"text":153261},{"id":153598,"depth":40,"text":153599,"children":154984},[154985,154986,154987,154988],{"id":153602,"depth":1183,"text":153603},{"id":153742,"depth":1183,"text":153743},{"id":153832,"depth":1183,"text":153833},{"id":153918,"depth":1183,"text":153919},{"id":153959,"depth":40,"text":153960},{"id":154152,"depth":40,"text":154153},{"id":154389,"depth":40,"text":154390},{"id":154580,"depth":40,"text":154581},{"id":154622,"depth":40,"text":154623},{"id":154748,"depth":40,"text":154749},{"id":154778,"depth":40,"text":154779},{"id":154805,"depth":40,"text":154806},{"id":154858,"depth":40,"text":154859},{"id":154944,"depth":40,"text":154945},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151685,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155005,"title":155006,"body":155007,"description":42,"extension":43,"meta":157476,"navigation":45,"path":157477,"seo":157478,"stem":157479,"__hash__":157480},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155008,"toc":157451},[155009,155012,155016,155019,155022,155042,155045,155068,155071,155074,155096,155099,155121,155125,155128,155168,155171,155292,155296,155299,155339,155342,155366,155369,155373,155376,155390,155423,155426,155461,155464,155487,155490,155523,155526,155528,155534,155609,155612,155618,155635,155675,155679,155682,155728,155730,155768,155771,155806,155809,155844,155847,155879,155882,155901,155905,155909,156022,156024,156099,156103,156149,156152,156178,156187,156191,156194,156257,156265,156293,156297,156337,156402,156406,156409,156448,156451,156496,156499,156560,156564,156591,156594,156622,156625,156629,156633,156698,156701,156739,156742,156774,156778,156877,156881,156884,156957,156960,157008,157012,157018,157058,157061,157108,157111,157160,157164,157166,157180,157182,157363,157367,157394,157414,157421,157425,157442,157448],[10,155010,155006],{"id":155011},"_2-基础语法变量与字符串",[60,155013,155015],{"id":155014},"_21-注释","2.1 注释",[15,155017,155018],{},"注释是给人看的说明文字，不会被 Python 执行。",[15,155020,155021],{},"单行注释：",[109,155023,155025],{"className":30371,"code":155024,"language":30373,"meta":39,"style":39},"# 这是单行注释\nprint(\"hello\")\n",[115,155026,155027,155032],{"__ignoreMap":39},[118,155028,155029],{"class":120,"line":121},[118,155030,155031],{"class":187},"# 这是单行注释\n",[118,155033,155034,155036,155038,155040],{"class":120,"line":40},[118,155035,30408],{"class":177},[118,155037,129],{"class":128},[118,155039,5849],{"class":233},[118,155041,135],{"class":128},[15,155043,155044],{},"多行说明常用三引号：",[109,155046,155048],{"className":30371,"code":155047,"language":30373,"meta":39,"style":39},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[115,155049,155050,155054,155059,155064],{"__ignoreMap":39},[118,155051,155052],{"class":120,"line":121},[118,155053,95691],{"class":233},[118,155055,155056],{"class":120,"line":40},[118,155057,155058],{"class":233},"这是多行说明。\n",[118,155060,155061],{"class":120,"line":1183},[118,155062,155063],{"class":233},"常用于文件顶部说明、函数说明等。\n",[118,155065,155066],{"class":120,"line":1198},[118,155067,95691],{"class":233},[15,155069,155070],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[15,155072,155073],{},"不好：",[109,155075,155077],{"className":30371,"code":155076,"language":30373,"meta":39,"style":39},"# age 加 1\nage = age + 1\n",[115,155078,155079,155084],{"__ignoreMap":39},[118,155080,155081],{"class":120,"line":121},[118,155082,155083],{"class":187},"# age 加 1\n",[118,155085,155086,155088,155090,155092,155094],{"class":120,"line":40},[118,155087,146539],{"class":128},[118,155089,174],{"class":124},[118,155091,15712],{"class":128},[118,155093,609],{"class":124},[118,155095,55692],{"class":177},[15,155097,155098],{},"较好：",[109,155100,155102],{"className":30371,"code":155101,"language":30373,"meta":39,"style":39},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[115,155103,155104,155109],{"__ignoreMap":39},[118,155105,155106],{"class":120,"line":121},[118,155107,155108],{"class":187},"# 用户过完生日后，年龄增加一岁\n",[118,155110,155111,155113,155115,155117,155119],{"class":120,"line":40},[118,155112,146539],{"class":128},[118,155114,174],{"class":124},[118,155116,15712],{"class":128},[118,155118,609],{"class":124},[118,155120,55692],{"class":177},[60,155122,155124],{"id":155123},"_22-字面量","2.2 字面量",[15,155126,155127],{},"字面量就是代码中直接写出来的数据。",[109,155129,155131],{"className":30371,"code":155130,"language":30373,"meta":39,"style":39},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[115,155132,155133,155140,155147,155154,155161],{"__ignoreMap":39},[118,155134,155135,155137],{"class":120,"line":121},[118,155136,439],{"class":177},[118,155138,155139],{"class":187},"          # 整数\n",[118,155141,155142,155144],{"class":120,"line":40},[118,155143,178],{"class":177},[118,155145,155146],{"class":187},"         # 小数\n",[118,155148,155149,155151],{"class":120,"line":1183},[118,155150,5849],{"class":233},[118,155152,155153],{"class":187},"      # 字符串\n",[118,155155,155156,155158],{"class":120,"line":1198},[118,155157,31469],{"class":177},[118,155159,155160],{"class":187},"         # 布尔值\n",[118,155162,155163,155165],{"class":120,"line":1204},[118,155164,95679],{"class":177},[118,155166,155167],{"class":187},"         # 空值\n",[15,155169,155170],{},"常见字面量类型：",[266,155172,155173,155183],{},[269,155174,155175],{},[272,155176,155177,155179,155181],{},[275,155178,23742],{},[275,155180,27485],{},[275,155182,25862],{},[313,155184,155185,155196,155207,155218,155230,155242,155254,155267,155279],{},[272,155186,155187,155189,155193],{},[318,155188,132],{},[318,155190,155191],{},[115,155192,439],{},[318,155194,155195],{},"整数",[272,155197,155198,155200,155204],{},[318,155199,168],{},[318,155201,155202],{},[115,155203,178],{},[318,155205,155206],{},"浮点数",[272,155208,155209,155211,155215],{},[318,155210,1303],{},[318,155212,155213],{},[115,155214,5849],{},[318,155216,155217],{},"字符串",[272,155219,155220,155222,155228],{},[318,155221,1358],{},[318,155223,155224,341,155226],{},[115,155225,31469],{},[115,155227,33980],{},[318,155229,66008],{},[272,155231,155232,155235,155239],{},[318,155233,155234],{},"NoneType",[318,155236,155237],{},[115,155238,95679],{},[318,155240,155241],{},"空值",[272,155243,155244,155246,155251],{},[318,155245,154063],{},[318,155247,155248],{},[115,155249,155250],{},"[1, 2, 3]",[318,155252,155253],{},"列表",[272,155255,155256,155259,155264],{},[318,155257,155258],{},"tuple",[318,155260,155261],{},[115,155262,155263],{},"(1, 2, 3)",[318,155265,155266],{},"元组",[272,155268,155269,155271,155276],{},[318,155270,114539],{},[318,155272,155273],{},[115,155274,155275],{},"{\"name\": \"张三\"}",[318,155277,155278],{},"字典",[272,155280,155281,155284,155289],{},[318,155282,155283],{},"set",[318,155285,155286],{},[115,155287,155288],{},"{1, 2, 3}",[318,155290,155291],{},"集合",[60,155293,155295],{"id":155294},"_23-变量","2.3 变量",[15,155297,155298],{},"变量是保存数据的名字。",[109,155300,155302],{"className":30371,"code":155301,"language":30373,"meta":39,"style":39},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[115,155303,155304,155312,155320,155330],{"__ignoreMap":39},[118,155305,155306,155308,155310],{"class":120,"line":121},[118,155307,146529],{"class":128},[118,155309,174],{"class":124},[118,155311,149346],{"class":233},[118,155313,155314,155316,155318],{"class":120,"line":40},[118,155315,146539],{"class":128},[118,155317,174],{"class":124},[118,155319,146544],{"class":177},[118,155321,155322,155325,155327],{"class":120,"line":1183},[118,155323,155324],{"class":128},"height ",[118,155326,174],{"class":124},[118,155328,155329],{"class":177}," 1.75\n",[118,155331,155332,155335,155337],{"class":120,"line":1198},[118,155333,155334],{"class":128},"is_student ",[118,155336,174],{"class":124},[118,155338,153592],{"class":177},[15,155340,155341],{},"Python 的变量不需要提前声明类型：",[109,155343,155345],{"className":30371,"code":155344,"language":30373,"meta":39,"style":39},"score = 100\nscore = \"满分\"\n",[115,155346,155347,155357],{"__ignoreMap":39},[118,155348,155349,155352,155354],{"class":120,"line":121},[118,155350,155351],{"class":128},"score ",[118,155353,174],{"class":124},[118,155355,155356],{"class":177}," 100\n",[118,155358,155359,155361,155363],{"class":120,"line":40},[118,155360,155351],{"class":128},[118,155362,174],{"class":124},[118,155364,155365],{"class":233}," \"满分\"\n",[15,155367,155368],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[60,155370,155372],{"id":155371},"_24-变量命名规则","2.4 变量命名规则",[15,155374,155375],{},"硬性规则：",[72,155377,155378,155381,155384,155387],{},[75,155379,155380],{},"只能由字母、数字、下划线组成。",[75,155382,155383],{},"不能以数字开头。",[75,155385,155386],{},"不能使用 Python 关键字。",[75,155388,155389],{},"区分大小写。",[109,155391,155393],{"className":30371,"code":155392,"language":30373,"meta":39,"style":39},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[115,155394,155395,155404,155413],{"__ignoreMap":39},[118,155396,155397,155400,155402],{"class":120,"line":121},[118,155398,155399],{"class":128},"user_name ",[118,155401,174],{"class":124},[118,155403,146534],{"class":233},[118,155405,155406,155409,155411],{"class":120,"line":40},[118,155407,155408],{"class":128},"age2 ",[118,155410,174],{"class":124},[118,155412,146544],{"class":177},[118,155414,155415,155418,155420],{"class":120,"line":1183},[118,155416,155417],{"class":128},"_token ",[118,155419,174],{"class":124},[118,155421,155422],{"class":233}," \"abc\"\n",[15,155424,155425],{},"错误写法：",[109,155427,155429],{"className":30371,"code":155428,"language":30373,"meta":39,"style":39},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[115,155430,155431,155440,155452],{"__ignoreMap":39},[118,155432,155433,155436,155438],{"class":120,"line":121},[118,155434,155435],{"class":77396},"2age",[118,155437,13569],{"class":124},[118,155439,146544],{"class":177},[118,155441,155442,155444,155446,155448,155450],{"class":120,"line":40},[118,155443,131577],{"class":128},[118,155445,660],{"class":124},[118,155447,146529],{"class":128},[118,155449,174],{"class":124},[118,155451,146534],{"class":233},[118,155453,155454,155456,155458],{"class":120,"line":1183},[118,155455,14699],{"class":124},[118,155457,13569],{"class":124},[118,155459,155460],{"class":233}," \"一班\"\n",[15,155462,155463],{},"查看关键字：",[109,155465,155467],{"className":30371,"code":155466,"language":30373,"meta":39,"style":39},"import keyword\n\nprint(keyword.kwlist)\n",[115,155468,155469,155476,155480],{"__ignoreMap":39},[118,155470,155471,155473],{"class":120,"line":121},[118,155472,30385],{"class":124},[118,155474,155475],{"class":128}," keyword\n",[118,155477,155478],{"class":120,"line":40},[118,155479,2404],{"emptyLinePlaceholder":45},[118,155481,155482,155484],{"class":120,"line":1183},[118,155483,30408],{"class":177},[118,155485,155486],{"class":128},"(keyword.kwlist)\n",[15,155488,155489],{},"推荐命名风格：",[109,155491,155493],{"className":30371,"code":155492,"language":30373,"meta":39,"style":39},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[115,155494,155495,155504,155514],{"__ignoreMap":39},[118,155496,155497,155500,155502],{"class":120,"line":121},[118,155498,155499],{"class":128},"student_name ",[118,155501,174],{"class":124},[118,155503,149346],{"class":233},[118,155505,155506,155509,155511],{"class":120,"line":40},[118,155507,155508],{"class":128},"total_price ",[118,155510,174],{"class":124},[118,155512,155513],{"class":177}," 99.8\n",[118,155515,155516,155519,155521],{"class":120,"line":1183},[118,155517,155518],{"class":128},"is_finished ",[118,155520,174],{"class":124},[118,155522,125800],{"class":177},[15,155524,155525],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[60,155527,50725],{"id":50724},[15,155529,104359,155530,155533],{},[115,155531,155532],{},"type()"," 查看数据类型：",[109,155535,155537],{"className":30371,"code":155536,"language":30373,"meta":39,"style":39},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[115,155538,155539,155553,155567,155581,155595],{"__ignoreMap":39},[118,155540,155541,155543,155545,155547,155549,155551],{"class":120,"line":121},[118,155542,30408],{"class":177},[118,155544,129],{"class":128},[118,155546,103100],{"class":177},[118,155548,129],{"class":128},[118,155550,439],{"class":177},[118,155552,30490],{"class":128},[118,155554,155555,155557,155559,155561,155563,155565],{"class":120,"line":40},[118,155556,30408],{"class":177},[118,155558,129],{"class":128},[118,155560,103100],{"class":177},[118,155562,129],{"class":128},[118,155564,178],{"class":177},[118,155566,30490],{"class":128},[118,155568,155569,155571,155573,155575,155577,155579],{"class":120,"line":1183},[118,155570,30408],{"class":177},[118,155572,129],{"class":128},[118,155574,103100],{"class":177},[118,155576,129],{"class":128},[118,155578,5849],{"class":233},[118,155580,30490],{"class":128},[118,155582,155583,155585,155587,155589,155591,155593],{"class":120,"line":1198},[118,155584,30408],{"class":177},[118,155586,129],{"class":128},[118,155588,103100],{"class":177},[118,155590,129],{"class":128},[118,155592,31469],{"class":177},[118,155594,30490],{"class":128},[118,155596,155597,155599,155601,155603,155605,155607],{"class":120,"line":1204},[118,155598,30408],{"class":177},[118,155600,129],{"class":128},[118,155602,103100],{"class":177},[118,155604,129],{"class":128},[118,155606,95679],{"class":177},[118,155608,30490],{"class":128},[15,155610,155611],{},"输出类似：",[109,155613,155616],{"className":155614,"code":155615,"language":5192,"meta":39},[5190],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[115,155617,155615],{"__ignoreMap":39},[15,155619,9030,155620,107276,155622,155624,155625,155627,155628,21505,155630,155627,155632,155634],{},[115,155621,1358],{},[115,155623,132],{}," 的子类，",[115,155626,31469],{}," 可以当作 ",[115,155629,346],{},[115,155631,33980],{},[115,155633,320],{},"，但业务代码中不要滥用。",[109,155636,155638],{"className":30371,"code":155637,"language":30373,"meta":39,"style":39},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[115,155639,155640,155658],{"__ignoreMap":39},[118,155641,155642,155644,155646,155648,155650,155652,155655],{"class":120,"line":121},[118,155643,30408],{"class":177},[118,155645,129],{"class":128},[118,155647,31469],{"class":177},[118,155649,45559],{"class":124},[118,155651,25123],{"class":177},[118,155653,155654],{"class":128},")   ",[118,155656,155657],{"class":187},"# 2\n",[118,155659,155660,155662,155664,155666,155668,155670,155672],{"class":120,"line":40},[118,155661,30408],{"class":177},[118,155663,129],{"class":128},[118,155665,33980],{"class":177},[118,155667,45559],{"class":124},[118,155669,25123],{"class":177},[118,155671,45801],{"class":128},[118,155673,155674],{"class":187},"# 1\n",[60,155676,155678],{"id":155677},"_26-类型转换","2.6 类型转换",[15,155680,155681],{},"常用转换函数：",[109,155683,155685],{"className":30371,"code":155684,"language":30373,"meta":39,"style":39},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[115,155686,155687,155697,155708,155718],{"__ignoreMap":39},[118,155688,155689,155691,155693,155695],{"class":120,"line":121},[118,155690,132],{"class":177},[118,155692,129],{"class":128},[118,155694,54309],{"class":233},[118,155696,135],{"class":128},[118,155698,155699,155701,155703,155706],{"class":120,"line":40},[118,155700,168],{"class":177},[118,155702,129],{"class":128},[118,155704,155705],{"class":233},"\"3.14\"",[118,155707,135],{"class":128},[118,155709,155710,155712,155714,155716],{"class":120,"line":1183},[118,155711,1303],{"class":177},[118,155713,129],{"class":128},[118,155715,439],{"class":177},[118,155717,135],{"class":128},[118,155719,155720,155722,155724,155726],{"class":120,"line":1198},[118,155721,1358],{"class":177},[118,155723,129],{"class":128},[118,155725,346],{"class":177},[118,155727,135],{"class":128},[15,155729,15140],{},[109,155731,155733],{"className":30371,"code":155732,"language":30373,"meta":39,"style":39},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[115,155734,155735,155744,155755],{"__ignoreMap":39},[118,155736,155737,155739,155741],{"class":120,"line":121},[118,155738,146539],{"class":128},[118,155740,174],{"class":124},[118,155742,155743],{"class":233}," \"18\"\n",[118,155745,155746,155748,155750,155752],{"class":120,"line":40},[118,155747,146539],{"class":128},[118,155749,174],{"class":124},[118,155751,2386],{"class":177},[118,155753,155754],{"class":128},"(age)\n",[118,155756,155757,155759,155762,155764,155766],{"class":120,"line":1183},[118,155758,30408],{"class":177},[118,155760,155761],{"class":128},"(age ",[118,155763,609],{"class":124},[118,155765,25123],{"class":177},[118,155767,135],{"class":128},[15,155769,155770],{},"输入得到的内容永远是字符串：",[109,155772,155774],{"className":30371,"code":155773,"language":30373,"meta":39,"style":39},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[115,155775,155776,155792],{"__ignoreMap":39},[118,155777,155778,155781,155783,155785,155787,155790],{"class":120,"line":121},[118,155779,155780],{"class":128},"num ",[118,155782,174],{"class":124},[118,155784,60598],{"class":177},[118,155786,129],{"class":128},[118,155788,155789],{"class":233},"\"请输入数字:\"",[118,155791,135],{"class":128},[118,155793,155794,155796,155798,155800,155803],{"class":120,"line":40},[118,155795,30408],{"class":177},[118,155797,129],{"class":128},[118,155799,103100],{"class":177},[118,155801,155802],{"class":128},"(num))  ",[118,155804,155805],{"class":187},"# str\n",[15,155807,155808],{},"如果要做数学运算，必须转换：",[109,155810,155812],{"className":30371,"code":155811,"language":30373,"meta":39,"style":39},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[115,155813,155814,155832],{"__ignoreMap":39},[118,155815,155816,155818,155820,155822,155824,155826,155828,155830],{"class":120,"line":121},[118,155817,155780],{"class":128},[118,155819,174],{"class":124},[118,155821,2386],{"class":177},[118,155823,129],{"class":128},[118,155825,53814],{"class":177},[118,155827,129],{"class":128},[118,155829,155789],{"class":233},[118,155831,30490],{"class":128},[118,155833,155834,155836,155838,155840,155842],{"class":120,"line":40},[118,155835,30408],{"class":177},[118,155837,45612],{"class":128},[118,155839,609],{"class":124},[118,155841,2042],{"class":177},[118,155843,135],{"class":128},[15,155845,155846],{},"常见错误：",[109,155848,155850],{"className":30371,"code":155849,"language":30373,"meta":39,"style":39},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[115,155851,155852,155865],{"__ignoreMap":39},[118,155853,155854,155856,155858,155860,155862],{"class":120,"line":121},[118,155855,132],{"class":177},[118,155857,129],{"class":128},[118,155859,155705],{"class":233},[118,155861,155654],{"class":128},[118,155863,155864],{"class":187},"# 错误\n",[118,155866,155867,155869,155871,155874,155877],{"class":120,"line":40},[118,155868,132],{"class":177},[118,155870,129],{"class":128},[118,155872,155873],{"class":233},"\"abc\"",[118,155875,155876],{"class":128},")    ",[118,155878,155864],{"class":187},[15,155880,155881],{},"正确写法：",[109,155883,155885],{"className":30371,"code":155884,"language":30373,"meta":39,"style":39},"num = float(\"3.14\")\n",[115,155886,155887],{"__ignoreMap":39},[118,155888,155889,155891,155893,155895,155897,155899],{"class":120,"line":121},[118,155890,155780],{"class":128},[118,155892,174],{"class":124},[118,155894,109790],{"class":177},[118,155896,129],{"class":128},[118,155898,155705],{"class":233},[118,155900,135],{"class":128},[60,155902,155904],{"id":155903},"_27-运算符","2.7 运算符",[89,155906,155908],{"id":155907},"_271-算术运算符","2.7.1 算术运算符",[266,155910,155911,155922],{},[269,155912,155913],{},[272,155914,155915,155918,155920],{},[275,155916,155917],{},"运算符",[275,155919,25862],{},[275,155921,27485],{},[313,155923,155924,155938,155952,155966,155980,155994,156008],{},[272,155925,155926,155930,155933],{},[318,155927,155928],{},[115,155929,609],{},[318,155931,155932],{},"加法",[318,155934,155935],{},[115,155936,155937],{},"1 + 2",[272,155939,155940,155944,155947],{},[318,155941,155942],{},[115,155943,660],{},[318,155945,155946],{},"减法",[318,155948,155949],{},[115,155950,155951],{},"5 - 3",[272,155953,155954,155958,155961],{},[318,155955,155956],{},[115,155957,583],{},[318,155959,155960],{},"乘法",[318,155962,155963],{},[115,155964,155965],{},"2 * 3",[272,155967,155968,155972,155975],{},[318,155969,155970],{},[115,155971,712],{},[318,155973,155974],{},"除法，结果是浮点数",[318,155976,155977],{},[115,155978,155979],{},"5 \u002F 2",[272,155981,155982,155986,155989],{},[318,155983,155984],{},[115,155985,33322],{},[318,155987,155988],{},"整除",[318,155990,155991],{},[115,155992,155993],{},"5 \u002F\u002F 2",[272,155995,155996,156000,156003],{},[318,155997,155998],{},[115,155999,456],{},[318,156001,156002],{},"取余",[318,156004,156005],{},[115,156006,156007],{},"5 % 2",[272,156009,156010,156014,156017],{},[318,156011,156012],{},[115,156013,10666],{},[318,156015,156016],{},"幂运算",[318,156018,156019],{},[115,156020,156021],{},"2 ** 3",[15,156023,15140],{},[109,156025,156027],{"className":30371,"code":156026,"language":30373,"meta":39,"style":39},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[115,156028,156029,156047,156064,156081],{"__ignoreMap":39},[118,156030,156031,156033,156035,156037,156040,156042,156044],{"class":120,"line":121},[118,156032,30408],{"class":177},[118,156034,129],{"class":128},[118,156036,447],{"class":177},[118,156038,156039],{"class":124}," \u002F",[118,156041,14760],{"class":177},[118,156043,155654],{"class":128},[118,156045,156046],{"class":187},"# 2.5\n",[118,156048,156049,156051,156053,156055,156058,156060,156062],{"class":120,"line":40},[118,156050,30408],{"class":177},[118,156052,129],{"class":128},[118,156054,447],{"class":177},[118,156056,156057],{"class":124}," \u002F\u002F",[118,156059,14760],{"class":177},[118,156061,45801],{"class":128},[118,156063,155657],{"class":187},[118,156065,156066,156068,156070,156072,156075,156077,156079],{"class":120,"line":1183},[118,156067,30408],{"class":177},[118,156069,129],{"class":128},[118,156071,447],{"class":177},[118,156073,156074],{"class":124}," %",[118,156076,14760],{"class":177},[118,156078,155654],{"class":128},[118,156080,155674],{"class":187},[118,156082,156083,156085,156087,156089,156092,156094,156096],{"class":120,"line":1198},[118,156084,30408],{"class":177},[118,156086,129],{"class":128},[118,156088,206],{"class":177},[118,156090,156091],{"class":124}," **",[118,156093,78063],{"class":177},[118,156095,45801],{"class":128},[118,156097,156098],{"class":187},"# 8\n",[89,156100,156102],{"id":156101},"_272-赋值运算符","2.7.2 赋值运算符",[109,156104,156106],{"className":30371,"code":156105,"language":30373,"meta":39,"style":39},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[115,156107,156108,156116,156124,156132,156140],{"__ignoreMap":39},[118,156109,156110,156112,156114],{"class":120,"line":121},[118,156111,155780],{"class":128},[118,156113,174],{"class":124},[118,156115,58421],{"class":177},[118,156117,156118,156120,156122],{"class":120,"line":40},[118,156119,155780],{"class":128},[118,156121,9482],{"class":124},[118,156123,54420],{"class":177},[118,156125,156126,156128,156130],{"class":120,"line":1183},[118,156127,155780],{"class":128},[118,156129,150245],{"class":124},[118,156131,47716],{"class":177},[118,156133,156134,156136,156138],{"class":120,"line":1198},[118,156135,155780],{"class":128},[118,156137,137141],{"class":124},[118,156139,120029],{"class":177},[118,156141,156142,156144,156147],{"class":120,"line":1204},[118,156143,155780],{"class":128},[118,156145,156146],{"class":124},"\u002F=",[118,156148,47716],{"class":177},[15,156150,156151],{},"等价关系：",[109,156153,156155],{"className":30371,"code":156154,"language":30373,"meta":39,"style":39},"num += 1\nnum = num + 1\n",[115,156156,156157,156165],{"__ignoreMap":39},[118,156158,156159,156161,156163],{"class":120,"line":121},[118,156160,155780],{"class":128},[118,156162,9482],{"class":124},[118,156164,55692],{"class":177},[118,156166,156167,156169,156171,156174,156176],{"class":120,"line":40},[118,156168,155780],{"class":128},[118,156170,174],{"class":124},[118,156172,156173],{"class":128}," num ",[118,156175,609],{"class":124},[118,156177,55692],{"class":177},[15,156179,156180,156181,101011,156184,28378],{},"Python 没有 ",[115,156182,156183],{},"num++",[115,156185,156186],{},"num--",[89,156188,156190],{"id":156189},"_273-比较运算符","2.7.3 比较运算符",[15,156192,156193],{},"比较运算结果是布尔值。",[109,156195,156197],{"className":30371,"code":156196,"language":30373,"meta":39,"style":39},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[115,156198,156199,156213,156228,156242],{"__ignoreMap":39},[118,156200,156201,156203,156205,156207,156209,156211],{"class":120,"line":121},[118,156202,30408],{"class":177},[118,156204,129],{"class":128},[118,156206,574],{"class":177},[118,156208,26215],{"class":124},[118,156210,2152],{"class":177},[118,156212,135],{"class":128},[118,156214,156215,156217,156219,156221,156224,156226],{"class":120,"line":40},[118,156216,30408],{"class":177},[118,156218,129],{"class":128},[118,156220,574],{"class":177},[118,156222,156223],{"class":124}," >=",[118,156225,2042],{"class":177},[118,156227,135],{"class":128},[118,156229,156230,156232,156234,156236,156238,156240],{"class":120,"line":1183},[118,156231,30408],{"class":177},[118,156233,129],{"class":128},[118,156235,574],{"class":177},[118,156237,101552],{"class":124},[118,156239,2087],{"class":177},[118,156241,135],{"class":128},[118,156243,156244,156246,156248,156250,156253,156255],{"class":120,"line":1198},[118,156245,30408],{"class":177},[118,156247,129],{"class":128},[118,156249,574],{"class":177},[118,156251,156252],{"class":124}," !=",[118,156254,2087],{"class":177},[118,156256,135],{"class":128},[15,156258,156259,156260,156262,156263,28378],{},"注意：判断相等用 ",[115,156261,2953],{},"，赋值用 ",[115,156264,174],{},[109,156266,156268],{"className":30371,"code":156267,"language":30373,"meta":39,"style":39},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[115,156269,156270,156282],{"__ignoreMap":39},[118,156271,156272,156274,156276,156279],{"class":120,"line":121},[118,156273,146539],{"class":128},[118,156275,174],{"class":124},[118,156277,156278],{"class":177}," 18",[118,156280,156281],{"class":187},"       # 赋值\n",[118,156283,156284,156286,156288,156290],{"class":120,"line":40},[118,156285,146539],{"class":128},[118,156287,2953],{"class":124},[118,156289,156278],{"class":177},[118,156291,156292],{"class":187},"      # 判断是否相等\n",[89,156294,156296],{"id":156295},"_274-逻辑运算符","2.7.4 逻辑运算符",[266,156298,156299,156307],{},[269,156300,156301],{},[272,156302,156303,156305],{},[275,156304,155917],{},[275,156306,25862],{},[313,156308,156309,156318,156327],{},[272,156310,156311,156315],{},[318,156312,156313],{},[115,156314,30455],{},[318,156316,156317],{},"并且",[272,156319,156320,156324],{},[318,156321,156322],{},[115,156323,115083],{},[318,156325,156326],{},"或者",[272,156328,156329,156334],{},[318,156330,156331],{},[115,156332,156333],{},"not",[318,156335,156336],{},"取反",[109,156338,156340],{"className":30371,"code":156339,"language":30373,"meta":39,"style":39},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[115,156341,156342,156350,156359,156363,156378,156392],{"__ignoreMap":39},[118,156343,156344,156346,156348],{"class":120,"line":121},[118,156345,146539],{"class":128},[118,156347,174],{"class":124},[118,156349,88058],{"class":177},[118,156351,156352,156355,156357],{"class":120,"line":40},[118,156353,156354],{"class":128},"has_ticket ",[118,156356,174],{"class":124},[118,156358,153592],{"class":177},[118,156360,156361],{"class":120,"line":1183},[118,156362,2404],{"emptyLinePlaceholder":45},[118,156364,156365,156367,156369,156371,156373,156375],{"class":120,"line":1198},[118,156366,30408],{"class":177},[118,156368,155761],{"class":128},[118,156370,1714],{"class":124},[118,156372,156278],{"class":177},[118,156374,120422],{"class":124},[118,156376,156377],{"class":128}," has_ticket)\n",[118,156379,156380,156382,156384,156386,156388,156390],{"class":120,"line":1204},[118,156381,30408],{"class":177},[118,156383,155761],{"class":128},[118,156385,1038],{"class":124},[118,156387,156278],{"class":177},[118,156389,114194],{"class":124},[118,156391,156377],{"class":128},[118,156393,156394,156396,156398,156400],{"class":120,"line":1218},[118,156395,30408],{"class":177},[118,156397,129],{"class":128},[118,156399,156333],{"class":124},[118,156401,156377],{"class":128},[60,156403,156405],{"id":156404},"_28-字符串定义","2.8 字符串定义",[15,156407,156408],{},"三种常见写法：",[109,156410,156412],{"className":30371,"code":156411,"language":30373,"meta":39,"style":39},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[115,156413,156414,156424,156433,156443],{"__ignoreMap":39},[118,156415,156416,156419,156421],{"class":120,"line":121},[118,156417,156418],{"class":128},"name1 ",[118,156420,174],{"class":124},[118,156422,156423],{"class":233}," '小明'\n",[118,156425,156426,156429,156431],{"class":120,"line":40},[118,156427,156428],{"class":128},"name2 ",[118,156430,174],{"class":124},[118,156432,149346],{"class":233},[118,156434,156435,156438,156440],{"class":120,"line":1183},[118,156436,156437],{"class":128},"text ",[118,156439,174],{"class":124},[118,156441,156442],{"class":233}," \"\"\"这是多行字符串\n",[118,156444,156445],{"class":120,"line":1198},[118,156446,156447],{"class":233},"可以换行\"\"\"\n",[15,156449,156450],{},"字符串中包含引号：",[109,156452,156454],{"className":30371,"code":156453,"language":30373,"meta":39,"style":39},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[115,156455,156456,156466,156476],{"__ignoreMap":39},[118,156457,156458,156461,156463],{"class":120,"line":121},[118,156459,156460],{"class":128},"msg ",[118,156462,174],{"class":124},[118,156464,156465],{"class":233}," \"他说:'你好'\"\n",[118,156467,156468,156471,156473],{"class":120,"line":40},[118,156469,156470],{"class":128},"msg2 ",[118,156472,174],{"class":124},[118,156474,156475],{"class":233}," '他说:\"你好\"'\n",[118,156477,156478,156481,156483,156486,156489,156492,156494],{"class":120,"line":1183},[118,156479,156480],{"class":128},"msg3 ",[118,156482,174],{"class":124},[118,156484,156485],{"class":233}," \"他说:",[118,156487,156488],{"class":177},"\\\"",[118,156490,156491],{"class":233},"你好",[118,156493,156488],{"class":177},[118,156495,25138],{"class":233},[15,156497,156498],{},"常见转义字符：",[266,156500,156501,156510],{},[269,156502,156503],{},[272,156504,156505,156508],{},[275,156506,156507],{},"写法",[275,156509,100693],{},[313,156511,156512,156522,156531,156541,156550],{},[272,156513,156514,156519],{},[318,156515,156516],{},[115,156517,156518],{},"\\n",[318,156520,156521],{},"换行",[272,156523,156524,156528],{},[318,156525,156526],{},[115,156527,1234],{},[318,156529,156530],{},"制表符",[272,156532,156533,156538],{},[318,156534,156535],{},[115,156536,156537],{},"\\\\",[318,156539,156540],{},"反斜杠",[272,156542,156543,156547],{},[318,156544,156545],{},[115,156546,156488],{},[318,156548,156549],{},"双引号",[272,156551,156552,156557],{},[318,156553,156554],{},[115,156555,156556],{},"\\'",[318,156558,156559],{},"单引号",[60,156561,156563],{"id":156562},"_29-字符串拼接","2.9 字符串拼接",[109,156565,156567],{"className":30371,"code":156566,"language":30373,"meta":39,"style":39},"name = \"小明\"\nprint(\"你好，\" + name)\n",[115,156568,156569,156577],{"__ignoreMap":39},[118,156570,156571,156573,156575],{"class":120,"line":121},[118,156572,146529],{"class":128},[118,156574,174],{"class":124},[118,156576,149346],{"class":233},[118,156578,156579,156581,156583,156586,156588],{"class":120,"line":40},[118,156580,30408],{"class":177},[118,156582,129],{"class":128},[118,156584,156585],{"class":233},"\"你好，\"",[118,156587,45559],{"class":124},[118,156589,156590],{"class":128}," name)\n",[15,156592,156593],{},"字符串只能和字符串拼接：",[109,156595,156597],{"className":30371,"code":156596,"language":30373,"meta":39,"style":39},"age = 18\nprint(\"年龄:\" + str(age))\n",[115,156598,156599,156607],{"__ignoreMap":39},[118,156600,156601,156603,156605],{"class":120,"line":121},[118,156602,146539],{"class":128},[118,156604,174],{"class":124},[118,156606,146544],{"class":177},[118,156608,156609,156611,156613,156615,156617,156619],{"class":120,"line":40},[118,156610,30408],{"class":177},[118,156612,129],{"class":128},[118,156614,146510],{"class":233},[118,156616,45559],{"class":124},[118,156618,73912],{"class":177},[118,156620,156621],{"class":128},"(age))\n",[15,156623,156624],{},"更推荐使用格式化字符串。",[60,156626,156628],{"id":156627},"_210-字符串格式化","2.10 字符串格式化",[89,156630,156632],{"id":156631},"_2101-百分号格式化","2.10.1 百分号格式化",[109,156634,156636],{"className":30371,"code":156635,"language":30373,"meta":39,"style":39},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[115,156637,156638,156646,156654,156663,156667],{"__ignoreMap":39},[118,156639,156640,156642,156644],{"class":120,"line":121},[118,156641,146529],{"class":128},[118,156643,174],{"class":124},[118,156645,149346],{"class":233},[118,156647,156648,156650,156652],{"class":120,"line":40},[118,156649,146539],{"class":128},[118,156651,174],{"class":124},[118,156653,146544],{"class":177},[118,156655,156656,156658,156660],{"class":120,"line":1183},[118,156657,155351],{"class":128},[118,156659,174],{"class":124},[118,156661,156662],{"class":177}," 95.5\n",[118,156664,156665],{"class":120,"line":1198},[118,156666,2404],{"emptyLinePlaceholder":45},[118,156668,156669,156671,156673,156676,156679,156682,156685,156688,156691,156693,156695],{"class":120,"line":1204},[118,156670,30408],{"class":177},[118,156672,129],{"class":128},[118,156674,156675],{"class":233},"\"姓名:",[118,156677,156678],{"class":177},"%s",[118,156680,156681],{"class":233}," 年龄:",[118,156683,156684],{"class":177},"%d",[118,156686,156687],{"class":233}," 分数:",[118,156689,156690],{"class":177},"%.1f",[118,156692,379],{"class":233},[118,156694,156074],{"class":124},[118,156696,156697],{"class":128}," (name, age, score))\n",[15,156699,156700],{},"常用占位符：",[266,156702,156703,156712],{},[269,156704,156705],{},[272,156706,156707,156710],{},[275,156708,156709],{},"占位符",[275,156711,25862],{},[313,156713,156714,156722,156730],{},[272,156715,156716,156720],{},[318,156717,156718],{},[115,156719,156678],{},[318,156721,155217],{},[272,156723,156724,156728],{},[318,156725,156726],{},[115,156727,156684],{},[318,156729,155195],{},[272,156731,156732,156737],{},[318,156733,156734],{},[115,156735,156736],{},"%f",[318,156738,155206],{},[15,156740,156741],{},"精度控制：",[109,156743,156745],{"className":30371,"code":156744,"language":30373,"meta":39,"style":39},"price = 12.3456\nprint(\"%.2f\" % price)\n",[115,156746,156747,156756],{"__ignoreMap":39},[118,156748,156749,156751,156753],{"class":120,"line":121},[118,156750,146674],{"class":128},[118,156752,174],{"class":124},[118,156754,156755],{"class":177}," 12.3456\n",[118,156757,156758,156760,156762,156764,156767,156769,156771],{"class":120,"line":40},[118,156759,30408],{"class":177},[118,156761,129],{"class":128},[118,156763,379],{"class":233},[118,156765,156766],{"class":177},"%.2f",[118,156768,379],{"class":233},[118,156770,156074],{"class":124},[118,156772,156773],{"class":128}," price)\n",[89,156775,156777],{"id":156776},"_2102-format方法","2.10.2 format方法",[109,156779,156781],{"className":30371,"code":156780,"language":30373,"meta":39,"style":39},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[115,156782,156783,156791,156799,156803,156822,156842],{"__ignoreMap":39},[118,156784,156785,156787,156789],{"class":120,"line":121},[118,156786,146529],{"class":128},[118,156788,174],{"class":124},[118,156790,149346],{"class":233},[118,156792,156793,156795,156797],{"class":120,"line":40},[118,156794,146539],{"class":128},[118,156796,174],{"class":124},[118,156798,146544],{"class":177},[118,156800,156801],{"class":120,"line":1183},[118,156802,2404],{"emptyLinePlaceholder":45},[118,156804,156805,156807,156809,156811,156813,156815,156817,156819],{"class":120,"line":1198},[118,156806,30408],{"class":177},[118,156808,129],{"class":128},[118,156810,156675],{"class":233},[118,156812,32452],{"class":177},[118,156814,156681],{"class":233},[118,156816,32452],{"class":177},[118,156818,379],{"class":233},[118,156820,156821],{"class":128},".format(name, age))\n",[118,156823,156824,156826,156828,156830,156833,156835,156838,156840],{"class":120,"line":1204},[118,156825,30408],{"class":177},[118,156827,129],{"class":128},[118,156829,156675],{"class":233},[118,156831,156832],{"class":177},"{0}",[118,156834,156681],{"class":233},[118,156836,156837],{"class":177},"{1}",[118,156839,379],{"class":233},[118,156841,156821],{"class":128},[118,156843,156844,156846,156848,156850,156853,156855,156858,156860,156863,156865,156867,156870,156872,156874],{"class":120,"line":1218},[118,156845,30408],{"class":177},[118,156847,129],{"class":128},[118,156849,156675],{"class":233},[118,156851,156852],{"class":177},"{name}",[118,156854,156681],{"class":233},[118,156856,156857],{"class":177},"{age}",[118,156859,379],{"class":233},[118,156861,156862],{"class":128},".format(",[118,156864,79803],{"class":5221},[118,156866,174],{"class":124},[118,156868,156869],{"class":128},"name, ",[118,156871,70214],{"class":5221},[118,156873,174],{"class":124},[118,156875,156876],{"class":128},"age))\n",[89,156878,156880],{"id":156879},"_2103-f-string","2.10.3 f-string",[15,156882,156883],{},"推荐写法：",[109,156885,156887],{"className":30371,"code":156886,"language":30373,"meta":39,"style":39},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[115,156888,156889,156897,156905,156913,156917],{"__ignoreMap":39},[118,156890,156891,156893,156895],{"class":120,"line":121},[118,156892,146529],{"class":128},[118,156894,174],{"class":124},[118,156896,149346],{"class":233},[118,156898,156899,156901,156903],{"class":120,"line":40},[118,156900,146539],{"class":128},[118,156902,174],{"class":124},[118,156904,146544],{"class":177},[118,156906,156907,156909,156911],{"class":120,"line":1183},[118,156908,155351],{"class":128},[118,156910,174],{"class":124},[118,156912,156662],{"class":177},[118,156914,156915],{"class":120,"line":1198},[118,156916,2404],{"emptyLinePlaceholder":45},[118,156918,156919,156921,156923,156925,156927,156929,156931,156933,156935,156937,156939,156941,156943,156945,156948,156951,156953,156955],{"class":120,"line":1204},[118,156920,30408],{"class":177},[118,156922,129],{"class":128},[118,156924,181],{"class":124},[118,156926,156675],{"class":233},[118,156928,1024],{"class":177},[118,156930,79803],{"class":128},[118,156932,1074],{"class":177},[118,156934,156681],{"class":233},[118,156936,1024],{"class":177},[118,156938,70214],{"class":128},[118,156940,1074],{"class":177},[118,156942,156687],{"class":233},[118,156944,1024],{"class":177},[118,156946,156947],{"class":128},"score",[118,156949,156950],{"class":124},":.1f",[118,156952,1074],{"class":177},[118,156954,379],{"class":233},[118,156956,135],{"class":128},[15,156958,156959],{},"表达式也可以放进去：",[109,156961,156963],{"className":30371,"code":156962,"language":30373,"meta":39,"style":39},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[115,156964,156965,156973,156981],{"__ignoreMap":39},[118,156966,156967,156969,156971],{"class":120,"line":121},[118,156968,146674],{"class":128},[118,156970,174],{"class":124},[118,156972,146679],{"class":177},[118,156974,156975,156977,156979],{"class":120,"line":40},[118,156976,146684],{"class":128},[118,156978,174],{"class":124},[118,156980,54420],{"class":177},[118,156982,156983,156985,156987,156989,156992,156994,156996,156998,157001,157003,157006],{"class":120,"line":1183},[118,156984,30408],{"class":177},[118,156986,129],{"class":128},[118,156988,181],{"class":124},[118,156990,156991],{"class":233},"\"总价:",[118,156993,1024],{"class":177},[118,156995,146674],{"class":128},[118,156997,583],{"class":124},[118,156999,157000],{"class":128}," count",[118,157002,1074],{"class":177},[118,157004,157005],{"class":233},"元\"",[118,157007,135],{"class":128},[60,157009,157011],{"id":157010},"_211-input输入","2.11 input输入",[15,157013,157014,157017],{},[115,157015,157016],{},"input()"," 会暂停程序，等待用户输入。",[109,157019,157021],{"className":30371,"code":157020,"language":30373,"meta":39,"style":39},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[115,157022,157023,157037],{"__ignoreMap":39},[118,157024,157025,157027,157029,157031,157033,157035],{"class":120,"line":121},[118,157026,146529],{"class":128},[118,157028,174],{"class":124},[118,157030,60598],{"class":177},[118,157032,129],{"class":128},[118,157034,152372],{"class":233},[118,157036,135],{"class":128},[118,157038,157039,157041,157043,157045,157048,157050,157052,157054,157056],{"class":120,"line":40},[118,157040,30408],{"class":177},[118,157042,129],{"class":128},[118,157044,181],{"class":124},[118,157046,157047],{"class":233},"\"你好，",[118,157049,1024],{"class":177},[118,157051,79803],{"class":128},[118,157053,1074],{"class":177},[118,157055,379],{"class":233},[118,157057,135],{"class":128},[15,157059,157060],{},"输入整数：",[109,157062,157064],{"className":30371,"code":157063,"language":30373,"meta":39,"style":39},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[115,157065,157066,157084],{"__ignoreMap":39},[118,157067,157068,157070,157072,157074,157076,157078,157080,157082],{"class":120,"line":121},[118,157069,146539],{"class":128},[118,157071,174],{"class":124},[118,157073,2386],{"class":177},[118,157075,129],{"class":128},[118,157077,53814],{"class":177},[118,157079,129],{"class":128},[118,157081,152387],{"class":233},[118,157083,30490],{"class":128},[118,157085,157086,157088,157090,157092,157095,157097,157099,157101,157104,157106],{"class":120,"line":40},[118,157087,30408],{"class":177},[118,157089,129],{"class":128},[118,157091,181],{"class":124},[118,157093,157094],{"class":233},"\"明年你",[118,157096,1024],{"class":177},[118,157098,146539],{"class":128},[118,157100,609],{"class":124},[118,157102,157103],{"class":177}," 1}",[118,157105,149397],{"class":233},[118,157107,135],{"class":128},[15,157109,157110],{},"输入小数：",[109,157112,157114],{"className":30371,"code":157113,"language":30373,"meta":39,"style":39},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[115,157115,157116,157135],{"__ignoreMap":39},[118,157117,157118,157120,157122,157124,157126,157128,157130,157133],{"class":120,"line":121},[118,157119,155324],{"class":128},[118,157121,174],{"class":124},[118,157123,109790],{"class":177},[118,157125,129],{"class":128},[118,157127,53814],{"class":177},[118,157129,129],{"class":128},[118,157131,157132],{"class":233},"\"请输入身高:\"",[118,157134,30490],{"class":128},[118,157136,157137,157139,157141,157143,157146,157148,157150,157153,157155,157158],{"class":120,"line":40},[118,157138,30408],{"class":177},[118,157140,129],{"class":128},[118,157142,181],{"class":124},[118,157144,157145],{"class":233},"\"身高:",[118,157147,1024],{"class":177},[118,157149,24986],{"class":128},[118,157151,157152],{"class":124},":.2f",[118,157154,1074],{"class":177},[118,157156,157157],{"class":233},"米\"",[118,157159,135],{"class":128},[60,157161,157163],{"id":157162},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[15,157165,123285],{},[72,157167,157168,157171,157174,157177],{},[75,157169,157170],{},"输入商品单价。",[75,157172,157173],{},"输入购买数量。",[75,157175,157176],{},"输入折扣，例如 0.8 表示八折。",[75,157178,157179],{},"输出最终金额，保留两位小数。",[15,157181,10040],{},[109,157183,157185],{"className":30371,"code":157184,"language":30373,"meta":39,"style":39},"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",[115,157186,157187,157206,157225,157245,157249,157269,157273,157296,157317,157339],{"__ignoreMap":39},[118,157188,157189,157191,157193,157195,157197,157199,157201,157204],{"class":120,"line":121},[118,157190,146674],{"class":128},[118,157192,174],{"class":124},[118,157194,109790],{"class":177},[118,157196,129],{"class":128},[118,157198,53814],{"class":177},[118,157200,129],{"class":128},[118,157202,157203],{"class":233},"\"请输入商品单价:\"",[118,157205,30490],{"class":128},[118,157207,157208,157210,157212,157214,157216,157218,157220,157223],{"class":120,"line":40},[118,157209,146684],{"class":128},[118,157211,174],{"class":124},[118,157213,2386],{"class":177},[118,157215,129],{"class":128},[118,157217,53814],{"class":177},[118,157219,129],{"class":128},[118,157221,157222],{"class":233},"\"请输入购买数量:\"",[118,157224,30490],{"class":128},[118,157226,157227,157230,157232,157234,157236,157238,157240,157243],{"class":120,"line":1183},[118,157228,157229],{"class":128},"discount ",[118,157231,174],{"class":124},[118,157233,109790],{"class":177},[118,157235,129],{"class":128},[118,157237,53814],{"class":177},[118,157239,129],{"class":128},[118,157241,157242],{"class":233},"\"请输入折扣:\"",[118,157244,30490],{"class":128},[118,157246,157247],{"class":120,"line":1198},[118,157248,2404],{"emptyLinePlaceholder":45},[118,157250,157251,157254,157256,157259,157261,157264,157266],{"class":120,"line":1204},[118,157252,157253],{"class":128},"total ",[118,157255,174],{"class":124},[118,157257,157258],{"class":128}," price ",[118,157260,583],{"class":124},[118,157262,157263],{"class":128}," count ",[118,157265,583],{"class":124},[118,157267,157268],{"class":128}," discount\n",[118,157270,157271],{"class":120,"line":1218},[118,157272,2404],{"emptyLinePlaceholder":45},[118,157274,157275,157277,157279,157281,157284,157286,157288,157290,157292,157294],{"class":120,"line":1224},[118,157276,30408],{"class":177},[118,157278,129],{"class":128},[118,157280,181],{"class":124},[118,157282,157283],{"class":233},"\"商品单价:",[118,157285,1024],{"class":177},[118,157287,79808],{"class":128},[118,157289,157152],{"class":124},[118,157291,1074],{"class":177},[118,157293,379],{"class":233},[118,157295,135],{"class":128},[118,157297,157298,157300,157302,157304,157307,157309,157311,157313,157315],{"class":120,"line":1315},[118,157299,30408],{"class":177},[118,157301,129],{"class":128},[118,157303,181],{"class":124},[118,157305,157306],{"class":233},"\"购买数量:",[118,157308,1024],{"class":177},[118,157310,84427],{"class":128},[118,157312,1074],{"class":177},[118,157314,379],{"class":233},[118,157316,135],{"class":128},[118,157318,157319,157321,157323,157325,157328,157330,157333,157335,157337],{"class":120,"line":1321},[118,157320,30408],{"class":177},[118,157322,129],{"class":128},[118,157324,181],{"class":124},[118,157326,157327],{"class":233},"\"折扣:",[118,157329,1024],{"class":177},[118,157331,157332],{"class":128},"discount",[118,157334,1074],{"class":177},[118,157336,379],{"class":233},[118,157338,135],{"class":128},[118,157340,157341,157343,157345,157347,157350,157352,157355,157357,157359,157361],{"class":120,"line":1333},[118,157342,30408],{"class":177},[118,157344,129],{"class":128},[118,157346,181],{"class":124},[118,157348,157349],{"class":233},"\"应付金额:",[118,157351,1024],{"class":177},[118,157353,157354],{"class":128},"total",[118,157356,157152],{"class":124},[118,157358,1074],{"class":177},[118,157360,157005],{"class":233},[118,157362,135],{"class":128},[60,157364,157366],{"id":157365},"_213-易错点","2.13 易错点",[72,157368,157369,157374,157380,157388,157391],{},[75,157370,157371,157373],{},[115,157372,157016],{}," 的结果是字符串，做运算前要转换。",[75,157375,157376,157377,28378],{},"字符串拼接时，数字要先 ",[115,157378,157379],{},"str()",[75,157381,157382,157384,157385,157387],{},[115,157383,174],{}," 是赋值，",[115,157386,2953],{}," 是比较。",[75,157389,157390],{},"Python 没有自增自减运算符。",[75,157392,157393],{},"浮点数计算可能有精度误差：",[109,157395,157397],{"className":30371,"code":157396,"language":30373,"meta":39,"style":39},"print(0.1 + 0.2)\n",[115,157398,157399],{"__ignoreMap":39},[118,157400,157401,157403,157405,157407,157409,157412],{"class":120,"line":121},[118,157402,30408],{"class":177},[118,157404,129],{"class":128},[118,157406,86203],{"class":177},[118,157408,45559],{"class":124},[118,157410,157411],{"class":177}," 0.2",[118,157413,135],{"class":128},[15,157415,157416,157417,157420],{},"金额计算如果要求严格，可以后续学习 ",[115,157418,157419],{},"decimal"," 模块。",[60,157422,157424],{"id":157423},"_214-本章练习","2.14 本章练习",[72,157426,157427,157430,157433,157436,157439],{},[75,157428,157429],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[75,157431,157432],{},"输入圆的半径，计算面积，保留两位小数。",[75,157434,157435],{},"输入工资和奖金，计算总收入。",[75,157437,157438],{},"输入摄氏温度，转换为华氏温度。",[75,157440,157441],{},"写一个 BMI 计算程序：",[109,157443,157446],{"className":157444,"code":157445,"language":5192,"meta":39},[5190],"BMI = 体重kg \u002F 身高m ** 2\n",[115,157447,157445],{"__ignoreMap":39},[5131,157449,157450],{},"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":39,"searchDepth":40,"depth":40,"links":157452},[157453,157454,157455,157456,157457,157458,157459,157465,157466,157467,157472,157473,157474,157475],{"id":155014,"depth":40,"text":155015},{"id":155123,"depth":40,"text":155124},{"id":155294,"depth":40,"text":155295},{"id":155371,"depth":40,"text":155372},{"id":50724,"depth":40,"text":50725},{"id":155677,"depth":40,"text":155678},{"id":155903,"depth":40,"text":155904,"children":157460},[157461,157462,157463,157464],{"id":155907,"depth":1183,"text":155908},{"id":156101,"depth":1183,"text":156102},{"id":156189,"depth":1183,"text":156190},{"id":156295,"depth":1183,"text":156296},{"id":156404,"depth":40,"text":156405},{"id":156562,"depth":40,"text":156563},{"id":156627,"depth":40,"text":156628,"children":157468},[157469,157470,157471],{"id":156631,"depth":1183,"text":156632},{"id":156776,"depth":1183,"text":156777},{"id":156879,"depth":1183,"text":156880},{"id":157010,"depth":40,"text":157011},{"id":157162,"depth":40,"text":157163},{"id":157365,"depth":40,"text":157366},{"id":157423,"depth":40,"text":157424},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155006,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157482,"title":157483,"body":157484,"description":42,"extension":43,"meta":159120,"navigation":45,"path":159121,"seo":159122,"stem":159123,"__hash__":159124},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157485,"toc":159101},[157486,157489,157493,157496,157511,157514,157542,157546,157596,157598,157614,157617,157643,157646,157650,157717,157720,157736,157740,157743,157861,157864,157871,157920,157926,157930,157933,158046,158049,158053,158057,158060,158110,158114,158117,158167,158171,158174,158212,158216,158219,158265,158268,158303,158307,158312,158315,158361,158363,158430,158434,158440,158551,158560,158564,158566,158577,158579,158745,158749,158751,158765,158767,158981,158985,159004,159021,159024,159070,159074,159098],[10,157487,157483],{"id":157488},"_3-判断语句",[60,157490,157492],{"id":157491},"_31-布尔值","3.1 布尔值",[15,157494,157495],{},"判断语句依赖布尔值：",[109,157497,157499],{"className":30371,"code":157498,"language":30373,"meta":39,"style":39},"True\nFalse\n",[115,157500,157501,157506],{"__ignoreMap":39},[118,157502,157503],{"class":120,"line":121},[118,157504,157505],{"class":177},"True\n",[118,157507,157508],{"class":120,"line":40},[118,157509,157510],{"class":177},"False\n",[15,157512,157513],{},"比较表达式会产生布尔值：",[109,157515,157517],{"className":30371,"code":157516,"language":30373,"meta":39,"style":39},"age = 18\nprint(age >= 18)  # True\n",[115,157518,157519,157527],{"__ignoreMap":39},[118,157520,157521,157523,157525],{"class":120,"line":121},[118,157522,146539],{"class":128},[118,157524,174],{"class":124},[118,157526,146544],{"class":177},[118,157528,157529,157531,157533,157535,157537,157539],{"class":120,"line":40},[118,157530,30408],{"class":177},[118,157532,155761],{"class":128},[118,157534,1714],{"class":124},[118,157536,156278],{"class":177},[118,157538,45801],{"class":128},[118,157540,157541],{"class":187},"# True\n",[60,157543,157545],{"id":157544},"_32-if基础语法","3.2 if基础语法",[109,157547,157549],{"className":30371,"code":157548,"language":30373,"meta":39,"style":39},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[115,157550,157551,157569,157573,157585],{"__ignoreMap":39},[118,157552,157553,157555,157557,157559,157561,157563,157565,157567],{"class":120,"line":121},[118,157554,146539],{"class":128},[118,157556,174],{"class":124},[118,157558,2386],{"class":177},[118,157560,129],{"class":128},[118,157562,53814],{"class":177},[118,157564,129],{"class":128},[118,157566,152387],{"class":233},[118,157568,30490],{"class":128},[118,157570,157571],{"class":120,"line":40},[118,157572,2404],{"emptyLinePlaceholder":45},[118,157574,157575,157577,157579,157581,157583],{"class":120,"line":1183},[118,157576,1535],{"class":124},[118,157578,15712],{"class":128},[118,157580,1714],{"class":124},[118,157582,156278],{"class":177},[118,157584,3743],{"class":128},[118,157586,157587,157589,157591,157594],{"class":120,"line":1198},[118,157588,31292],{"class":177},[118,157590,129],{"class":128},[118,157592,157593],{"class":233},"\"可以进入网吧\"",[118,157595,135],{"class":128},[15,157597,9030],{},[72,157599,157600,157605,157608,157611],{},[75,157601,157602,157604],{},[115,157603,1535],{}," 后面是条件表达式。",[75,157606,157607],{},"条件后面必须写冒号。",[75,157609,157610],{},"条件成立时执行缩进代码块。",[75,157612,157613],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[15,157615,157616],{},"错误示例：",[109,157618,157620],{"className":30371,"code":157619,"language":30373,"meta":39,"style":39},"if age >= 18\n    print(\"可以进入\")\n",[115,157621,157622,157632],{"__ignoreMap":39},[118,157623,157624,157626,157628,157630],{"class":120,"line":121},[118,157625,1535],{"class":124},[118,157627,15712],{"class":128},[118,157629,1714],{"class":124},[118,157631,146544],{"class":177},[118,157633,157634,157636,157638,157641],{"class":120,"line":40},[118,157635,31292],{"class":177},[118,157637,129],{"class":128},[118,157639,157640],{"class":233},"\"可以进入\"",[118,157642,135],{"class":128},[15,157644,157645],{},"缺少冒号。",[60,157647,157649],{"id":157648},"_33-if-else","3.3 if else",[109,157651,157653],{"className":30371,"code":157652,"language":30373,"meta":39,"style":39},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[115,157654,157655,157673,157677,157689,157700,157706],{"__ignoreMap":39},[118,157656,157657,157659,157661,157663,157665,157667,157669,157671],{"class":120,"line":121},[118,157658,146539],{"class":128},[118,157660,174],{"class":124},[118,157662,2386],{"class":177},[118,157664,129],{"class":128},[118,157666,53814],{"class":177},[118,157668,129],{"class":128},[118,157670,152387],{"class":233},[118,157672,30490],{"class":128},[118,157674,157675],{"class":120,"line":40},[118,157676,2404],{"emptyLinePlaceholder":45},[118,157678,157679,157681,157683,157685,157687],{"class":120,"line":1183},[118,157680,1535],{"class":124},[118,157682,15712],{"class":128},[118,157684,1714],{"class":124},[118,157686,156278],{"class":177},[118,157688,3743],{"class":128},[118,157690,157691,157693,157695,157698],{"class":120,"line":1198},[118,157692,31292],{"class":177},[118,157694,129],{"class":128},[118,157696,157697],{"class":233},"\"成年人\"",[118,157699,135],{"class":128},[118,157701,157702,157704],{"class":120,"line":1204},[118,157703,1705],{"class":124},[118,157705,3743],{"class":128},[118,157707,157708,157710,157712,157715],{"class":120,"line":1218},[118,157709,31292],{"class":177},[118,157711,129],{"class":128},[118,157713,157714],{"class":233},"\"未成年人\"",[118,157716,135],{"class":128},[15,157718,157719],{},"执行逻辑：",[72,157721,157722,157728,157733],{},[75,157723,157724,157725,157727],{},"条件成立，执行 ",[115,157726,1535],{}," 代码块。",[75,157729,157730,157731,157727],{},"条件不成立，执行 ",[115,157732,1705],{},[75,157734,157735],{},"两个代码块只会执行其中一个。",[60,157737,157739],{"id":157738},"_34-if-elif-else","3.4 if elif else",[15,157741,157742],{},"多条件判断：",[109,157744,157746],{"className":30371,"code":157745,"language":30373,"meta":39,"style":39},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[115,157747,157748,157766,157770,157784,157795,157809,157820,157833,157844,157850],{"__ignoreMap":39},[118,157749,157750,157752,157754,157756,157758,157760,157762,157764],{"class":120,"line":121},[118,157751,155351],{"class":128},[118,157753,174],{"class":124},[118,157755,2386],{"class":177},[118,157757,129],{"class":128},[118,157759,53814],{"class":177},[118,157761,129],{"class":128},[118,157763,152402],{"class":233},[118,157765,30490],{"class":128},[118,157767,157768],{"class":120,"line":40},[118,157769,2404],{"emptyLinePlaceholder":45},[118,157771,157772,157774,157777,157779,157782],{"class":120,"line":1183},[118,157773,1535],{"class":124},[118,157775,157776],{"class":128}," score ",[118,157778,1714],{"class":124},[118,157780,157781],{"class":177}," 90",[118,157783,3743],{"class":128},[118,157785,157786,157788,157790,157793],{"class":120,"line":1198},[118,157787,31292],{"class":177},[118,157789,129],{"class":128},[118,157791,157792],{"class":233},"\"优秀\"",[118,157794,135],{"class":128},[118,157796,157797,157800,157802,157804,157807],{"class":120,"line":1204},[118,157798,157799],{"class":124},"elif",[118,157801,157776],{"class":128},[118,157803,1714],{"class":124},[118,157805,157806],{"class":177}," 80",[118,157808,3743],{"class":128},[118,157810,157811,157813,157815,157818],{"class":120,"line":1218},[118,157812,31292],{"class":177},[118,157814,129],{"class":128},[118,157816,157817],{"class":233},"\"良好\"",[118,157819,135],{"class":128},[118,157821,157822,157824,157826,157828,157831],{"class":120,"line":1224},[118,157823,157799],{"class":124},[118,157825,157776],{"class":128},[118,157827,1714],{"class":124},[118,157829,157830],{"class":177}," 60",[118,157832,3743],{"class":128},[118,157834,157835,157837,157839,157842],{"class":120,"line":1315},[118,157836,31292],{"class":177},[118,157838,129],{"class":128},[118,157840,157841],{"class":233},"\"及格\"",[118,157843,135],{"class":128},[118,157845,157846,157848],{"class":120,"line":1321},[118,157847,1705],{"class":124},[118,157849,3743],{"class":128},[118,157851,157852,157854,157856,157859],{"class":120,"line":1333},[118,157853,31292],{"class":177},[118,157855,129],{"class":128},[118,157857,157858],{"class":233},"\"不及格\"",[118,157860,135],{"class":128},[15,157862,157863],{},"注意判断顺序很重要。",[15,157865,157866,157867,157870],{},"如果把 ",[115,157868,157869],{},"score >= 60"," 放在最前面：",[109,157872,157874],{"className":30371,"code":157873,"language":30373,"meta":39,"style":39},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[115,157875,157876,157888,157898,157910],{"__ignoreMap":39},[118,157877,157878,157880,157882,157884,157886],{"class":120,"line":121},[118,157879,1535],{"class":124},[118,157881,157776],{"class":128},[118,157883,1714],{"class":124},[118,157885,157830],{"class":177},[118,157887,3743],{"class":128},[118,157889,157890,157892,157894,157896],{"class":120,"line":40},[118,157891,31292],{"class":177},[118,157893,129],{"class":128},[118,157895,157841],{"class":233},[118,157897,135],{"class":128},[118,157899,157900,157902,157904,157906,157908],{"class":120,"line":1183},[118,157901,157799],{"class":124},[118,157903,157776],{"class":128},[118,157905,1714],{"class":124},[118,157907,157781],{"class":177},[118,157909,3743],{"class":128},[118,157911,157912,157914,157916,157918],{"class":120,"line":1198},[118,157913,31292],{"class":177},[118,157915,129],{"class":128},[118,157917,157792],{"class":233},[118,157919,135],{"class":128},[15,157921,157922,157923,157925],{},"成绩 95 会先满足 ",[115,157924,157869],{},"，后面的优秀分支就不会执行。",[60,157927,157929],{"id":157928},"_35-判断语句嵌套","3.5 判断语句嵌套",[15,157931,157932],{},"嵌套判断就是在一个判断内部再写判断。",[109,157934,157936],{"className":30371,"code":157935,"language":30373,"meta":39,"style":39},"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",[115,157937,157938,157956,157971,157975,157987,158001,158011,158018,158029,158035],{"__ignoreMap":39},[118,157939,157940,157942,157944,157946,157948,157950,157952,157954],{"class":120,"line":121},[118,157941,146539],{"class":128},[118,157943,174],{"class":124},[118,157945,2386],{"class":177},[118,157947,129],{"class":128},[118,157949,53814],{"class":177},[118,157951,129],{"class":128},[118,157953,152387],{"class":233},[118,157955,30490],{"class":128},[118,157957,157958,157960,157962,157964,157966,157969],{"class":120,"line":40},[118,157959,156354],{"class":128},[118,157961,174],{"class":124},[118,157963,60598],{"class":177},[118,157965,129],{"class":128},[118,157967,157968],{"class":233},"\"是否有票(y\u002Fn):\"",[118,157970,135],{"class":128},[118,157972,157973],{"class":120,"line":1183},[118,157974,2404],{"emptyLinePlaceholder":45},[118,157976,157977,157979,157981,157983,157985],{"class":120,"line":1198},[118,157978,1535],{"class":124},[118,157980,15712],{"class":128},[118,157982,1714],{"class":124},[118,157984,156278],{"class":177},[118,157986,3743],{"class":128},[118,157988,157989,157991,157994,157996,157999],{"class":120,"line":1204},[118,157990,3105],{"class":124},[118,157992,157993],{"class":128}," has_ticket ",[118,157995,2953],{"class":124},[118,157997,157998],{"class":233}," \"y\"",[118,158000,3743],{"class":128},[118,158002,158003,158005,158007,158009],{"class":120,"line":1218},[118,158004,32444],{"class":177},[118,158006,129],{"class":128},[118,158008,157640],{"class":233},[118,158010,135],{"class":128},[118,158012,158013,158016],{"class":120,"line":1224},[118,158014,158015],{"class":124},"    else",[118,158017,3743],{"class":128},[118,158019,158020,158022,158024,158027],{"class":120,"line":1315},[118,158021,32444],{"class":177},[118,158023,129],{"class":128},[118,158025,158026],{"class":233},"\"请先买票\"",[118,158028,135],{"class":128},[118,158030,158031,158033],{"class":120,"line":1321},[118,158032,1705],{"class":124},[118,158034,3743],{"class":128},[118,158036,158037,158039,158041,158044],{"class":120,"line":1333},[118,158038,31292],{"class":177},[118,158040,129],{"class":128},[118,158042,158043],{"class":233},"\"未成年人禁止进入\"",[118,158045,135],{"class":128},[15,158047,158048],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[60,158050,158052],{"id":158051},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[89,158054,158056],{"id":158055},"_361-and","3.6.1 and",[15,158058,158059],{},"两个条件都成立才成立。",[109,158061,158063],{"className":30371,"code":158062,"language":30373,"meta":39,"style":39},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[115,158064,158065,158073,158081,158085,158100],{"__ignoreMap":39},[118,158066,158067,158069,158071],{"class":120,"line":121},[118,158068,146539],{"class":128},[118,158070,174],{"class":124},[118,158072,88058],{"class":177},[118,158074,158075,158077,158079],{"class":120,"line":40},[118,158076,156354],{"class":128},[118,158078,174],{"class":124},[118,158080,153592],{"class":177},[118,158082,158083],{"class":120,"line":1183},[118,158084,2404],{"emptyLinePlaceholder":45},[118,158086,158087,158089,158091,158093,158095,158097],{"class":120,"line":1198},[118,158088,1535],{"class":124},[118,158090,15712],{"class":128},[118,158092,1714],{"class":124},[118,158094,156278],{"class":177},[118,158096,120422],{"class":124},[118,158098,158099],{"class":128}," has_ticket:\n",[118,158101,158102,158104,158106,158108],{"class":120,"line":1204},[118,158103,31292],{"class":177},[118,158105,129],{"class":128},[118,158107,157640],{"class":233},[118,158109,135],{"class":128},[89,158111,158113],{"id":158112},"_362-or","3.6.2 or",[15,158115,158116],{},"只要一个条件成立就成立。",[109,158118,158120],{"className":30371,"code":158119,"language":30373,"meta":39,"style":39},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[115,158121,158122,158131,158140,158144,158156],{"__ignoreMap":39},[118,158123,158124,158127,158129],{"class":120,"line":121},[118,158125,158126],{"class":128},"is_vip ",[118,158128,174],{"class":124},[118,158130,125800],{"class":177},[118,158132,158133,158136,158138],{"class":120,"line":40},[118,158134,158135],{"class":128},"coupon ",[118,158137,174],{"class":124},[118,158139,153592],{"class":177},[118,158141,158142],{"class":120,"line":1183},[118,158143,2404],{"emptyLinePlaceholder":45},[118,158145,158146,158148,158151,158153],{"class":120,"line":1198},[118,158147,1535],{"class":124},[118,158149,158150],{"class":128}," is_vip ",[118,158152,115083],{"class":124},[118,158154,158155],{"class":128}," coupon:\n",[118,158157,158158,158160,158162,158165],{"class":120,"line":1204},[118,158159,31292],{"class":177},[118,158161,129],{"class":128},[118,158163,158164],{"class":233},"\"可以享受优惠\"",[118,158166,135],{"class":128},[89,158168,158170],{"id":158169},"_363-not","3.6.3 not",[15,158172,158173],{},"取反。",[109,158175,158177],{"className":30371,"code":158176,"language":30373,"meta":39,"style":39},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[115,158178,158179,158188,158192,158201],{"__ignoreMap":39},[118,158180,158181,158184,158186],{"class":120,"line":121},[118,158182,158183],{"class":128},"is_closed ",[118,158185,174],{"class":124},[118,158187,125800],{"class":177},[118,158189,158190],{"class":120,"line":40},[118,158191,2404],{"emptyLinePlaceholder":45},[118,158193,158194,158196,158198],{"class":120,"line":1183},[118,158195,1535],{"class":124},[118,158197,38923],{"class":124},[118,158199,158200],{"class":128}," is_closed:\n",[118,158202,158203,158205,158207,158210],{"class":120,"line":1198},[118,158204,31292],{"class":177},[118,158206,129],{"class":128},[118,158208,158209],{"class":233},"\"店铺营业中\"",[118,158211,135],{"class":128},[60,158213,158215],{"id":158214},"_37-链式比较","3.7 链式比较",[15,158217,158218],{},"Python 支持链式比较：",[109,158220,158222],{"className":30371,"code":158221,"language":30373,"meta":39,"style":39},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[115,158223,158224,158233,158237,158254],{"__ignoreMap":39},[118,158225,158226,158228,158230],{"class":120,"line":121},[118,158227,155351],{"class":128},[118,158229,174],{"class":124},[118,158231,158232],{"class":177}," 85\n",[118,158234,158235],{"class":120,"line":40},[118,158236,2404],{"emptyLinePlaceholder":45},[118,158238,158239,158241,158243,158246,158248,158250,158252],{"class":120,"line":1183},[118,158240,1535],{"class":124},[118,158242,4097],{"class":177},[118,158244,158245],{"class":124}," \u003C=",[118,158247,157776],{"class":128},[118,158249,1592],{"class":124},[118,158251,5759],{"class":177},[118,158253,3743],{"class":128},[118,158255,158256,158258,158260,158263],{"class":120,"line":1198},[118,158257,31292],{"class":177},[118,158259,129],{"class":128},[118,158261,158262],{"class":233},"\"成绩合法\"",[118,158264,135],{"class":128},[15,158266,158267],{},"等价于：",[109,158269,158271],{"className":30371,"code":158270,"language":30373,"meta":39,"style":39},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[115,158272,158273,158293],{"__ignoreMap":39},[118,158274,158275,158277,158279,158281,158283,158285,158287,158289,158291],{"class":120,"line":121},[118,158276,1535],{"class":124},[118,158278,157776],{"class":128},[118,158280,1714],{"class":124},[118,158282,4097],{"class":177},[118,158284,120422],{"class":124},[118,158286,157776],{"class":128},[118,158288,1592],{"class":124},[118,158290,5759],{"class":177},[118,158292,3743],{"class":128},[118,158294,158295,158297,158299,158301],{"class":120,"line":40},[118,158296,31292],{"class":177},[118,158298,129],{"class":128},[118,158300,158262],{"class":233},[118,158302,135],{"class":128},[60,158304,158306],{"id":158305},"_38-真值和假值","3.8 真值和假值",[15,158308,116460,158309,158311],{},[115,158310,1535],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[15,158313,158314],{},"假值：",[109,158316,158318],{"className":30371,"code":158317,"language":30373,"meta":39,"style":39},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[115,158319,158320,158324,158329,158333,158337,158342,158346,158350,158355],{"__ignoreMap":39},[118,158321,158322],{"class":120,"line":121},[118,158323,157510],{"class":177},[118,158325,158326],{"class":120,"line":40},[118,158327,158328],{"class":177},"None\n",[118,158330,158331],{"class":120,"line":1183},[118,158332,3089],{"class":177},[118,158334,158335],{"class":120,"line":1198},[118,158336,32335],{"class":177},[118,158338,158339],{"class":120,"line":1204},[118,158340,158341],{"class":233},"\"\"\n",[118,158343,158344],{"class":120,"line":1218},[118,158345,32350],{"class":128},[118,158347,158348],{"class":120,"line":1224},[118,158349,1980],{"class":128},[118,158351,158352],{"class":120,"line":1315},[118,158353,158354],{"class":128},"{}\n",[118,158356,158357,158359],{"class":120,"line":1321},[118,158358,155283],{"class":177},[118,158360,1980],{"class":128},[15,158362,15140],{},[109,158364,158366],{"className":30371,"code":158365,"language":30373,"meta":39,"style":39},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[115,158367,158368,158382,158386,158393,158413,158419],{"__ignoreMap":39},[118,158369,158370,158372,158374,158376,158378,158380],{"class":120,"line":121},[118,158371,146529],{"class":128},[118,158373,174],{"class":124},[118,158375,60598],{"class":177},[118,158377,129],{"class":128},[118,158379,152372],{"class":233},[118,158381,135],{"class":128},[118,158383,158384],{"class":120,"line":40},[118,158385,2404],{"emptyLinePlaceholder":45},[118,158387,158388,158390],{"class":120,"line":1183},[118,158389,1535],{"class":124},[118,158391,158392],{"class":128}," name:\n",[118,158394,158395,158397,158399,158401,158403,158405,158407,158409,158411],{"class":120,"line":1198},[118,158396,31292],{"class":177},[118,158398,129],{"class":128},[118,158400,181],{"class":124},[118,158402,157047],{"class":233},[118,158404,1024],{"class":177},[118,158406,79803],{"class":128},[118,158408,1074],{"class":177},[118,158410,379],{"class":233},[118,158412,135],{"class":128},[118,158414,158415,158417],{"class":120,"line":1204},[118,158416,1705],{"class":124},[118,158418,3743],{"class":128},[118,158420,158421,158423,158425,158428],{"class":120,"line":1218},[118,158422,31292],{"class":177},[118,158424,129],{"class":128},[118,158426,158427],{"class":233},"\"姓名不能为空\"",[118,158429,135],{"class":128},[60,158431,158433],{"id":158432},"_39-match语句","3.9 match语句",[15,158435,158436,158437,158439],{},"Python 3.10 开始支持 ",[115,158438,71258],{},"。它适合处理固定选项。",[109,158441,158443],{"className":30371,"code":158442,"language":30373,"meta":39,"style":39},"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",[115,158444,158445,158461,158465,158472,158482,158493,158502,158513,158522,158533,158540],{"__ignoreMap":39},[118,158446,158447,158450,158452,158454,158456,158459],{"class":120,"line":121},[118,158448,158449],{"class":128},"command ",[118,158451,174],{"class":124},[118,158453,60598],{"class":177},[118,158455,129],{"class":128},[118,158457,158458],{"class":233},"\"请输入命令:\"",[118,158460,135],{"class":128},[118,158462,158463],{"class":120,"line":40},[118,158464,2404],{"emptyLinePlaceholder":45},[118,158466,158467,158469],{"class":120,"line":1183},[118,158468,71258],{"class":124},[118,158470,158471],{"class":128}," command:\n",[118,158473,158474,158477,158480],{"class":120,"line":1198},[118,158475,158476],{"class":124},"    case",[118,158478,158479],{"class":233}," \"start\"",[118,158481,3743],{"class":128},[118,158483,158484,158486,158488,158491],{"class":120,"line":1204},[118,158485,32444],{"class":177},[118,158487,129],{"class":128},[118,158489,158490],{"class":233},"\"启动\"",[118,158492,135],{"class":128},[118,158494,158495,158497,158500],{"class":120,"line":1218},[118,158496,158476],{"class":124},[118,158498,158499],{"class":233}," \"stop\"",[118,158501,3743],{"class":128},[118,158503,158504,158506,158508,158511],{"class":120,"line":1224},[118,158505,32444],{"class":177},[118,158507,129],{"class":128},[118,158509,158510],{"class":233},"\"停止\"",[118,158512,135],{"class":128},[118,158514,158515,158517,158520],{"class":120,"line":1315},[118,158516,158476],{"class":124},[118,158518,158519],{"class":233}," \"restart\"",[118,158521,3743],{"class":128},[118,158523,158524,158526,158528,158531],{"class":120,"line":1321},[118,158525,32444],{"class":177},[118,158527,129],{"class":128},[118,158529,158530],{"class":233},"\"重启\"",[118,158532,135],{"class":128},[118,158534,158535,158537],{"class":120,"line":1333},[118,158536,158476],{"class":124},[118,158538,158539],{"class":128}," _:\n",[118,158541,158542,158544,158546,158549],{"class":120,"line":1616},[118,158543,32444],{"class":177},[118,158545,129],{"class":128},[118,158547,158548],{"class":233},"\"未知命令\"",[118,158550,135],{"class":128},[15,158552,158553,158554,158556,158557,158559],{},"入门阶段掌握 ",[115,158555,154651],{}," 更重要，",[115,158558,71258],{}," 可以作为补充。",[60,158561,158563],{"id":158562},"_310-小案例成绩等级","3.10 小案例：成绩等级",[15,158565,123285],{},[72,158567,158568,158571,158574],{},[75,158569,158570],{},"输入成绩。",[75,158572,158573],{},"判断成绩是否合法。",[75,158575,158576],{},"输出等级。",[15,158578,10040],{},[109,158580,158582],{"className":30371,"code":158581,"language":30373,"meta":39,"style":39},"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",[115,158583,158584,158602,158606,158624,158635,158647,158658,158670,158681,158694,158705,158717,158728,158734],{"__ignoreMap":39},[118,158585,158586,158588,158590,158592,158594,158596,158598,158600],{"class":120,"line":121},[118,158587,155351],{"class":128},[118,158589,174],{"class":124},[118,158591,109790],{"class":177},[118,158593,129],{"class":128},[118,158595,53814],{"class":177},[118,158597,129],{"class":128},[118,158599,152402],{"class":233},[118,158601,30490],{"class":128},[118,158603,158604],{"class":120,"line":40},[118,158605,2404],{"emptyLinePlaceholder":45},[118,158607,158608,158610,158612,158614,158616,158618,158620,158622],{"class":120,"line":1183},[118,158609,1535],{"class":124},[118,158611,38923],{"class":124},[118,158613,4097],{"class":177},[118,158615,158245],{"class":124},[118,158617,157776],{"class":128},[118,158619,1592],{"class":124},[118,158621,5759],{"class":177},[118,158623,3743],{"class":128},[118,158625,158626,158628,158630,158633],{"class":120,"line":1198},[118,158627,31292],{"class":177},[118,158629,129],{"class":128},[118,158631,158632],{"class":233},"\"成绩不合法\"",[118,158634,135],{"class":128},[118,158636,158637,158639,158641,158643,158645],{"class":120,"line":1204},[118,158638,157799],{"class":124},[118,158640,157776],{"class":128},[118,158642,1714],{"class":124},[118,158644,157781],{"class":177},[118,158646,3743],{"class":128},[118,158648,158649,158651,158653,158656],{"class":120,"line":1218},[118,158650,31292],{"class":177},[118,158652,129],{"class":128},[118,158654,158655],{"class":233},"\"等级:A\"",[118,158657,135],{"class":128},[118,158659,158660,158662,158664,158666,158668],{"class":120,"line":1224},[118,158661,157799],{"class":124},[118,158663,157776],{"class":128},[118,158665,1714],{"class":124},[118,158667,157806],{"class":177},[118,158669,3743],{"class":128},[118,158671,158672,158674,158676,158679],{"class":120,"line":1315},[118,158673,31292],{"class":177},[118,158675,129],{"class":128},[118,158677,158678],{"class":233},"\"等级:B\"",[118,158680,135],{"class":128},[118,158682,158683,158685,158687,158689,158692],{"class":120,"line":1321},[118,158684,157799],{"class":124},[118,158686,157776],{"class":128},[118,158688,1714],{"class":124},[118,158690,158691],{"class":177}," 70",[118,158693,3743],{"class":128},[118,158695,158696,158698,158700,158703],{"class":120,"line":1333},[118,158697,31292],{"class":177},[118,158699,129],{"class":128},[118,158701,158702],{"class":233},"\"等级:C\"",[118,158704,135],{"class":128},[118,158706,158707,158709,158711,158713,158715],{"class":120,"line":1616},[118,158708,157799],{"class":124},[118,158710,157776],{"class":128},[118,158712,1714],{"class":124},[118,158714,157830],{"class":177},[118,158716,3743],{"class":128},[118,158718,158719,158721,158723,158726],{"class":120,"line":1621},[118,158720,31292],{"class":177},[118,158722,129],{"class":128},[118,158724,158725],{"class":233},"\"等级:D\"",[118,158727,135],{"class":128},[118,158729,158730,158732],{"class":120,"line":1627},[118,158731,1705],{"class":124},[118,158733,3743],{"class":128},[118,158735,158736,158738,158740,158743],{"class":120,"line":1632},[118,158737,31292],{"class":177},[118,158739,129],{"class":128},[118,158741,158742],{"class":233},"\"等级:E\"",[118,158744,135],{"class":128},[60,158746,158748],{"id":158747},"_311-小案例会员折扣","3.11 小案例：会员折扣",[15,158750,123285],{},[72,158752,158753,158756,158759,158762],{},[75,158754,158755],{},"输入消费金额。",[75,158757,158758],{},"输入会员等级，普通、银卡、金卡。",[75,158760,158761],{},"普通不打折，银卡 9 折，金卡 8 折。",[75,158763,158764],{},"满 500 再减 50。",[15,158766,10040],{},[109,158768,158770],{"className":30371,"code":158769,"language":30373,"meta":39,"style":39},"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",[115,158771,158772,158792,158808,158812,158820,158824,158838,158848,158861,158870,158883,158891,158897,158908,158912,158926,158930,158944,158954,158958],{"__ignoreMap":39},[118,158773,158774,158777,158779,158781,158783,158785,158787,158790],{"class":120,"line":121},[118,158775,158776],{"class":128},"amount ",[118,158778,174],{"class":124},[118,158780,109790],{"class":177},[118,158782,129],{"class":128},[118,158784,53814],{"class":177},[118,158786,129],{"class":128},[118,158788,158789],{"class":233},"\"请输入消费金额:\"",[118,158791,30490],{"class":128},[118,158793,158794,158797,158799,158801,158803,158806],{"class":120,"line":40},[118,158795,158796],{"class":128},"level ",[118,158798,174],{"class":124},[118,158800,60598],{"class":177},[118,158802,129],{"class":128},[118,158804,158805],{"class":233},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[118,158807,135],{"class":128},[118,158809,158810],{"class":120,"line":1183},[118,158811,2404],{"emptyLinePlaceholder":45},[118,158813,158814,158816,158818],{"class":120,"line":1198},[118,158815,157229],{"class":128},[118,158817,174],{"class":124},[118,158819,55692],{"class":177},[118,158821,158822],{"class":120,"line":1204},[118,158823,2404],{"emptyLinePlaceholder":45},[118,158825,158826,158828,158831,158833,158836],{"class":120,"line":1218},[118,158827,1535],{"class":124},[118,158829,158830],{"class":128}," level ",[118,158832,2953],{"class":124},[118,158834,158835],{"class":233}," \"银卡\"",[118,158837,3743],{"class":128},[118,158839,158840,158843,158845],{"class":120,"line":1224},[118,158841,158842],{"class":128},"    discount ",[118,158844,174],{"class":124},[118,158846,158847],{"class":177}," 0.9\n",[118,158849,158850,158852,158854,158856,158859],{"class":120,"line":1315},[118,158851,157799],{"class":124},[118,158853,158830],{"class":128},[118,158855,2953],{"class":124},[118,158857,158858],{"class":233}," \"金卡\"",[118,158860,3743],{"class":128},[118,158862,158863,158865,158867],{"class":120,"line":1321},[118,158864,158842],{"class":128},[118,158866,174],{"class":124},[118,158868,158869],{"class":177}," 0.8\n",[118,158871,158872,158874,158876,158878,158881],{"class":120,"line":1333},[118,158873,157799],{"class":124},[118,158875,158830],{"class":128},[118,158877,2953],{"class":124},[118,158879,158880],{"class":233}," \"普通\"",[118,158882,3743],{"class":128},[118,158884,158885,158887,158889],{"class":120,"line":1616},[118,158886,158842],{"class":128},[118,158888,174],{"class":124},[118,158890,55692],{"class":177},[118,158892,158893,158895],{"class":120,"line":1621},[118,158894,1705],{"class":124},[118,158896,3743],{"class":128},[118,158898,158899,158901,158903,158906],{"class":120,"line":1627},[118,158900,31292],{"class":177},[118,158902,129],{"class":128},[118,158904,158905],{"class":233},"\"会员等级输入错误，按普通会员计算\"",[118,158907,135],{"class":128},[118,158909,158910],{"class":120,"line":1632},[118,158911,2404],{"emptyLinePlaceholder":45},[118,158913,158914,158917,158919,158922,158924],{"class":120,"line":1646},[118,158915,158916],{"class":128},"pay ",[118,158918,174],{"class":124},[118,158920,158921],{"class":128}," amount ",[118,158923,583],{"class":124},[118,158925,157268],{"class":128},[118,158927,158928],{"class":120,"line":1651},[118,158929,2404],{"emptyLinePlaceholder":45},[118,158931,158932,158934,158937,158939,158942],{"class":120,"line":1657},[118,158933,1535],{"class":124},[118,158935,158936],{"class":128}," pay ",[118,158938,1714],{"class":124},[118,158940,158941],{"class":177}," 500",[118,158943,3743],{"class":128},[118,158945,158946,158949,158951],{"class":120,"line":1678},[118,158947,158948],{"class":128},"    pay ",[118,158950,150245],{"class":124},[118,158952,158953],{"class":177}," 50\n",[118,158955,158956],{"class":120,"line":1683},[118,158957,2404],{"emptyLinePlaceholder":45},[118,158959,158960,158962,158964,158966,158968,158970,158973,158975,158977,158979],{"class":120,"line":1697},[118,158961,30408],{"class":177},[118,158963,129],{"class":128},[118,158965,181],{"class":124},[118,158967,157349],{"class":233},[118,158969,1024],{"class":177},[118,158971,158972],{"class":128},"pay",[118,158974,157152],{"class":124},[118,158976,1074],{"class":177},[118,158978,157005],{"class":233},[118,158980,135],{"class":128},[60,158982,158984],{"id":158983},"_312-易错点","3.12 易错点",[72,158986,158987,158990,158993,158996,159001],{},[75,158988,158989],{},"冒号不能漏。",[75,158991,158992],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[75,158994,158995],{},"多分支判断要注意顺序。",[75,158997,158998,158999,28378],{},"判断相等用 ",[115,159000,2953],{},[75,159002,159003],{},"字符串比较区分大小写：",[109,159005,159007],{"className":30371,"code":159006,"language":30373,"meta":39,"style":39},"\"Y\" == \"y\"  # False\n",[115,159008,159009],{"__ignoreMap":39},[118,159010,159011,159014,159016,159018],{"class":120,"line":121},[118,159012,159013],{"class":233},"\"Y\"",[118,159015,101552],{"class":124},[118,159017,157998],{"class":233},[118,159019,159020],{"class":187},"  # False\n",[15,159022,159023],{},"可转换后再判断：",[109,159025,159027],{"className":30371,"code":159026,"language":30373,"meta":39,"style":39},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[115,159028,159029,159046,159059],{"__ignoreMap":39},[118,159030,159031,159034,159036,159038,159040,159043],{"class":120,"line":121},[118,159032,159033],{"class":128},"answer ",[118,159035,174],{"class":124},[118,159037,60598],{"class":177},[118,159039,129],{"class":128},[118,159041,159042],{"class":233},"\"是否继续(y\u002Fn):\"",[118,159044,159045],{"class":128},").lower()\n",[118,159047,159048,159050,159053,159055,159057],{"class":120,"line":40},[118,159049,1535],{"class":124},[118,159051,159052],{"class":128}," answer ",[118,159054,2953],{"class":124},[118,159056,157998],{"class":233},[118,159058,3743],{"class":128},[118,159060,159061,159063,159065,159068],{"class":120,"line":1183},[118,159062,31292],{"class":177},[118,159064,129],{"class":128},[118,159066,159067],{"class":233},"\"继续\"",[118,159069,135],{"class":128},[60,159071,159073],{"id":159072},"_313-本章练习","3.13 本章练习",[72,159075,159076,159079,159082,159085,159095],{},[75,159077,159078],{},"输入年龄，判断是否成年。",[75,159080,159081],{},"输入年份，判断是否为闰年。",[75,159083,159084],{},"输入三个数字，输出最大值。",[75,159086,159087,159088,159091,159092,159094],{},"写登录判断：用户名是 ",[115,159089,159090],{},"admin"," 且密码是 ",[115,159093,15089],{}," 才登录成功。",[75,159096,159097],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5131,159099,159100],{},"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":39,"searchDepth":40,"depth":40,"links":159102},[159103,159104,159105,159106,159107,159108,159113,159114,159115,159116,159117,159118,159119],{"id":157491,"depth":40,"text":157492},{"id":157544,"depth":40,"text":157545},{"id":157648,"depth":40,"text":157649},{"id":157738,"depth":40,"text":157739},{"id":157928,"depth":40,"text":157929},{"id":158051,"depth":40,"text":158052,"children":159109},[159110,159111,159112],{"id":158055,"depth":1183,"text":158056},{"id":158112,"depth":1183,"text":158113},{"id":158169,"depth":1183,"text":158170},{"id":158214,"depth":40,"text":158215},{"id":158305,"depth":40,"text":158306},{"id":158432,"depth":40,"text":158433},{"id":158562,"depth":40,"text":158563},{"id":158747,"depth":40,"text":158748},{"id":158983,"depth":40,"text":158984},{"id":159072,"depth":40,"text":159073},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157483,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159126,"title":159127,"body":159128,"description":42,"extension":43,"meta":160897,"navigation":45,"path":160898,"seo":160899,"stem":160900,"__hash__":160901},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159129,"toc":160877},[159130,159133,159137,159143,159146,159163,159167,159169,159186,159188,159233,159235,159252,159256,159259,159325,159328,159346,159350,159511,159520,159524,159528,159533,159580,159582,159588,159592,159597,159644,159646,159652,159656,159661,159697,159700,159747,159751,159757,159815,159820,159851,159856,159860,159915,159918,159990,159993,160052,160056,160059,160134,160137,160141,160247,160250,160276,160280,160292,160361,160364,160456,160460,160462,160473,160475,160605,160609,160811,160819,160823,160853,160857,160874],[10,159131,159127],{"id":159132},"_4-循环语句",[60,159134,159136],{"id":159135},"_41-为什么需要循环","4.1 为什么需要循环",[15,159138,159139,159140,159142],{},"如果要输出 1 到 100，不应该写 100 行 ",[115,159141,146465],{},"，而应该用循环。",[15,159144,159145],{},"循环适合处理重复任务：",[72,159147,159148,159151,159154,159157,159160],{},[75,159149,159150],{},"重复输出。",[75,159152,159153],{},"重复输入。",[75,159155,159156],{},"遍历数据。",[75,159158,159159],{},"持续执行菜单。",[75,159161,159162],{},"批量处理文件或数据。",[60,159164,159166],{"id":159165},"_42-while循环","4.2 while循环",[15,159168,5186],{},[109,159170,159172],{"className":30371,"code":159171,"language":30373,"meta":39,"style":39},"while 条件:\n    循环体\n",[115,159173,159174,159181],{"__ignoreMap":39},[118,159175,159176,159178],{"class":120,"line":121},[118,159177,108656],{"class":124},[118,159179,159180],{"class":128}," 条件:\n",[118,159182,159183],{"class":120,"line":40},[118,159184,159185],{"class":128},"    循环体\n",[15,159187,15140],{},[109,159189,159191],{"className":30371,"code":159190,"language":30373,"meta":39,"style":39},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[115,159192,159193,159201,159205,159217,159224],{"__ignoreMap":39},[118,159194,159195,159197,159199],{"class":120,"line":121},[118,159196,100141],{"class":128},[118,159198,174],{"class":124},[118,159200,55692],{"class":177},[118,159202,159203],{"class":120,"line":40},[118,159204,2404],{"emptyLinePlaceholder":45},[118,159206,159207,159209,159211,159213,159215],{"class":120,"line":1183},[118,159208,108656],{"class":124},[118,159210,9443],{"class":128},[118,159212,1592],{"class":124},[118,159214,2152],{"class":177},[118,159216,3743],{"class":128},[118,159218,159219,159221],{"class":120,"line":1198},[118,159220,31292],{"class":177},[118,159222,159223],{"class":128},"(i)\n",[118,159225,159226,159229,159231],{"class":120,"line":1204},[118,159227,159228],{"class":128},"    i ",[118,159230,9482],{"class":124},[118,159232,55692],{"class":177},[15,159234,80922],{},[72,159236,159237,159243,159246,159249],{},[75,159238,159239,159240,28378],{},"判断条件 ",[115,159241,159242],{},"i \u003C= 5",[75,159244,159245],{},"条件成立，执行循环体。",[75,159247,159248],{},"执行完后回到条件判断。",[75,159250,159251],{},"条件不成立，退出循环。",[60,159253,159255],{"id":159254},"_43-while累加","4.3 while累加",[15,159257,159258],{},"计算 1 到 100 的和：",[109,159260,159262],{"className":30371,"code":159261,"language":30373,"meta":39,"style":39},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[115,159263,159264,159272,159280,159284,159296,159306,159314,159318],{"__ignoreMap":39},[118,159265,159266,159268,159270],{"class":120,"line":121},[118,159267,100141],{"class":128},[118,159269,174],{"class":124},[118,159271,55692],{"class":177},[118,159273,159274,159276,159278],{"class":120,"line":40},[118,159275,157253],{"class":128},[118,159277,174],{"class":124},[118,159279,47326],{"class":177},[118,159281,159282],{"class":120,"line":1183},[118,159283,2404],{"emptyLinePlaceholder":45},[118,159285,159286,159288,159290,159292,159294],{"class":120,"line":1198},[118,159287,108656],{"class":124},[118,159289,9443],{"class":128},[118,159291,1592],{"class":124},[118,159293,5759],{"class":177},[118,159295,3743],{"class":128},[118,159297,159298,159301,159303],{"class":120,"line":1204},[118,159299,159300],{"class":128},"    total ",[118,159302,9482],{"class":124},[118,159304,159305],{"class":128}," i\n",[118,159307,159308,159310,159312],{"class":120,"line":1218},[118,159309,159228],{"class":128},[118,159311,9482],{"class":124},[118,159313,55692],{"class":177},[118,159315,159316],{"class":120,"line":1224},[118,159317,2404],{"emptyLinePlaceholder":45},[118,159319,159320,159322],{"class":120,"line":1315},[118,159321,30408],{"class":177},[118,159323,159324],{"class":128},"(total)\n",[15,159326,159327],{},"核心思想：",[72,159329,159330,159335,159340],{},[75,159331,159332,159334],{},[115,159333,569],{}," 控制循环次数。",[75,159336,159337,159339],{},[115,159338,157354],{}," 保存累加结果。",[75,159341,159342,159343,159345],{},"每轮循环都要更新 ",[115,159344,569],{},"，否则可能死循环。",[60,159347,159349],{"id":159348},"_44-while猜数字","4.4 while猜数字",[109,159351,159353],{"className":30371,"code":159352,"language":30373,"meta":39,"style":39},"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",[115,159354,159355,159361,159365,159382,159390,159394,159402,159422,159431,159435,159447,159458,159468,159479,159485,159507],{"__ignoreMap":39},[118,159356,159357,159359],{"class":120,"line":121},[118,159358,30385],{"class":124},[118,159360,45321],{"class":128},[118,159362,159363],{"class":120,"line":40},[118,159364,2404],{"emptyLinePlaceholder":45},[118,159366,159367,159369,159371,159374,159376,159378,159380],{"class":120,"line":1183},[118,159368,159033],{"class":128},[118,159370,174],{"class":124},[118,159372,159373],{"class":128}," random.randint(",[118,159375,346],{"class":177},[118,159377,12440],{"class":128},[118,159379,439],{"class":177},[118,159381,135],{"class":128},[118,159383,159384,159386,159388],{"class":120,"line":1198},[118,159385,146684],{"class":128},[118,159387,174],{"class":124},[118,159389,47326],{"class":177},[118,159391,159392],{"class":120,"line":1204},[118,159393,2404],{"emptyLinePlaceholder":45},[118,159395,159396,159398,159400],{"class":120,"line":1218},[118,159397,108656],{"class":124},[118,159399,95285],{"class":177},[118,159401,3743],{"class":128},[118,159403,159404,159407,159409,159411,159413,159415,159417,159420],{"class":120,"line":1224},[118,159405,159406],{"class":128},"    guess ",[118,159408,174],{"class":124},[118,159410,2386],{"class":177},[118,159412,129],{"class":128},[118,159414,53814],{"class":177},[118,159416,129],{"class":128},[118,159418,159419],{"class":233},"\"请输入1到100之间的数字:\"",[118,159421,30490],{"class":128},[118,159423,159424,159427,159429],{"class":120,"line":1315},[118,159425,159426],{"class":128},"    count ",[118,159428,9482],{"class":124},[118,159430,55692],{"class":177},[118,159432,159433],{"class":120,"line":1321},[118,159434,2404],{"emptyLinePlaceholder":45},[118,159436,159437,159439,159442,159444],{"class":120,"line":1333},[118,159438,3105],{"class":124},[118,159440,159441],{"class":128}," guess ",[118,159443,1088],{"class":124},[118,159445,159446],{"class":128}," answer:\n",[118,159448,159449,159451,159453,159456],{"class":120,"line":1616},[118,159450,32444],{"class":177},[118,159452,129],{"class":128},[118,159454,159455],{"class":233},"\"猜大了\"",[118,159457,135],{"class":128},[118,159459,159460,159462,159464,159466],{"class":120,"line":1621},[118,159461,39286],{"class":124},[118,159463,159441],{"class":128},[118,159465,1038],{"class":124},[118,159467,159446],{"class":128},[118,159469,159470,159472,159474,159477],{"class":120,"line":1627},[118,159471,32444],{"class":177},[118,159473,129],{"class":128},[118,159475,159476],{"class":233},"\"猜小了\"",[118,159478,135],{"class":128},[118,159480,159481,159483],{"class":120,"line":1632},[118,159482,158015],{"class":124},[118,159484,3743],{"class":128},[118,159486,159487,159489,159491,159493,159496,159498,159500,159502,159505],{"class":120,"line":1646},[118,159488,32444],{"class":177},[118,159490,129],{"class":128},[118,159492,181],{"class":124},[118,159494,159495],{"class":233},"\"猜对了，一共猜了",[118,159497,1024],{"class":177},[118,159499,84427],{"class":128},[118,159501,1074],{"class":177},[118,159503,159504],{"class":233},"次\"",[118,159506,135],{"class":128},[118,159508,159509],{"class":120,"line":1651},[118,159510,31620],{"class":124},[15,159512,159513,159516,159517,159519],{},[115,159514,159515],{},"while True"," 表示无限循环，通常配合 ",[115,159518,2057],{}," 使用。",[60,159521,159523],{"id":159522},"_45-break和continue","4.5 break和continue",[89,159525,159527],{"id":159526},"_451-break","4.5.1 break",[15,159529,159530,159532],{},[115,159531,2057],{}," 直接结束整个循环。",[109,159534,159536],{"className":30371,"code":159535,"language":30373,"meta":39,"style":39},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[115,159537,159538,159558,159570,159574],{"__ignoreMap":39},[118,159539,159540,159542,159544,159546,159548,159550,159552,159554,159556],{"class":120,"line":121},[118,159541,3029],{"class":124},[118,159543,9443],{"class":128},[118,159545,26036],{"class":124},[118,159547,32436],{"class":177},[118,159549,129],{"class":128},[118,159551,346],{"class":177},[118,159553,12440],{"class":128},[118,159555,472],{"class":177},[118,159557,30779],{"class":128},[118,159559,159560,159562,159564,159566,159568],{"class":120,"line":40},[118,159561,3105],{"class":124},[118,159563,9443],{"class":128},[118,159565,2953],{"class":124},[118,159567,78063],{"class":177},[118,159569,3743],{"class":128},[118,159571,159572],{"class":120,"line":1183},[118,159573,31620],{"class":124},[118,159575,159576,159578],{"class":120,"line":1198},[118,159577,31292],{"class":177},[118,159579,159223],{"class":128},[15,159581,146450],{},[109,159583,159586],{"className":159584,"code":159585,"language":5192,"meta":39},[5190],"1\n2\n",[115,159587,159585],{"__ignoreMap":39},[89,159589,159591],{"id":159590},"_452-continue","4.5.2 continue",[15,159593,159594,159596],{},[115,159595,154665],{}," 跳过本轮剩余代码，进入下一轮循环。",[109,159598,159600],{"className":30371,"code":159599,"language":30373,"meta":39,"style":39},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[115,159601,159602,159622,159634,159638],{"__ignoreMap":39},[118,159603,159604,159606,159608,159610,159612,159614,159616,159618,159620],{"class":120,"line":121},[118,159605,3029],{"class":124},[118,159607,9443],{"class":128},[118,159609,26036],{"class":124},[118,159611,32436],{"class":177},[118,159613,129],{"class":128},[118,159615,346],{"class":177},[118,159617,12440],{"class":128},[118,159619,472],{"class":177},[118,159621,30779],{"class":128},[118,159623,159624,159626,159628,159630,159632],{"class":120,"line":40},[118,159625,3105],{"class":124},[118,159627,9443],{"class":128},[118,159629,2953],{"class":124},[118,159631,78063],{"class":177},[118,159633,3743],{"class":128},[118,159635,159636],{"class":120,"line":1183},[118,159637,148505],{"class":124},[118,159639,159640,159642],{"class":120,"line":1198},[118,159641,31292],{"class":177},[118,159643,159223],{"class":128},[15,159645,146450],{},[109,159647,159650],{"className":159648,"code":159649,"language":5192,"meta":39},[5190],"1\n2\n4\n5\n",[115,159651,159649],{"__ignoreMap":39},[60,159653,159655],{"id":159654},"_46-for循环","4.6 for循环",[15,159657,159658,159660],{},[115,159659,3029],{}," 常用于遍历序列。",[109,159662,159664],{"className":30371,"code":159663,"language":30373,"meta":39,"style":39},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[115,159665,159666,159675,159679,159690],{"__ignoreMap":39},[118,159667,159668,159670,159672],{"class":120,"line":121},[118,159669,146529],{"class":128},[118,159671,174],{"class":124},[118,159673,159674],{"class":233}," \"python\"\n",[118,159676,159677],{"class":120,"line":40},[118,159678,2404],{"emptyLinePlaceholder":45},[118,159680,159681,159683,159686,159688],{"class":120,"line":1183},[118,159682,3029],{"class":124},[118,159684,159685],{"class":128}," ch ",[118,159687,26036],{"class":124},[118,159689,158392],{"class":128},[118,159691,159692,159694],{"class":120,"line":1198},[118,159693,31292],{"class":177},[118,159695,159696],{"class":128},"(ch)\n",[15,159698,159699],{},"遍历列表：",[109,159701,159703],{"className":30371,"code":159702,"language":30373,"meta":39,"style":39},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[115,159704,159705,159727,159731,159741],{"__ignoreMap":39},[118,159706,159707,159710,159712,159714,159716,159718,159720,159722,159725],{"class":120,"line":121},[118,159708,159709],{"class":128},"students ",[118,159711,174],{"class":124},[118,159713,52219],{"class":128},[118,159715,149881],{"class":233},[118,159717,12440],{"class":128},[118,159719,150929],{"class":233},[118,159721,12440],{"class":128},[118,159723,159724],{"class":233},"\"小刚\"",[118,159726,33239],{"class":128},[118,159728,159729],{"class":120,"line":40},[118,159730,2404],{"emptyLinePlaceholder":45},[118,159732,159733,159735,159737,159739],{"class":120,"line":1183},[118,159734,3029],{"class":124},[118,159736,152130],{"class":128},[118,159738,26036],{"class":124},[118,159740,152135],{"class":128},[118,159742,159743,159745],{"class":120,"line":1198},[118,159744,31292],{"class":177},[118,159746,150035],{"class":128},[60,159748,159750],{"id":159749},"_47-range函数","4.7 range函数",[15,159752,159753,159756],{},[115,159754,159755],{},"range()"," 用于生成整数序列。",[109,159758,159760],{"className":30371,"code":159759,"language":30373,"meta":39,"style":39},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[115,159761,159762,159776,159794],{"__ignoreMap":39},[118,159763,159764,159766,159768,159770,159773],{"class":120,"line":121},[118,159765,33409],{"class":177},[118,159767,129],{"class":128},[118,159769,447],{"class":177},[118,159771,159772],{"class":128},")          ",[118,159774,159775],{"class":187},"# 0,1,2,3,4\n",[118,159777,159778,159780,159782,159784,159786,159788,159791],{"class":120,"line":40},[118,159779,33409],{"class":177},[118,159781,129],{"class":128},[118,159783,346],{"class":177},[118,159785,12440],{"class":128},[118,159787,447],{"class":177},[118,159789,159790],{"class":128},")       ",[118,159792,159793],{"class":187},"# 1,2,3,4\n",[118,159795,159796,159798,159800,159802,159804,159806,159808,159810,159812],{"class":120,"line":1183},[118,159797,33409],{"class":177},[118,159799,129],{"class":128},[118,159801,346],{"class":177},[118,159803,12440],{"class":128},[118,159805,574],{"class":177},[118,159807,12440],{"class":128},[118,159809,206],{"class":177},[118,159811,155654],{"class":128},[118,159813,159814],{"class":187},"# 1,3,5,7,9\n",[15,159816,159817,159818,24623],{},"配合 ",[115,159819,3029],{},[109,159821,159823],{"className":30371,"code":159822,"language":30373,"meta":39,"style":39},"for i in range(1, 6):\n    print(i)\n",[115,159824,159825,159845],{"__ignoreMap":39},[118,159826,159827,159829,159831,159833,159835,159837,159839,159841,159843],{"class":120,"line":121},[118,159828,3029],{"class":124},[118,159830,9443],{"class":128},[118,159832,26036],{"class":124},[118,159834,32436],{"class":177},[118,159836,129],{"class":128},[118,159838,346],{"class":177},[118,159840,12440],{"class":128},[118,159842,472],{"class":177},[118,159844,30779],{"class":128},[118,159846,159847,159849],{"class":120,"line":40},[118,159848,31292],{"class":177},[118,159850,159223],{"class":128},[15,159852,9030,159853,159855],{},[115,159854,33409],{}," 的结束值不包含在内。",[60,159857,159859],{"id":159858},"_48-for循环求和","4.8 for循环求和",[109,159861,159863],{"className":30371,"code":159862,"language":30373,"meta":39,"style":39},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[115,159864,159865,159873,159877,159897,159905,159909],{"__ignoreMap":39},[118,159866,159867,159869,159871],{"class":120,"line":121},[118,159868,157253],{"class":128},[118,159870,174],{"class":124},[118,159872,47326],{"class":177},[118,159874,159875],{"class":120,"line":40},[118,159876,2404],{"emptyLinePlaceholder":45},[118,159878,159879,159881,159883,159885,159887,159889,159891,159893,159895],{"class":120,"line":1183},[118,159880,3029],{"class":124},[118,159882,9443],{"class":128},[118,159884,26036],{"class":124},[118,159886,32436],{"class":177},[118,159888,129],{"class":128},[118,159890,346],{"class":177},[118,159892,12440],{"class":128},[118,159894,465],{"class":177},[118,159896,30779],{"class":128},[118,159898,159899,159901,159903],{"class":120,"line":1198},[118,159900,159300],{"class":128},[118,159902,9482],{"class":124},[118,159904,159305],{"class":128},[118,159906,159907],{"class":120,"line":1204},[118,159908,2404],{"emptyLinePlaceholder":45},[118,159910,159911,159913],{"class":120,"line":1218},[118,159912,30408],{"class":177},[118,159914,159324],{"class":128},[15,159916,159917],{},"求偶数和：",[109,159919,159921],{"className":30371,"code":159920,"language":30373,"meta":39,"style":39},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[115,159922,159923,159931,159935,159955,159971,159980,159984],{"__ignoreMap":39},[118,159924,159925,159927,159929],{"class":120,"line":121},[118,159926,157253],{"class":128},[118,159928,174],{"class":124},[118,159930,47326],{"class":177},[118,159932,159933],{"class":120,"line":40},[118,159934,2404],{"emptyLinePlaceholder":45},[118,159936,159937,159939,159941,159943,159945,159947,159949,159951,159953],{"class":120,"line":1183},[118,159938,3029],{"class":124},[118,159940,9443],{"class":128},[118,159942,26036],{"class":124},[118,159944,32436],{"class":177},[118,159946,129],{"class":128},[118,159948,346],{"class":177},[118,159950,12440],{"class":128},[118,159952,465],{"class":177},[118,159954,30779],{"class":128},[118,159956,159957,159959,159961,159963,159965,159967,159969],{"class":120,"line":1198},[118,159958,3105],{"class":124},[118,159960,9443],{"class":128},[118,159962,456],{"class":124},[118,159964,14760],{"class":177},[118,159966,101552],{"class":124},[118,159968,4097],{"class":177},[118,159970,3743],{"class":128},[118,159972,159973,159976,159978],{"class":120,"line":1204},[118,159974,159975],{"class":128},"        total ",[118,159977,9482],{"class":124},[118,159979,159305],{"class":128},[118,159981,159982],{"class":120,"line":1218},[118,159983,2404],{"emptyLinePlaceholder":45},[118,159985,159986,159988],{"class":120,"line":1224},[118,159987,30408],{"class":177},[118,159989,159324],{"class":128},[15,159991,159992],{},"也可以：",[109,159994,159996],{"className":30371,"code":159995,"language":30373,"meta":39,"style":39},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[115,159997,159998,160006,160010,160034,160042,160046],{"__ignoreMap":39},[118,159999,160000,160002,160004],{"class":120,"line":121},[118,160001,157253],{"class":128},[118,160003,174],{"class":124},[118,160005,47326],{"class":177},[118,160007,160008],{"class":120,"line":40},[118,160009,2404],{"emptyLinePlaceholder":45},[118,160011,160012,160014,160016,160018,160020,160022,160024,160026,160028,160030,160032],{"class":120,"line":1183},[118,160013,3029],{"class":124},[118,160015,9443],{"class":128},[118,160017,26036],{"class":124},[118,160019,32436],{"class":177},[118,160021,129],{"class":128},[118,160023,206],{"class":177},[118,160025,12440],{"class":128},[118,160027,465],{"class":177},[118,160029,12440],{"class":128},[118,160031,206],{"class":177},[118,160033,30779],{"class":128},[118,160035,160036,160038,160040],{"class":120,"line":1198},[118,160037,159300],{"class":128},[118,160039,9482],{"class":124},[118,160041,159305],{"class":128},[118,160043,160044],{"class":120,"line":1204},[118,160045,2404],{"emptyLinePlaceholder":45},[118,160047,160048,160050],{"class":120,"line":1218},[118,160049,30408],{"class":177},[118,160051,159324],{"class":128},[60,160053,160055],{"id":160054},"_49-循环嵌套","4.9 循环嵌套",[15,160057,160058],{},"嵌套循环就是循环里面再写循环。",[109,160060,160062],{"className":30371,"code":160061,"language":30373,"meta":39,"style":39},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[115,160063,160064,160084,160104],{"__ignoreMap":39},[118,160065,160066,160068,160070,160072,160074,160076,160078,160080,160082],{"class":120,"line":121},[118,160067,3029],{"class":124},[118,160069,9443],{"class":128},[118,160071,26036],{"class":124},[118,160073,32436],{"class":177},[118,160075,129],{"class":128},[118,160077,346],{"class":177},[118,160079,12440],{"class":128},[118,160081,421],{"class":177},[118,160083,30779],{"class":128},[118,160085,160086,160088,160090,160092,160094,160096,160098,160100,160102],{"class":120,"line":40},[118,160087,3205],{"class":124},[118,160089,9505],{"class":128},[118,160091,26036],{"class":124},[118,160093,32436],{"class":177},[118,160095,129],{"class":128},[118,160097,346],{"class":177},[118,160099,12440],{"class":128},[118,160101,421],{"class":177},[118,160103,30779],{"class":128},[118,160105,160106,160108,160110,160112,160115,160117,160119,160121,160124,160126,160128,160130,160132],{"class":120,"line":1183},[118,160107,32444],{"class":177},[118,160109,129],{"class":128},[118,160111,181],{"class":124},[118,160113,160114],{"class":233},"\"i=",[118,160116,1024],{"class":177},[118,160118,569],{"class":128},[118,160120,1074],{"class":177},[118,160122,160123],{"class":233},", j=",[118,160125,1024],{"class":177},[118,160127,595],{"class":128},[118,160129,1074],{"class":177},[118,160131,379],{"class":233},[118,160133,135],{"class":128},[15,160135,160136],{},"外层循环执行一次，内层循环执行完整一轮。",[60,160138,160140],{"id":160139},"_410-九九乘法表","4.10 九九乘法表",[109,160142,160144],{"className":30371,"code":160143,"language":30373,"meta":39,"style":39},"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",[115,160145,160146,160166,160189,160241],{"__ignoreMap":39},[118,160147,160148,160150,160152,160154,160156,160158,160160,160162,160164],{"class":120,"line":121},[118,160149,3029],{"class":124},[118,160151,9443],{"class":128},[118,160153,26036],{"class":124},[118,160155,32436],{"class":177},[118,160157,129],{"class":128},[118,160159,346],{"class":177},[118,160161,12440],{"class":128},[118,160163,574],{"class":177},[118,160165,30779],{"class":128},[118,160167,160168,160170,160172,160174,160176,160178,160180,160183,160185,160187],{"class":120,"line":40},[118,160169,3205],{"class":124},[118,160171,9505],{"class":128},[118,160173,26036],{"class":124},[118,160175,32436],{"class":177},[118,160177,129],{"class":128},[118,160179,346],{"class":177},[118,160181,160182],{"class":128},", i ",[118,160184,609],{"class":124},[118,160186,25123],{"class":177},[118,160188,30779],{"class":128},[118,160190,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221,160223,160225,160227,160229,160231,160233,160235,160237,160239],{"class":120,"line":1183},[118,160192,32444],{"class":177},[118,160194,129],{"class":128},[118,160196,181],{"class":124},[118,160198,379],{"class":233},[118,160200,1024],{"class":177},[118,160202,595],{"class":128},[118,160204,1074],{"class":177},[118,160206,583],{"class":233},[118,160208,1024],{"class":177},[118,160210,569],{"class":128},[118,160212,1074],{"class":177},[118,160214,174],{"class":233},[118,160216,1024],{"class":177},[118,160218,100141],{"class":128},[118,160220,583],{"class":124},[118,160222,3414],{"class":128},[118,160224,1074],{"class":177},[118,160226,379],{"class":233},[118,160228,12440],{"class":128},[118,160230,45794],{"class":5221},[118,160232,174],{"class":124},[118,160234,379],{"class":233},[118,160236,1234],{"class":177},[118,160238,379],{"class":233},[118,160240,135],{"class":128},[118,160242,160243,160245],{"class":120,"line":1198},[118,160244,31292],{"class":177},[118,160246,1980],{"class":128},[15,160248,160249],{},"关键点：",[72,160251,160252,160258,160264,160270],{},[75,160253,160254,160255,160257],{},"外层 ",[115,160256,569],{}," 控制行。",[75,160259,160260,160261,160263],{},"内层 ",[115,160262,595],{}," 控制列。",[75,160265,160266,160267,160269],{},"每行结束后用 ",[115,160268,146465],{}," 换行。",[75,160271,160272,160275],{},[115,160273,160274],{},"end=\"\\t\""," 让同一行的内容横向排列。",[60,160277,160279],{"id":160278},"_411-循环else","4.11 循环else",[15,160281,160282,160283,160285,160286,160288,160289,160291],{},"Python 的循环可以带 ",[115,160284,1705],{},"。当循环正常结束时执行 ",[115,160287,1705],{},"，如果被 ",[115,160290,2057],{}," 打断，则不执行。",[109,160293,160295],{"className":30371,"code":160294,"language":30373,"meta":39,"style":39},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[115,160296,160297,160317,160329,160340,160344,160350],{"__ignoreMap":39},[118,160298,160299,160301,160303,160305,160307,160309,160311,160313,160315],{"class":120,"line":121},[118,160300,3029],{"class":124},[118,160302,9443],{"class":128},[118,160304,26036],{"class":124},[118,160306,32436],{"class":177},[118,160308,129],{"class":128},[118,160310,346],{"class":177},[118,160312,12440],{"class":128},[118,160314,472],{"class":177},[118,160316,30779],{"class":128},[118,160318,160319,160321,160323,160325,160327],{"class":120,"line":40},[118,160320,3105],{"class":124},[118,160322,9443],{"class":128},[118,160324,2953],{"class":124},[118,160326,2042],{"class":177},[118,160328,3743],{"class":128},[118,160330,160331,160333,160335,160338],{"class":120,"line":1183},[118,160332,32444],{"class":177},[118,160334,129],{"class":128},[118,160336,160337],{"class":233},"\"找到了\"",[118,160339,135],{"class":128},[118,160341,160342],{"class":120,"line":1198},[118,160343,31620],{"class":124},[118,160345,160346,160348],{"class":120,"line":1204},[118,160347,1705],{"class":124},[118,160349,3743],{"class":128},[118,160351,160352,160354,160356,160359],{"class":120,"line":1218},[118,160353,31292],{"class":177},[118,160355,129],{"class":128},[118,160357,160358],{"class":233},"\"没找到\"",[118,160360,135],{"class":128},[15,160362,160363],{},"常用于搜索。",[109,160365,160367],{"className":30371,"code":160366,"language":30373,"meta":39,"style":39},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[115,160368,160369,160390,160399,160403,160415,160426,160436,160440,160446],{"__ignoreMap":39},[118,160370,160371,160374,160376,160378,160380,160382,160384,160386,160388],{"class":120,"line":121},[118,160372,160373],{"class":128},"names ",[118,160375,174],{"class":124},[118,160377,52219],{"class":128},[118,160379,149881],{"class":233},[118,160381,12440],{"class":128},[118,160383,150929],{"class":233},[118,160385,12440],{"class":128},[118,160387,159724],{"class":233},[118,160389,33239],{"class":128},[118,160391,160392,160394,160396],{"class":120,"line":40},[118,160393,111571],{"class":128},[118,160395,174],{"class":124},[118,160397,160398],{"class":233}," \"小李\"\n",[118,160400,160401],{"class":120,"line":1183},[118,160402,2404],{"emptyLinePlaceholder":45},[118,160404,160405,160407,160410,160412],{"class":120,"line":1198},[118,160406,3029],{"class":124},[118,160408,160409],{"class":128}," name ",[118,160411,26036],{"class":124},[118,160413,160414],{"class":128}," names:\n",[118,160416,160417,160419,160421,160423],{"class":120,"line":1204},[118,160418,3105],{"class":124},[118,160420,160409],{"class":128},[118,160422,2953],{"class":124},[118,160424,160425],{"class":128}," target:\n",[118,160427,160428,160430,160432,160434],{"class":120,"line":1218},[118,160429,32444],{"class":177},[118,160431,129],{"class":128},[118,160433,160337],{"class":233},[118,160435,135],{"class":128},[118,160437,160438],{"class":120,"line":1224},[118,160439,31620],{"class":124},[118,160441,160442,160444],{"class":120,"line":1315},[118,160443,1705],{"class":124},[118,160445,3743],{"class":128},[118,160447,160448,160450,160452,160454],{"class":120,"line":1321},[118,160449,31292],{"class":177},[118,160451,129],{"class":128},[118,160453,160358],{"class":233},[118,160455,135],{"class":128},[60,160457,160459],{"id":160458},"_412-小案例登录重试","4.12 小案例：登录重试",[15,160461,123285],{},[72,160463,160464,160467,160470],{},[75,160465,160466],{},"用户最多输入 3 次密码。",[75,160468,160469],{},"密码正确则登录成功。",[75,160471,160472],{},"3 次都错误则锁定账号。",[15,160474,10040],{},[109,160476,160478],{"className":30371,"code":160477,"language":30373,"meta":39,"style":39},"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",[115,160479,160480,160490,160494,160510,160526,160530,160542,160553,160557,160563,160588,160594],{"__ignoreMap":39},[118,160481,160482,160485,160487],{"class":120,"line":121},[118,160483,160484],{"class":128},"password ",[118,160486,174],{"class":124},[118,160488,160489],{"class":233}," \"123456\"\n",[118,160491,160492],{"class":120,"line":40},[118,160493,2404],{"emptyLinePlaceholder":45},[118,160495,160496,160498,160500,160502,160504,160506,160508],{"class":120,"line":1183},[118,160497,3029],{"class":124},[118,160499,9443],{"class":128},[118,160501,26036],{"class":124},[118,160503,32436],{"class":177},[118,160505,129],{"class":128},[118,160507,200],{"class":177},[118,160509,30779],{"class":128},[118,160511,160512,160515,160517,160519,160521,160524],{"class":120,"line":1198},[118,160513,160514],{"class":128},"    user_password ",[118,160516,174],{"class":124},[118,160518,60598],{"class":177},[118,160520,129],{"class":128},[118,160522,160523],{"class":233},"\"请输入密码:\"",[118,160525,135],{"class":128},[118,160527,160528],{"class":120,"line":1204},[118,160529,2404],{"emptyLinePlaceholder":45},[118,160531,160532,160534,160537,160539],{"class":120,"line":1218},[118,160533,3105],{"class":124},[118,160535,160536],{"class":128}," user_password ",[118,160538,2953],{"class":124},[118,160540,160541],{"class":128}," password:\n",[118,160543,160544,160546,160548,160551],{"class":120,"line":1224},[118,160545,32444],{"class":177},[118,160547,129],{"class":128},[118,160549,160550],{"class":233},"\"登录成功\"",[118,160552,135],{"class":128},[118,160554,160555],{"class":120,"line":1315},[118,160556,31620],{"class":124},[118,160558,160559,160561],{"class":120,"line":1321},[118,160560,158015],{"class":124},[118,160562,3743],{"class":128},[118,160564,160565,160567,160569,160571,160574,160577,160579,160581,160583,160586],{"class":120,"line":1333},[118,160566,32444],{"class":177},[118,160568,129],{"class":128},[118,160570,181],{"class":124},[118,160572,160573],{"class":233},"\"密码错误，还剩",[118,160575,160576],{"class":177},"{2",[118,160578,52264],{"class":124},[118,160580,3036],{"class":128},[118,160582,1074],{"class":177},[118,160584,160585],{"class":233},"次机会\"",[118,160587,135],{"class":128},[118,160589,160590,160592],{"class":120,"line":1616},[118,160591,1705],{"class":124},[118,160593,3743],{"class":128},[118,160595,160596,160598,160600,160603],{"class":120,"line":1621},[118,160597,31292],{"class":177},[118,160599,129],{"class":128},[118,160601,160602],{"class":233},"\"账号已锁定\"",[118,160604,135],{"class":128},[60,160606,160608],{"id":160607},"_413-小案例菜单程序","4.13 小案例：菜单程序",[109,160610,160612],{"className":30371,"code":160611,"language":30373,"meta":39,"style":39},"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",[115,160613,160614,160622,160633,160644,160655,160666,160677,160681,160696,160700,160712,160723,160735,160746,160758,160769,160781,160791,160795,160801],{"__ignoreMap":39},[118,160615,160616,160618,160620],{"class":120,"line":121},[118,160617,108656],{"class":124},[118,160619,95285],{"class":177},[118,160621,3743],{"class":128},[118,160623,160624,160626,160628,160631],{"class":120,"line":40},[118,160625,31292],{"class":177},[118,160627,129],{"class":128},[118,160629,160630],{"class":233},"\"====== 菜单 ======\"",[118,160632,135],{"class":128},[118,160634,160635,160637,160639,160642],{"class":120,"line":1183},[118,160636,31292],{"class":177},[118,160638,129],{"class":128},[118,160640,160641],{"class":233},"\"1. 查询余额\"",[118,160643,135],{"class":128},[118,160645,160646,160648,160650,160653],{"class":120,"line":1198},[118,160647,31292],{"class":177},[118,160649,129],{"class":128},[118,160651,160652],{"class":233},"\"2. 存款\"",[118,160654,135],{"class":128},[118,160656,160657,160659,160661,160664],{"class":120,"line":1204},[118,160658,31292],{"class":177},[118,160660,129],{"class":128},[118,160662,160663],{"class":233},"\"3. 取款\"",[118,160665,135],{"class":128},[118,160667,160668,160670,160672,160675],{"class":120,"line":1218},[118,160669,31292],{"class":177},[118,160671,129],{"class":128},[118,160673,160674],{"class":233},"\"0. 退出\"",[118,160676,135],{"class":128},[118,160678,160679],{"class":120,"line":1224},[118,160680,2404],{"emptyLinePlaceholder":45},[118,160682,160683,160686,160688,160690,160692,160694],{"class":120,"line":1315},[118,160684,160685],{"class":128},"    choice ",[118,160687,174],{"class":124},[118,160689,60598],{"class":177},[118,160691,129],{"class":128},[118,160693,153066],{"class":233},[118,160695,135],{"class":128},[118,160697,160698],{"class":120,"line":1321},[118,160699,2404],{"emptyLinePlaceholder":45},[118,160701,160702,160704,160706,160708,160710],{"class":120,"line":1333},[118,160703,3105],{"class":124},[118,160705,153079],{"class":128},[118,160707,2953],{"class":124},[118,160709,153084],{"class":233},[118,160711,3743],{"class":128},[118,160713,160714,160716,160718,160721],{"class":120,"line":1616},[118,160715,32444],{"class":177},[118,160717,129],{"class":128},[118,160719,160720],{"class":233},"\"余额为1000元\"",[118,160722,135],{"class":128},[118,160724,160725,160727,160729,160731,160733],{"class":120,"line":1621},[118,160726,39286],{"class":124},[118,160728,153079],{"class":128},[118,160730,2953],{"class":124},[118,160732,153103],{"class":233},[118,160734,3743],{"class":128},[118,160736,160737,160739,160741,160744],{"class":120,"line":1627},[118,160738,32444],{"class":177},[118,160740,129],{"class":128},[118,160742,160743],{"class":233},"\"存款功能\"",[118,160745,135],{"class":128},[118,160747,160748,160750,160752,160754,160756],{"class":120,"line":1632},[118,160749,39286],{"class":124},[118,160751,153079],{"class":128},[118,160753,2953],{"class":124},[118,160755,153121],{"class":233},[118,160757,3743],{"class":128},[118,160759,160760,160762,160764,160767],{"class":120,"line":1646},[118,160761,32444],{"class":177},[118,160763,129],{"class":128},[118,160765,160766],{"class":233},"\"取款功能\"",[118,160768,135],{"class":128},[118,160770,160771,160773,160775,160777,160779],{"class":120,"line":1651},[118,160772,39286],{"class":124},[118,160774,153079],{"class":128},[118,160776,2953],{"class":124},[118,160778,153175],{"class":233},[118,160780,3743],{"class":128},[118,160782,160783,160785,160787,160789],{"class":120,"line":1657},[118,160784,32444],{"class":177},[118,160786,129],{"class":128},[118,160788,153186],{"class":233},[118,160790,135],{"class":128},[118,160792,160793],{"class":120,"line":1678},[118,160794,31620],{"class":124},[118,160796,160797,160799],{"class":120,"line":1683},[118,160798,158015],{"class":124},[118,160800,3743],{"class":128},[118,160802,160803,160805,160807,160809],{"class":120,"line":1697},[118,160804,32444],{"class":177},[118,160806,129],{"class":128},[118,160808,153207],{"class":233},[118,160810,135],{"class":128},[15,160812,160813,160814,160816,160817,28378],{},"菜单类程序通常使用 ",[115,160815,159515],{},"，用户选择退出时 ",[115,160818,2057],{},[60,160820,160822],{"id":160821},"_414-易错点","4.14 易错点",[72,160824,160825,160830,160836,160844,160850],{},[75,160826,160827,160829],{},[115,160828,108656],{}," 循环必须更新控制变量。",[75,160831,160832,160835],{},[115,160833,160834],{},"range(1, 10)"," 不包含 10。",[75,160837,160838,160840,160841,160843],{},[115,160839,2057],{}," 结束整个循环，",[115,160842,154665],{}," 只跳过本轮。",[75,160845,160846,160847,160849],{},"嵌套循环中，",[115,160848,2057],{}," 只跳出当前所在的一层循环。",[75,160851,160852],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[60,160854,160856],{"id":160855},"_415-本章练习","4.15 本章练习",[72,160858,160859,160862,160865,160868,160871],{},[75,160860,160861],{},"输出 1 到 100。",[75,160863,160864],{},"计算 1 到 100 的偶数和。",[75,160866,160867],{},"输出 100 以内能被 3 和 5 同时整除的数。",[75,160869,160870],{},"编写猜数字游戏，限制最多猜 7 次。",[75,160872,160873],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5131,160875,160876],{},"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":39,"searchDepth":40,"depth":40,"links":160878},[160879,160880,160881,160882,160883,160887,160888,160889,160890,160891,160892,160893,160894,160895,160896],{"id":159135,"depth":40,"text":159136},{"id":159165,"depth":40,"text":159166},{"id":159254,"depth":40,"text":159255},{"id":159348,"depth":40,"text":159349},{"id":159522,"depth":40,"text":159523,"children":160884},[160885,160886],{"id":159526,"depth":1183,"text":159527},{"id":159590,"depth":1183,"text":159591},{"id":159654,"depth":40,"text":159655},{"id":159749,"depth":40,"text":159750},{"id":159858,"depth":40,"text":159859},{"id":160054,"depth":40,"text":160055},{"id":160139,"depth":40,"text":160140},{"id":160278,"depth":40,"text":160279},{"id":160458,"depth":40,"text":160459},{"id":160607,"depth":40,"text":160608},{"id":160821,"depth":40,"text":160822},{"id":160855,"depth":40,"text":160856},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159127,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160903,"title":160904,"body":160905,"description":42,"extension":43,"meta":162910,"navigation":45,"path":162911,"seo":162912,"stem":162913,"__hash__":162914},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160906,"toc":162890},[160907,160910,160914,160917,160920,160934,160937,160951,160955,160957,160976,160978,161025,161027,161041,161045,161119,161122,161126,161129,161188,161196,161199,161252,161255,161259,161264,161319,161327,161377,161381,161386,161394,161493,161499,161503,161508,161511,161522,161563,161576,161580,161583,161619,161622,161635,161638,161698,161702,161706,161709,161760,161764,161767,161814,161820,161886,161889,161893,161896,162012,162015,162019,162022,162128,162132,162135,162173,162176,162218,162221,162281,162284,162288,162752,162755,162759,162786,162792,162853,162857,162887],[10,160908,160904],{"id":160909},"_5-函数基础",[60,160911,160913],{"id":160912},"_51-为什么需要函数","5.1 为什么需要函数",[15,160915,160916],{},"函数用于封装一段可以重复使用的代码。",[15,160918,160919],{},"不使用函数的问题：",[72,160921,160922,160925,160928,160931],{},[75,160923,160924],{},"重复代码多。",[75,160926,160927],{},"修改逻辑时容易漏改。",[75,160929,160930],{},"主流程不清晰。",[75,160932,160933],{},"程序越写越长，难以维护。",[15,160935,160936],{},"使用函数后的好处：",[72,160938,160939,160942,160945,160948],{},[75,160940,160941],{},"提高复用性。",[75,160943,160944],{},"提高可读性。",[75,160946,160947],{},"便于调试。",[75,160949,160950],{},"便于分工。",[60,160952,160954],{"id":160953},"_52-函数定义","5.2 函数定义",[15,160956,5186],{},[109,160958,160960],{"className":30371,"code":160959,"language":30373,"meta":39,"style":39},"def 函数名():\n    函数体\n",[115,160961,160962,160971],{"__ignoreMap":39},[118,160963,160964,160966,160969],{"class":120,"line":121},[118,160965,31940],{"class":124},[118,160967,160968],{"class":1967}," 函数名",[118,160970,31946],{"class":128},[118,160972,160973],{"class":120,"line":40},[118,160974,160975],{"class":128},"    函数体\n",[15,160977,15140],{},[109,160979,160981],{"className":30371,"code":160980,"language":30373,"meta":39,"style":39},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[115,160982,160983,160992,161002,161012,161016,161020],{"__ignoreMap":39},[118,160984,160985,160987,160990],{"class":120,"line":121},[118,160986,31940],{"class":124},[118,160988,160989],{"class":1967}," say_hello",[118,160991,31946],{"class":128},[118,160993,160994,160996,160998,161000],{"class":120,"line":40},[118,160995,31292],{"class":177},[118,160997,129],{"class":128},[118,160999,5849],{"class":233},[118,161001,135],{"class":128},[118,161003,161004,161006,161008,161010],{"class":120,"line":1183},[118,161005,31292],{"class":177},[118,161007,129],{"class":128},[118,161009,146632],{"class":233},[118,161011,135],{"class":128},[118,161013,161014],{"class":120,"line":1198},[118,161015,2404],{"emptyLinePlaceholder":45},[118,161017,161018],{"class":120,"line":1204},[118,161019,2404],{"emptyLinePlaceholder":45},[118,161021,161022],{"class":120,"line":1218},[118,161023,161024],{"class":128},"say_hello()\n",[15,161026,9030],{},[72,161028,161029,161032,161035,161038],{},[75,161030,161031],{},"函数必须先定义，再调用。",[75,161033,161034],{},"函数名遵循变量命名规则。",[75,161036,161037],{},"函数体需要缩进。",[75,161039,161040],{},"函数不调用就不会执行。",[60,161042,161044],{"id":161043},"_53-函数调用","5.3 函数调用",[109,161046,161048],{"className":30371,"code":161047,"language":30373,"meta":39,"style":39},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[115,161049,161050,161059,161070,161081,161092,161102,161106,161110,161115],{"__ignoreMap":39},[118,161051,161052,161054,161057],{"class":120,"line":121},[118,161053,31940],{"class":124},[118,161055,161056],{"class":1967}," print_menu",[118,161058,31946],{"class":128},[118,161060,161061,161063,161065,161068],{"class":120,"line":40},[118,161062,31292],{"class":177},[118,161064,129],{"class":128},[118,161066,161067],{"class":233},"\"1. 查询\"",[118,161069,135],{"class":128},[118,161071,161072,161074,161076,161079],{"class":120,"line":1183},[118,161073,31292],{"class":177},[118,161075,129],{"class":128},[118,161077,161078],{"class":233},"\"2. 添加\"",[118,161080,135],{"class":128},[118,161082,161083,161085,161087,161090],{"class":120,"line":1198},[118,161084,31292],{"class":177},[118,161086,129],{"class":128},[118,161088,161089],{"class":233},"\"3. 删除\"",[118,161091,135],{"class":128},[118,161093,161094,161096,161098,161100],{"class":120,"line":1204},[118,161095,31292],{"class":177},[118,161097,129],{"class":128},[118,161099,160674],{"class":233},[118,161101,135],{"class":128},[118,161103,161104],{"class":120,"line":1218},[118,161105,2404],{"emptyLinePlaceholder":45},[118,161107,161108],{"class":120,"line":1224},[118,161109,2404],{"emptyLinePlaceholder":45},[118,161111,161112],{"class":120,"line":1315},[118,161113,161114],{"class":128},"print_menu()\n",[118,161116,161117],{"class":120,"line":1321},[118,161118,161114],{"class":128},[15,161120,161121],{},"函数可以多次调用，每次调用都会执行函数体。",[60,161123,161125],{"id":161124},"_54-参数","5.4 参数",[15,161127,161128],{},"参数用于向函数传递数据。",[109,161130,161132],{"className":30371,"code":161131,"language":30373,"meta":39,"style":39},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[115,161133,161134,161143,161163,161167,161171,161180],{"__ignoreMap":39},[118,161135,161136,161138,161140],{"class":120,"line":121},[118,161137,31940],{"class":124},[118,161139,160989],{"class":1967},[118,161141,161142],{"class":128},"(name):\n",[118,161144,161145,161147,161149,161151,161153,161155,161157,161159,161161],{"class":120,"line":40},[118,161146,31292],{"class":177},[118,161148,129],{"class":128},[118,161150,181],{"class":124},[118,161152,157047],{"class":233},[118,161154,1024],{"class":177},[118,161156,79803],{"class":128},[118,161158,1074],{"class":177},[118,161160,379],{"class":233},[118,161162,135],{"class":128},[118,161164,161165],{"class":120,"line":1183},[118,161166,2404],{"emptyLinePlaceholder":45},[118,161168,161169],{"class":120,"line":1198},[118,161170,2404],{"emptyLinePlaceholder":45},[118,161172,161173,161176,161178],{"class":120,"line":1204},[118,161174,161175],{"class":128},"say_hello(",[118,161177,149881],{"class":233},[118,161179,135],{"class":128},[118,161181,161182,161184,161186],{"class":120,"line":1218},[118,161183,161175],{"class":128},[118,161185,150929],{"class":233},[118,161187,135],{"class":128},[15,161189,161190,161192,161193,161195],{},[115,161191,79803],{}," 是形参，",[115,161194,149881],{}," 是实参。",[15,161197,161198],{},"多个参数：",[109,161200,161202],{"className":30371,"code":161201,"language":30373,"meta":39,"style":39},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[115,161203,161204,161212,161225,161231,161235,161239],{"__ignoreMap":39},[118,161205,161206,161208,161210],{"class":120,"line":121},[118,161207,31940],{"class":124},[118,161209,5214],{"class":1967},[118,161211,151086],{"class":128},[118,161213,161214,161217,161219,161221,161223],{"class":120,"line":40},[118,161215,161216],{"class":128},"    result ",[118,161218,174],{"class":124},[118,161220,10874],{"class":128},[118,161222,609],{"class":124},[118,161224,151097],{"class":128},[118,161226,161227,161229],{"class":120,"line":1183},[118,161228,31292],{"class":177},[118,161230,76578],{"class":128},[118,161232,161233],{"class":120,"line":1198},[118,161234,2404],{"emptyLinePlaceholder":45},[118,161236,161237],{"class":120,"line":1204},[118,161238,2404],{"emptyLinePlaceholder":45},[118,161240,161241,161244,161246,161248,161250],{"class":120,"line":1218},[118,161242,161243],{"class":128},"add(",[118,161245,574],{"class":177},[118,161247,12440],{"class":128},[118,161249,828],{"class":177},[118,161251,135],{"class":128},[15,161253,161254],{},"调用时参数数量必须匹配。",[60,161256,161258],{"id":161257},"_55-返回值","5.5 返回值",[15,161260,161261,161263],{},[115,161262,17051],{}," 用于把函数内部的结果返回给调用者。",[109,161265,161267],{"className":30371,"code":161266,"language":30373,"meta":39,"style":39},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[115,161268,161269,161277,161287,161291,161295,161313],{"__ignoreMap":39},[118,161270,161271,161273,161275],{"class":120,"line":121},[118,161272,31940],{"class":124},[118,161274,5214],{"class":1967},[118,161276,151086],{"class":128},[118,161278,161279,161281,161283,161285],{"class":120,"line":40},[118,161280,4094],{"class":124},[118,161282,10874],{"class":128},[118,161284,609],{"class":124},[118,161286,151097],{"class":128},[118,161288,161289],{"class":120,"line":1183},[118,161290,2404],{"emptyLinePlaceholder":45},[118,161292,161293],{"class":120,"line":1198},[118,161294,2404],{"emptyLinePlaceholder":45},[118,161296,161297,161300,161302,161305,161307,161309,161311],{"class":120,"line":1204},[118,161298,161299],{"class":128},"result ",[118,161301,174],{"class":124},[118,161303,161304],{"class":128}," add(",[118,161306,574],{"class":177},[118,161308,12440],{"class":128},[118,161310,828],{"class":177},[118,161312,135],{"class":128},[118,161314,161315,161317],{"class":120,"line":1218},[118,161316,30408],{"class":177},[118,161318,76578],{"class":128},[15,161320,161321,161322,161324,161325,28378],{},"如果函数没有写 ",[115,161323,17051],{},"，默认返回 ",[115,161326,95679],{},[109,161328,161330],{"className":30371,"code":161329,"language":30373,"meta":39,"style":39},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[115,161331,161332,161340,161350,161354,161358,161367],{"__ignoreMap":39},[118,161333,161334,161336,161338],{"class":120,"line":121},[118,161335,31940],{"class":124},[118,161337,160989],{"class":1967},[118,161339,31946],{"class":128},[118,161341,161342,161344,161346,161348],{"class":120,"line":40},[118,161343,31292],{"class":177},[118,161345,129],{"class":128},[118,161347,5849],{"class":233},[118,161349,135],{"class":128},[118,161351,161352],{"class":120,"line":1183},[118,161353,2404],{"emptyLinePlaceholder":45},[118,161355,161356],{"class":120,"line":1198},[118,161357,2404],{"emptyLinePlaceholder":45},[118,161359,161360,161362,161364],{"class":120,"line":1204},[118,161361,161299],{"class":128},[118,161363,174],{"class":124},[118,161365,161366],{"class":128}," say_hello()\n",[118,161368,161369,161371,161374],{"class":120,"line":1218},[118,161370,30408],{"class":177},[118,161372,161373],{"class":128},"(result)  ",[118,161375,161376],{"class":187},"# None\n",[60,161378,161380],{"id":161379},"_56-return的作用","5.6 return的作用",[15,161382,161383,161385],{},[115,161384,17051],{}," 有两个作用：",[72,161387,161388,161391],{},[75,161389,161390],{},"返回结果。",[75,161392,161393],{},"结束函数。",[109,161395,161397],{"className":30371,"code":161396,"language":30373,"meta":39,"style":39},"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",[115,161398,161399,161409,161421,161428,161432,161444,161451,161455,161462,161466,161470,161481],{"__ignoreMap":39},[118,161400,161401,161403,161406],{"class":120,"line":121},[118,161402,31940],{"class":124},[118,161404,161405],{"class":1967}," check_age",[118,161407,161408],{"class":128},"(age):\n",[118,161410,161411,161413,161415,161417,161419],{"class":120,"line":40},[118,161412,3105],{"class":124},[118,161414,15712],{"class":128},[118,161416,1038],{"class":124},[118,161418,4097],{"class":177},[118,161420,3743],{"class":128},[118,161422,161423,161425],{"class":120,"line":1183},[118,161424,14757],{"class":124},[118,161426,161427],{"class":233}," \"年龄不合法\"\n",[118,161429,161430],{"class":120,"line":1198},[118,161431,2404],{"emptyLinePlaceholder":45},[118,161433,161434,161436,161438,161440,161442],{"class":120,"line":1204},[118,161435,3105],{"class":124},[118,161437,15712],{"class":128},[118,161439,1714],{"class":124},[118,161441,156278],{"class":177},[118,161443,3743],{"class":128},[118,161445,161446,161448],{"class":120,"line":1218},[118,161447,14757],{"class":124},[118,161449,161450],{"class":233}," \"成年人\"\n",[118,161452,161453],{"class":120,"line":1224},[118,161454,2404],{"emptyLinePlaceholder":45},[118,161456,161457,161459],{"class":120,"line":1315},[118,161458,4094],{"class":124},[118,161460,161461],{"class":233}," \"未成年人\"\n",[118,161463,161464],{"class":120,"line":1321},[118,161465,2404],{"emptyLinePlaceholder":45},[118,161467,161468],{"class":120,"line":1333},[118,161469,2404],{"emptyLinePlaceholder":45},[118,161471,161472,161474,161477,161479],{"class":120,"line":1616},[118,161473,30408],{"class":177},[118,161475,161476],{"class":128},"(check_age(",[118,161478,828],{"class":177},[118,161480,30490],{"class":128},[118,161482,161483,161485,161487,161489,161491],{"class":120,"line":1621},[118,161484,30408],{"class":177},[118,161486,161476],{"class":128},[118,161488,660],{"class":124},[118,161490,346],{"class":177},[118,161492,30490],{"class":128},[15,161494,161495,161496,161498],{},"函数执行到 ",[115,161497,17051],{}," 后，后面的代码不会继续执行。",[60,161500,161502],{"id":161501},"_57-none","5.7 None",[15,161504,161505,161507],{},[115,161506,95679],{}," 表示空值或没有结果。",[15,161509,161510],{},"常见使用场景：",[72,161512,161513,161516,161519],{},[75,161514,161515],{},"函数没有返回值。",[75,161517,161518],{},"变量暂时没有具体值。",[75,161520,161521],{},"表示查询不到结果。",[109,161523,161525],{"className":30371,"code":161524,"language":30373,"meta":39,"style":39},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[115,161526,161527,161535,161539,161552],{"__ignoreMap":39},[118,161528,161529,161531,161533],{"class":120,"line":121},[118,161530,161299],{"class":128},[118,161532,174],{"class":124},[118,161534,152165],{"class":177},[118,161536,161537],{"class":120,"line":40},[118,161538,2404],{"emptyLinePlaceholder":45},[118,161540,161541,161543,161546,161548,161550],{"class":120,"line":1183},[118,161542,1535],{"class":124},[118,161544,161545],{"class":128}," result ",[118,161547,38920],{"class":124},[118,161549,38926],{"class":177},[118,161551,3743],{"class":128},[118,161553,161554,161556,161558,161561],{"class":120,"line":1198},[118,161555,31292],{"class":177},[118,161557,129],{"class":128},[118,161559,161560],{"class":233},"\"没有数据\"",[118,161562,135],{"class":128},[15,161564,161565,161566,161568,161569,161572,161573,28378],{},"判断 ",[115,161567,95679],{}," 推荐使用 ",[115,161570,161571],{},"is None","，不要写成 ",[115,161574,161575],{},"== None",[60,161577,161579],{"id":161578},"_58-函数文档字符串","5.8 函数文档字符串",[15,161581,161582],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[109,161584,161586],{"className":30371,"code":161585,"language":30373,"meta":39,"style":39},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[115,161587,161588,161598,161603],{"__ignoreMap":39},[118,161589,161590,161592,161595],{"class":120,"line":121},[118,161591,31940],{"class":124},[118,161593,161594],{"class":1967}," calculate_bmi",[118,161596,161597],{"class":128},"(weight, height):\n",[118,161599,161600],{"class":120,"line":40},[118,161601,161602],{"class":233},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[118,161604,161605,161607,161610,161612,161615,161617],{"class":120,"line":1183},[118,161606,4094],{"class":124},[118,161608,161609],{"class":128}," weight ",[118,161611,712],{"class":124},[118,161613,161614],{"class":128}," height ",[118,161616,10666],{"class":124},[118,161618,47716],{"class":177},[15,161620,161621],{},"查看说明：",[109,161623,161625],{"className":30371,"code":161624,"language":30373,"meta":39,"style":39},"help(calculate_bmi)\n",[115,161626,161627],{"__ignoreMap":39},[118,161628,161629,161632],{"class":120,"line":121},[118,161630,161631],{"class":177},"help",[118,161633,161634],{"class":128},"(calculate_bmi)\n",[15,161636,161637],{},"较完整的写法：",[109,161639,161641],{"className":30371,"code":161640,"language":30373,"meta":39,"style":39},"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",[115,161642,161643,161651,161656,161661,161665,161670,161675,161680,161684],{"__ignoreMap":39},[118,161644,161645,161647,161649],{"class":120,"line":121},[118,161646,31940],{"class":124},[118,161648,161594],{"class":1967},[118,161650,161597],{"class":128},[118,161652,161653],{"class":120,"line":40},[118,161654,161655],{"class":233},"    \"\"\"\n",[118,161657,161658],{"class":120,"line":1183},[118,161659,161660],{"class":233},"    计算BMI。\n",[118,161662,161663],{"class":120,"line":1198},[118,161664,2404],{"emptyLinePlaceholder":45},[118,161666,161667],{"class":120,"line":1204},[118,161668,161669],{"class":233},"    :param weight: 体重，单位kg\n",[118,161671,161672],{"class":120,"line":1218},[118,161673,161674],{"class":233},"    :param height: 身高，单位m\n",[118,161676,161677],{"class":120,"line":1224},[118,161678,161679],{"class":233},"    :return: BMI数值\n",[118,161681,161682],{"class":120,"line":1315},[118,161683,161655],{"class":233},[118,161685,161686,161688,161690,161692,161694,161696],{"class":120,"line":1321},[118,161687,4094],{"class":124},[118,161689,161609],{"class":128},[118,161691,712],{"class":124},[118,161693,161614],{"class":128},[118,161695,10666],{"class":124},[118,161697,47716],{"class":177},[60,161699,161701],{"id":161700},"_59-变量作用域","5.9 变量作用域",[89,161703,161705],{"id":161704},"_591-局部变量","5.9.1 局部变量",[15,161707,161708],{},"在函数内部定义的变量，只能在函数内部使用。",[109,161710,161712],{"className":30371,"code":161711,"language":30373,"meta":39,"style":39},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[115,161713,161714,161723,161731,161737,161741,161745,161750],{"__ignoreMap":39},[118,161715,161716,161718,161721],{"class":120,"line":121},[118,161717,31940],{"class":124},[118,161719,161720],{"class":1967}," test",[118,161722,31946],{"class":128},[118,161724,161725,161727,161729],{"class":120,"line":40},[118,161726,45586],{"class":128},[118,161728,174],{"class":124},[118,161730,58421],{"class":177},[118,161732,161733,161735],{"class":120,"line":1183},[118,161734,31292],{"class":177},[118,161736,142],{"class":128},[118,161738,161739],{"class":120,"line":1198},[118,161740,2404],{"emptyLinePlaceholder":45},[118,161742,161743],{"class":120,"line":1204},[118,161744,2404],{"emptyLinePlaceholder":45},[118,161746,161747],{"class":120,"line":1218},[118,161748,161749],{"class":128},"test()\n",[118,161751,161752,161754,161757],{"class":120,"line":1224},[118,161753,30408],{"class":177},[118,161755,161756],{"class":128},"(num)  ",[118,161758,161759],{"class":187},"# 报错\n",[89,161761,161763],{"id":161762},"_592-全局变量","5.9.2 全局变量",[15,161765,161766],{},"在函数外部定义的变量，可以在函数内部读取。",[109,161768,161770],{"className":30371,"code":161769,"language":30373,"meta":39,"style":39},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[115,161771,161772,161780,161784,161788,161796,161802,161806,161810],{"__ignoreMap":39},[118,161773,161774,161776,161778],{"class":120,"line":121},[118,161775,146529],{"class":128},[118,161777,174],{"class":124},[118,161779,149346],{"class":233},[118,161781,161782],{"class":120,"line":40},[118,161783,2404],{"emptyLinePlaceholder":45},[118,161785,161786],{"class":120,"line":1183},[118,161787,2404],{"emptyLinePlaceholder":45},[118,161789,161790,161792,161794],{"class":120,"line":1198},[118,161791,31940],{"class":124},[118,161793,160989],{"class":1967},[118,161795,31946],{"class":128},[118,161797,161798,161800],{"class":120,"line":1204},[118,161799,31292],{"class":177},[118,161801,150653],{"class":128},[118,161803,161804],{"class":120,"line":1218},[118,161805,2404],{"emptyLinePlaceholder":45},[118,161807,161808],{"class":120,"line":1224},[118,161809,2404],{"emptyLinePlaceholder":45},[118,161811,161812],{"class":120,"line":1315},[118,161813,161024],{"class":128},[15,161815,161816,161817,28378],{},"如果要在函数内部修改全局变量，需要 ",[115,161818,161819],{},"global",[109,161821,161823],{"className":30371,"code":161822,"language":30373,"meta":39,"style":39},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[115,161824,161825,161833,161837,161841,161850,161858,161866,161870,161874,161879],{"__ignoreMap":39},[118,161826,161827,161829,161831],{"class":120,"line":121},[118,161828,146684],{"class":128},[118,161830,174],{"class":124},[118,161832,47326],{"class":177},[118,161834,161835],{"class":120,"line":40},[118,161836,2404],{"emptyLinePlaceholder":45},[118,161838,161839],{"class":120,"line":1183},[118,161840,2404],{"emptyLinePlaceholder":45},[118,161842,161843,161845,161848],{"class":120,"line":1198},[118,161844,31940],{"class":124},[118,161846,161847],{"class":1967}," add_count",[118,161849,31946],{"class":128},[118,161851,161852,161855],{"class":120,"line":1204},[118,161853,161854],{"class":124},"    global",[118,161856,161857],{"class":128}," count\n",[118,161859,161860,161862,161864],{"class":120,"line":1218},[118,161861,159426],{"class":128},[118,161863,9482],{"class":124},[118,161865,55692],{"class":177},[118,161867,161868],{"class":120,"line":1224},[118,161869,2404],{"emptyLinePlaceholder":45},[118,161871,161872],{"class":120,"line":1315},[118,161873,2404],{"emptyLinePlaceholder":45},[118,161875,161876],{"class":120,"line":1321},[118,161877,161878],{"class":128},"add_count()\n",[118,161880,161881,161883],{"class":120,"line":1333},[118,161882,30408],{"class":177},[118,161884,161885],{"class":128},"(count)\n",[15,161887,161888],{},"不建议大量使用全局变量，项目变大后很难维护。",[60,161890,161892],{"id":161891},"_510-函数嵌套调用","5.10 函数嵌套调用",[15,161894,161895],{},"一个函数中可以调用另一个函数。",[109,161897,161899],{"className":30371,"code":161898,"language":30373,"meta":39,"style":39},"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",[115,161900,161901,161910,161924,161928,161932,161941,161946,161966,161987,161991,161995,161999],{"__ignoreMap":39},[118,161902,161903,161905,161908],{"class":120,"line":121},[118,161904,31940],{"class":124},[118,161906,161907],{"class":1967}," print_line",[118,161909,31946],{"class":128},[118,161911,161912,161914,161916,161918,161920,161922],{"class":120,"line":40},[118,161913,31292],{"class":177},[118,161915,129],{"class":128},[118,161917,32476],{"class":233},[118,161919,6523],{"class":124},[118,161921,78658],{"class":177},[118,161923,135],{"class":128},[118,161925,161926],{"class":120,"line":1183},[118,161927,2404],{"emptyLinePlaceholder":45},[118,161929,161930],{"class":120,"line":1198},[118,161931,2404],{"emptyLinePlaceholder":45},[118,161933,161934,161936,161939],{"class":120,"line":1204},[118,161935,31940],{"class":124},[118,161937,161938],{"class":1967}," print_info",[118,161940,149368],{"class":128},[118,161942,161943],{"class":120,"line":1218},[118,161944,161945],{"class":128},"    print_line()\n",[118,161947,161948,161950,161952,161954,161956,161958,161960,161962,161964],{"class":120,"line":1224},[118,161949,31292],{"class":177},[118,161951,129],{"class":128},[118,161953,181],{"class":124},[118,161955,156675],{"class":233},[118,161957,1024],{"class":177},[118,161959,79803],{"class":128},[118,161961,1074],{"class":177},[118,161963,379],{"class":233},[118,161965,135],{"class":128},[118,161967,161968,161970,161972,161974,161977,161979,161981,161983,161985],{"class":120,"line":1315},[118,161969,31292],{"class":177},[118,161971,129],{"class":128},[118,161973,181],{"class":124},[118,161975,161976],{"class":233},"\"年龄:",[118,161978,1024],{"class":177},[118,161980,70214],{"class":128},[118,161982,1074],{"class":177},[118,161984,379],{"class":233},[118,161986,135],{"class":128},[118,161988,161989],{"class":120,"line":1321},[118,161990,161945],{"class":128},[118,161992,161993],{"class":120,"line":1333},[118,161994,2404],{"emptyLinePlaceholder":45},[118,161996,161997],{"class":120,"line":1616},[118,161998,2404],{"emptyLinePlaceholder":45},[118,162000,162001,162004,162006,162008,162010],{"class":120,"line":1621},[118,162002,162003],{"class":128},"print_info(",[118,162005,149881],{"class":233},[118,162007,12440],{"class":128},[118,162009,778],{"class":177},[118,162011,135],{"class":128},[15,162013,162014],{},"这种方式可以把小功能组合成大功能。",[60,162016,162018],{"id":162017},"_511-参数检查","5.11 参数检查",[15,162020,162021],{},"函数内部可以检查参数是否合法。",[109,162023,162025],{"className":30371,"code":162024,"language":30373,"meta":39,"style":39},"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",[115,162026,162027,162036,162048,162054,162064,162068,162072,162089,162093,162105,162116,162122],{"__ignoreMap":39},[118,162028,162029,162031,162034],{"class":120,"line":121},[118,162030,31940],{"class":124},[118,162032,162033],{"class":1967}," divide",[118,162035,151086],{"class":128},[118,162037,162038,162040,162042,162044,162046],{"class":120,"line":40},[118,162039,3105],{"class":124},[118,162041,10887],{"class":128},[118,162043,2953],{"class":124},[118,162045,4097],{"class":177},[118,162047,3743],{"class":128},[118,162049,162050,162052],{"class":120,"line":1183},[118,162051,14757],{"class":124},[118,162053,152165],{"class":177},[118,162055,162056,162058,162060,162062],{"class":120,"line":1198},[118,162057,4094],{"class":124},[118,162059,10874],{"class":128},[118,162061,712],{"class":124},[118,162063,151097],{"class":128},[118,162065,162066],{"class":120,"line":1204},[118,162067,2404],{"emptyLinePlaceholder":45},[118,162069,162070],{"class":120,"line":1218},[118,162071,2404],{"emptyLinePlaceholder":45},[118,162073,162074,162076,162078,162081,162083,162085,162087],{"class":120,"line":1224},[118,162075,161299],{"class":128},[118,162077,174],{"class":124},[118,162079,162080],{"class":128}," divide(",[118,162082,574],{"class":177},[118,162084,12440],{"class":128},[118,162086,320],{"class":177},[118,162088,135],{"class":128},[118,162090,162091],{"class":120,"line":1315},[118,162092,2404],{"emptyLinePlaceholder":45},[118,162094,162095,162097,162099,162101,162103],{"class":120,"line":1321},[118,162096,1535],{"class":124},[118,162098,161545],{"class":128},[118,162100,38920],{"class":124},[118,162102,38926],{"class":177},[118,162104,3743],{"class":128},[118,162106,162107,162109,162111,162114],{"class":120,"line":1333},[118,162108,31292],{"class":177},[118,162110,129],{"class":128},[118,162112,162113],{"class":233},"\"除数不能为0\"",[118,162115,135],{"class":128},[118,162117,162118,162120],{"class":120,"line":1616},[118,162119,1705],{"class":124},[118,162121,3743],{"class":128},[118,162123,162124,162126],{"class":120,"line":1621},[118,162125,31292],{"class":177},[118,162127,76578],{"class":128},[60,162129,162131],{"id":162130},"_512-类型提示","5.12 类型提示",[15,162133,162134],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[109,162136,162138],{"className":30371,"code":162137,"language":30373,"meta":39,"style":39},"def add(a: int, b: int) -> int:\n    return a + b\n",[115,162139,162140,162163],{"__ignoreMap":39},[118,162141,162142,162144,162146,162149,162151,162154,162156,162159,162161],{"class":120,"line":121},[118,162143,31940],{"class":124},[118,162145,5214],{"class":1967},[118,162147,162148],{"class":128},"(a: ",[118,162150,132],{"class":177},[118,162152,162153],{"class":128},", b: ",[118,162155,132],{"class":177},[118,162157,162158],{"class":128},") -> ",[118,162160,132],{"class":177},[118,162162,3743],{"class":128},[118,162164,162165,162167,162169,162171],{"class":120,"line":40},[118,162166,4094],{"class":124},[118,162168,10874],{"class":128},[118,162170,609],{"class":124},[118,162172,151097],{"class":128},[15,162174,162175],{},"字符串参数：",[109,162177,162179],{"className":30371,"code":162178,"language":30373,"meta":39,"style":39},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[115,162180,162181,162198],{"__ignoreMap":39},[118,162182,162183,162185,162187,162190,162192,162194,162196],{"class":120,"line":121},[118,162184,31940],{"class":124},[118,162186,160989],{"class":1967},[118,162188,162189],{"class":128},"(name: ",[118,162191,1303],{"class":177},[118,162193,162158],{"class":128},[118,162195,95679],{"class":177},[118,162197,3743],{"class":128},[118,162199,162200,162202,162204,162206,162208,162210,162212,162214,162216],{"class":120,"line":40},[118,162201,31292],{"class":177},[118,162203,129],{"class":128},[118,162205,181],{"class":124},[118,162207,157047],{"class":233},[118,162209,1024],{"class":177},[118,162211,79803],{"class":128},[118,162213,1074],{"class":177},[118,162215,379],{"class":233},[118,162217,135],{"class":128},[15,162219,162220],{},"列表参数：",[109,162222,162224],{"className":30371,"code":162223,"language":30373,"meta":39,"style":39},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[115,162225,162226,162245,162253,162265,162274],{"__ignoreMap":39},[118,162227,162228,162230,162233,162236,162238,162241,162243],{"class":120,"line":121},[118,162229,31940],{"class":124},[118,162231,162232],{"class":1967}," get_total",[118,162234,162235],{"class":128},"(numbers: list[",[118,162237,132],{"class":177},[118,162239,162240],{"class":128},"]) -> ",[118,162242,132],{"class":177},[118,162244,3743],{"class":128},[118,162246,162247,162249,162251],{"class":120,"line":40},[118,162248,159300],{"class":128},[118,162250,174],{"class":124},[118,162252,47326],{"class":177},[118,162254,162255,162257,162260,162262],{"class":120,"line":1183},[118,162256,3205],{"class":124},[118,162258,162259],{"class":128}," number ",[118,162261,26036],{"class":124},[118,162263,162264],{"class":128}," numbers:\n",[118,162266,162267,162269,162271],{"class":120,"line":1198},[118,162268,159975],{"class":128},[118,162270,9482],{"class":124},[118,162272,162273],{"class":128}," number\n",[118,162275,162276,162278],{"class":120,"line":1204},[118,162277,4094],{"class":124},[118,162279,162280],{"class":128}," total\n",[15,162282,162283],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[60,162285,162287],{"id":162286},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[109,162289,162291],{"className":30371,"code":162290,"language":30373,"meta":39,"style":39},"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",[115,162292,162293,162303,162307,162311,162319,162330,162340,162350,162360,162370,162374,162378,162387,162409,162413,162417,162426,162432,162452,162464,162475,162479,162488,162499,162504,162508,162512,162521,162527,162546,162558,162568,162572,162583,162593,162597,162605,162616,162620,162624,162628,162636,162641,162655,162659,162671,162676,162688,162693,162705,162710,162722,162732,162736,162742],{"__ignoreMap":39},[118,162294,162295,162298,162300],{"class":120,"line":121},[118,162296,162297],{"class":128},"balance ",[118,162299,174],{"class":124},[118,162301,162302],{"class":177}," 1000\n",[118,162304,162305],{"class":120,"line":40},[118,162306,2404],{"emptyLinePlaceholder":45},[118,162308,162309],{"class":120,"line":1183},[118,162310,2404],{"emptyLinePlaceholder":45},[118,162312,162313,162315,162317],{"class":120,"line":1198},[118,162314,31940],{"class":124},[118,162316,152026],{"class":1967},[118,162318,31946],{"class":128},[118,162320,162321,162323,162325,162328],{"class":120,"line":1204},[118,162322,31292],{"class":177},[118,162324,129],{"class":128},[118,162326,162327],{"class":233},"\"====== ATM ======\"",[118,162329,135],{"class":128},[118,162331,162332,162334,162336,162338],{"class":120,"line":1218},[118,162333,31292],{"class":177},[118,162335,129],{"class":128},[118,162337,160641],{"class":233},[118,162339,135],{"class":128},[118,162341,162342,162344,162346,162348],{"class":120,"line":1224},[118,162343,31292],{"class":177},[118,162345,129],{"class":128},[118,162347,160652],{"class":233},[118,162349,135],{"class":128},[118,162351,162352,162354,162356,162358],{"class":120,"line":1315},[118,162353,31292],{"class":177},[118,162355,129],{"class":128},[118,162357,160663],{"class":233},[118,162359,135],{"class":128},[118,162361,162362,162364,162366,162368],{"class":120,"line":1321},[118,162363,31292],{"class":177},[118,162365,129],{"class":128},[118,162367,160674],{"class":233},[118,162369,135],{"class":128},[118,162371,162372],{"class":120,"line":1333},[118,162373,2404],{"emptyLinePlaceholder":45},[118,162375,162376],{"class":120,"line":1616},[118,162377,2404],{"emptyLinePlaceholder":45},[118,162379,162380,162382,162385],{"class":120,"line":1621},[118,162381,31940],{"class":124},[118,162383,162384],{"class":1967}," show_balance",[118,162386,31946],{"class":128},[118,162388,162389,162391,162393,162395,162398,162400,162403,162405,162407],{"class":120,"line":1627},[118,162390,31292],{"class":177},[118,162392,129],{"class":128},[118,162394,181],{"class":124},[118,162396,162397],{"class":233},"\"当前余额:",[118,162399,1024],{"class":177},[118,162401,162402],{"class":128},"balance",[118,162404,1074],{"class":177},[118,162406,157005],{"class":233},[118,162408,135],{"class":128},[118,162410,162411],{"class":120,"line":1632},[118,162412,2404],{"emptyLinePlaceholder":45},[118,162414,162415],{"class":120,"line":1646},[118,162416,2404],{"emptyLinePlaceholder":45},[118,162418,162419,162421,162424],{"class":120,"line":1651},[118,162420,31940],{"class":124},[118,162422,162423],{"class":1967}," save_money",[118,162425,31946],{"class":128},[118,162427,162428,162430],{"class":120,"line":1657},[118,162429,161854],{"class":124},[118,162431,150092],{"class":128},[118,162433,162434,162437,162439,162441,162443,162445,162447,162450],{"class":120,"line":1678},[118,162435,162436],{"class":128},"    money ",[118,162438,174],{"class":124},[118,162440,109790],{"class":177},[118,162442,129],{"class":128},[118,162444,53814],{"class":177},[118,162446,129],{"class":128},[118,162448,162449],{"class":233},"\"请输入存款金额:\"",[118,162451,30490],{"class":128},[118,162453,162454,162456,162458,162460,162462],{"class":120,"line":1683},[118,162455,3105],{"class":124},[118,162457,150135],{"class":128},[118,162459,1592],{"class":124},[118,162461,4097],{"class":177},[118,162463,3743],{"class":128},[118,162465,162466,162468,162470,162473],{"class":120,"line":1697},[118,162467,32444],{"class":177},[118,162469,129],{"class":128},[118,162471,162472],{"class":233},"\"金额必须大于0\"",[118,162474,135],{"class":128},[118,162476,162477],{"class":120,"line":1702},[118,162478,152354],{"class":124},[118,162480,162481,162484,162486],{"class":120,"line":1731},[118,162482,162483],{"class":128},"    balance ",[118,162485,9482],{"class":124},[118,162487,150168],{"class":128},[118,162489,162490,162492,162494,162497],{"class":120,"line":1736},[118,162491,31292],{"class":177},[118,162493,129],{"class":128},[118,162495,162496],{"class":233},"\"存款成功\"",[118,162498,135],{"class":128},[118,162500,162501],{"class":120,"line":1753},[118,162502,162503],{"class":128},"    show_balance()\n",[118,162505,162506],{"class":120,"line":1758},[118,162507,2404],{"emptyLinePlaceholder":45},[118,162509,162510],{"class":120,"line":1763},[118,162511,2404],{"emptyLinePlaceholder":45},[118,162513,162514,162516,162519],{"class":120,"line":1768},[118,162515,31940],{"class":124},[118,162517,162518],{"class":1967}," withdraw_money",[118,162520,31946],{"class":128},[118,162522,162523,162525],{"class":120,"line":1782},[118,162524,161854],{"class":124},[118,162526,150092],{"class":128},[118,162528,162529,162531,162533,162535,162537,162539,162541,162544],{"class":120,"line":1787},[118,162530,162436],{"class":128},[118,162532,174],{"class":124},[118,162534,109790],{"class":177},[118,162536,129],{"class":128},[118,162538,53814],{"class":177},[118,162540,129],{"class":128},[118,162542,162543],{"class":233},"\"请输入取款金额:\"",[118,162545,30490],{"class":128},[118,162547,162548,162550,162552,162554,162556],{"class":120,"line":2581},[118,162549,3105],{"class":124},[118,162551,150135],{"class":128},[118,162553,1592],{"class":124},[118,162555,4097],{"class":177},[118,162557,3743],{"class":128},[118,162559,162560,162562,162564,162566],{"class":120,"line":2595},[118,162561,32444],{"class":177},[118,162563,129],{"class":128},[118,162565,162472],{"class":233},[118,162567,135],{"class":128},[118,162569,162570],{"class":120,"line":2603},[118,162571,152354],{"class":124},[118,162573,162574,162576,162578,162580],{"class":120,"line":2608},[118,162575,3105],{"class":124},[118,162577,150135],{"class":128},[118,162579,1088],{"class":124},[118,162581,162582],{"class":128}," balance:\n",[118,162584,162585,162587,162589,162591],{"class":120,"line":2614},[118,162586,32444],{"class":177},[118,162588,129],{"class":128},[118,162590,150230],{"class":233},[118,162592,135],{"class":128},[118,162594,162595],{"class":120,"line":2620},[118,162596,152354],{"class":124},[118,162598,162599,162601,162603],{"class":120,"line":2625},[118,162600,162483],{"class":128},[118,162602,150245],{"class":124},[118,162604,150168],{"class":128},[118,162606,162607,162609,162611,162614],{"class":120,"line":7953},[118,162608,31292],{"class":177},[118,162610,129],{"class":128},[118,162612,162613],{"class":233},"\"取款成功\"",[118,162615,135],{"class":128},[118,162617,162618],{"class":120,"line":7977},[118,162619,162503],{"class":128},[118,162621,162622],{"class":120,"line":7982},[118,162623,2404],{"emptyLinePlaceholder":45},[118,162625,162626],{"class":120,"line":7988},[118,162627,2404],{"emptyLinePlaceholder":45},[118,162629,162630,162632,162634],{"class":120,"line":8015},[118,162631,108656],{"class":124},[118,162633,95285],{"class":177},[118,162635,3743],{"class":128},[118,162637,162638],{"class":120,"line":8020},[118,162639,162640],{"class":128},"    show_menu()\n",[118,162642,162643,162645,162647,162649,162651,162653],{"class":120,"line":8026},[118,162644,160685],{"class":128},[118,162646,174],{"class":124},[118,162648,60598],{"class":177},[118,162650,129],{"class":128},[118,162652,153066],{"class":233},[118,162654,135],{"class":128},[118,162656,162657],{"class":120,"line":8038},[118,162658,2404],{"emptyLinePlaceholder":45},[118,162660,162661,162663,162665,162667,162669],{"class":120,"line":8050},[118,162662,3105],{"class":124},[118,162664,153079],{"class":128},[118,162666,2953],{"class":124},[118,162668,153084],{"class":233},[118,162670,3743],{"class":128},[118,162672,162673],{"class":120,"line":8062},[118,162674,162675],{"class":128},"        show_balance()\n",[118,162677,162678,162680,162682,162684,162686],{"class":120,"line":9721},[118,162679,39286],{"class":124},[118,162681,153079],{"class":128},[118,162683,2953],{"class":124},[118,162685,153103],{"class":233},[118,162687,3743],{"class":128},[118,162689,162690],{"class":120,"line":9746},[118,162691,162692],{"class":128},"        save_money()\n",[118,162694,162695,162697,162699,162701,162703],{"class":120,"line":9769},[118,162696,39286],{"class":124},[118,162698,153079],{"class":128},[118,162700,2953],{"class":124},[118,162702,153121],{"class":233},[118,162704,3743],{"class":128},[118,162706,162707],{"class":120,"line":9793},[118,162708,162709],{"class":128},"        withdraw_money()\n",[118,162711,162712,162714,162716,162718,162720],{"class":120,"line":9798},[118,162713,39286],{"class":124},[118,162715,153079],{"class":128},[118,162717,2953],{"class":124},[118,162719,153175],{"class":233},[118,162721,3743],{"class":128},[118,162723,162724,162726,162728,162730],{"class":120,"line":9803},[118,162725,32444],{"class":177},[118,162727,129],{"class":128},[118,162729,153186],{"class":233},[118,162731,135],{"class":128},[118,162733,162734],{"class":120,"line":9808},[118,162735,31620],{"class":124},[118,162737,162738,162740],{"class":120,"line":9817},[118,162739,158015],{"class":124},[118,162741,3743],{"class":128},[118,162743,162744,162746,162748,162750],{"class":120,"line":9822},[118,162745,32444],{"class":177},[118,162747,129],{"class":128},[118,162749,153207],{"class":233},[118,162751,135],{"class":128},[15,162753,162754],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[60,162756,162758],{"id":162757},"_514-易错点","5.14 易错点",[72,162760,162761,162764,162767,162772,162777,162780],{},[75,162762,162763],{},"函数定义后必须调用才会执行。",[75,162765,162766],{},"函数名后面有括号才是调用。",[75,162768,162769,162771],{},[115,162770,17051],{}," 后面的代码不会执行。",[75,162773,162774,162775,28378],{},"没有返回值的函数默认返回 ",[115,162776,95679],{},[75,162778,162779],{},"局部变量不能在函数外部访问。",[75,162781,162782,162783,162785],{},"不要滥用 ",[115,162784,161819],{},"，更好的方式是让函数返回新值。",[15,162787,162788,162789,162791],{},"例如不用 ",[115,162790,161819],{}," 改写存款：",[109,162793,162795],{"className":30371,"code":162794,"language":30373,"meta":39,"style":39},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[115,162796,162797,162806,162817,162821,162825,162833,162846],{"__ignoreMap":39},[118,162798,162799,162801,162803],{"class":120,"line":121},[118,162800,31940],{"class":124},[118,162802,162423],{"class":1967},[118,162804,162805],{"class":128},"(balance, money):\n",[118,162807,162808,162810,162813,162815],{"class":120,"line":40},[118,162809,4094],{"class":124},[118,162811,162812],{"class":128}," balance ",[118,162814,609],{"class":124},[118,162816,150168],{"class":128},[118,162818,162819],{"class":120,"line":1183},[118,162820,2404],{"emptyLinePlaceholder":45},[118,162822,162823],{"class":120,"line":1198},[118,162824,2404],{"emptyLinePlaceholder":45},[118,162826,162827,162829,162831],{"class":120,"line":1204},[118,162828,162297],{"class":128},[118,162830,174],{"class":124},[118,162832,162302],{"class":177},[118,162834,162835,162837,162839,162842,162844],{"class":120,"line":1218},[118,162836,162297],{"class":128},[118,162838,174],{"class":124},[118,162840,162841],{"class":128}," save_money(balance, ",[118,162843,1726],{"class":177},[118,162845,135],{"class":128},[118,162847,162848,162850],{"class":120,"line":1224},[118,162849,30408],{"class":177},[118,162851,162852],{"class":128},"(balance)\n",[60,162854,162856],{"id":162855},"_515-本章练习","5.15 本章练习",[72,162858,162859,162866,162872,162878,162884],{},[75,162860,162861,162862,162865],{},"定义函数 ",[115,162863,162864],{},"print_student(name, age)","，输出学生信息。",[75,162867,162861,162868,162871],{},[115,162869,162870],{},"get_max(a, b, c)","，返回三个数中的最大值。",[75,162873,162861,162874,162877],{},[115,162875,162876],{},"is_even(num)","，判断一个数是否为偶数。",[75,162879,162861,162880,162883],{},[115,162881,162882],{},"calculate_bmi(weight, height)","，返回 BMI。",[75,162885,162886],{},"把第 4 章的菜单程序拆分成多个函数。",[5131,162888,162889],{},"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":39,"searchDepth":40,"depth":40,"links":162891},[162892,162893,162894,162895,162896,162897,162898,162899,162900,162904,162905,162906,162907,162908,162909],{"id":160912,"depth":40,"text":160913},{"id":160953,"depth":40,"text":160954},{"id":161043,"depth":40,"text":161044},{"id":161124,"depth":40,"text":161125},{"id":161257,"depth":40,"text":161258},{"id":161379,"depth":40,"text":161380},{"id":161501,"depth":40,"text":161502},{"id":161578,"depth":40,"text":161579},{"id":161700,"depth":40,"text":161701,"children":162901},[162902,162903],{"id":161704,"depth":1183,"text":161705},{"id":161762,"depth":1183,"text":161763},{"id":161891,"depth":40,"text":161892},{"id":162017,"depth":40,"text":162018},{"id":162130,"depth":40,"text":162131},{"id":162286,"depth":40,"text":162287},{"id":162757,"depth":40,"text":162758},{"id":162855,"depth":40,"text":162856},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160904,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162916,"title":162917,"body":162918,"description":42,"extension":43,"meta":165962,"navigation":45,"path":165963,"seo":165964,"stem":165965,"__hash__":165966},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162919,"toc":165943},[162920,162923,162927,162930,162933,163037,163040,163044,163047,163127,163130,163134,163137,163197,163200,163236,163239,163254,163258,163331,163334,163389,163392,163462,163465,163549,163559,163617,163621,163666,163669,163695,163698,163804,163808,163811,163853,163856,163920,163923,163927,163930,163991,163994,164024,164027,164065,164069,164072,164081,164084,164208,164211,164252,164256,164259,164270,164310,164313,164328,164333,164336,164403,164406,164496,164500,164503,164551,164554,164581,164583,164613,164616,164636,164639,164670,164673,164706,164710,164713,164737,164740,164764,164767,164791,164795,164798,164928,164931,165011,165014,165089,165093,165096,165146,165149,165191,165194,165218,165220,165244,165247,165302,165305,165371,165375,165378,165381,165419,165422,165475,165478,165524,165527,165560,165563,165567,165886,165890,165919,165923,165940],[10,162921,162917],{"id":162922},"_6-数据容器",[60,162924,162926],{"id":162925},"_61-什么是数据容器","6.1 什么是数据容器",[15,162928,162929],{},"数据容器用于一次保存多个数据。",[15,162931,162932],{},"常见容器：",[266,162934,162935,162952],{},[269,162936,162937],{},[272,162938,162939,162941,162944,162947,162950],{},[275,162940,25764],{},[275,162942,162943],{},"是否有序",[275,162945,162946],{},"是否可变",[275,162948,162949],{},"是否允许重复",[275,162951,27485],{},[313,162953,162954,162972,162988,163003,163020],{},[272,162955,162956,162959,162962,162965,162968],{},[318,162957,162958],{},"list列表",[318,162960,162961],{},"有序",[318,162963,162964],{},"可变",[318,162966,162967],{},"允许",[318,162969,162970],{},[115,162971,155250],{},[272,162973,162974,162977,162979,162982,162984],{},[318,162975,162976],{},"tuple元组",[318,162978,162961],{},[318,162980,162981],{},"不可变",[318,162983,162967],{},[318,162985,162986],{},[115,162987,155263],{},[272,162989,162990,162993,162995,162997,162999],{},[318,162991,162992],{},"str字符串",[318,162994,162961],{},[318,162996,162981],{},[318,162998,162967],{},[318,163000,163001],{},[115,163002,155873],{},[272,163004,163005,163008,163011,163013,163016],{},[318,163006,163007],{},"set集合",[318,163009,163010],{},"无序",[318,163012,162964],{},[318,163014,163015],{},"不允许",[318,163017,163018],{},[115,163019,155288],{},[272,163021,163022,163025,163027,163029,163032],{},[318,163023,163024],{},"dict字典",[318,163026,162961],{},[318,163028,162964],{},[318,163030,163031],{},"key不允许重复",[318,163033,163034],{},[115,163035,163036],{},"{\"name\": \"小明\"}",[15,163038,163039],{},"Python 3.7 之后，字典保持插入顺序。",[60,163041,163043],{"id":163042},"_62-列表list","6.2 列表list",[15,163045,163046],{},"列表用于保存一组有顺序的数据。",[109,163048,163050],{"className":30371,"code":163049,"language":30373,"meta":39,"style":39},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[115,163051,163052,163072,163097,163118],{"__ignoreMap":39},[118,163053,163054,163056,163058,163060,163062,163064,163066,163068,163070],{"class":120,"line":121},[118,163055,160373],{"class":128},[118,163057,174],{"class":124},[118,163059,52219],{"class":128},[118,163061,149881],{"class":233},[118,163063,12440],{"class":128},[118,163065,150929],{"class":233},[118,163067,12440],{"class":128},[118,163069,159724],{"class":233},[118,163071,33239],{"class":128},[118,163073,163074,163077,163079,163081,163083,163085,163087,163089,163091,163093,163095],{"class":120,"line":40},[118,163075,163076],{"class":128},"numbers ",[118,163078,174],{"class":124},[118,163080,52219],{"class":128},[118,163082,346],{"class":177},[118,163084,12440],{"class":128},[118,163086,206],{"class":177},[118,163088,12440],{"class":128},[118,163090,200],{"class":177},[118,163092,12440],{"class":128},[118,163094,421],{"class":177},[118,163096,33239],{"class":128},[118,163098,163099,163102,163104,163106,163108,163110,163112,163114,163116],{"class":120,"line":1183},[118,163100,163101],{"class":128},"mixed ",[118,163103,174],{"class":124},[118,163105,52219],{"class":128},[118,163107,149881],{"class":233},[118,163109,12440],{"class":128},[118,163111,778],{"class":177},[118,163113,12440],{"class":128},[118,163115,31469],{"class":177},[118,163117,33239],{"class":128},[118,163119,163120,163123,163125],{"class":120,"line":1198},[118,163121,163122],{"class":128},"empty ",[118,163124,174],{"class":124},[118,163126,51831],{"class":128},[15,163128,163129],{},"推荐一个列表中保存同类数据，代码更清晰。",[60,163131,163133],{"id":163132},"_63-列表索引","6.3 列表索引",[15,163135,163136],{},"正向索引从 0 开始：",[109,163138,163140],{"className":30371,"code":163139,"language":30373,"meta":39,"style":39},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[115,163141,163142,163162,163166,163177,163187],{"__ignoreMap":39},[118,163143,163144,163146,163148,163150,163152,163154,163156,163158,163160],{"class":120,"line":121},[118,163145,160373],{"class":128},[118,163147,174],{"class":124},[118,163149,52219],{"class":128},[118,163151,149881],{"class":233},[118,163153,12440],{"class":128},[118,163155,150929],{"class":233},[118,163157,12440],{"class":128},[118,163159,159724],{"class":233},[118,163161,33239],{"class":128},[118,163163,163164],{"class":120,"line":40},[118,163165,2404],{"emptyLinePlaceholder":45},[118,163167,163168,163170,163173,163175],{"class":120,"line":1183},[118,163169,30408],{"class":177},[118,163171,163172],{"class":128},"(names[",[118,163174,320],{"class":177},[118,163176,4661],{"class":128},[118,163178,163179,163181,163183,163185],{"class":120,"line":1198},[118,163180,30408],{"class":177},[118,163182,163172],{"class":128},[118,163184,346],{"class":177},[118,163186,4661],{"class":128},[118,163188,163189,163191,163193,163195],{"class":120,"line":1204},[118,163190,30408],{"class":177},[118,163192,163172],{"class":128},[118,163194,206],{"class":177},[118,163196,4661],{"class":128},[15,163198,163199],{},"反向索引从 -1 开始：",[109,163201,163203],{"className":30371,"code":163202,"language":30373,"meta":39,"style":39},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[115,163204,163205,163221],{"__ignoreMap":39},[118,163206,163207,163209,163211,163213,163215,163218],{"class":120,"line":121},[118,163208,30408],{"class":177},[118,163210,163172],{"class":128},[118,163212,660],{"class":124},[118,163214,346],{"class":177},[118,163216,163217],{"class":128},"])  ",[118,163219,163220],{"class":187},"# 小刚\n",[118,163222,163223,163225,163227,163229,163231,163233],{"class":120,"line":40},[118,163224,30408],{"class":177},[118,163226,163172],{"class":128},[118,163228,660],{"class":124},[118,163230,206],{"class":177},[118,163232,163217],{"class":128},[118,163234,163235],{"class":187},"# 小红\n",[15,163237,163238],{},"索引越界会报错：",[109,163240,163242],{"className":30371,"code":163241,"language":30373,"meta":39,"style":39},"print(names[3])\n",[115,163243,163244],{"__ignoreMap":39},[118,163245,163246,163248,163250,163252],{"class":120,"line":121},[118,163247,30408],{"class":177},[118,163249,163172],{"class":128},[118,163251,200],{"class":177},[118,163253,4661],{"class":128},[60,163255,163257],{"id":163256},"_64-列表常用方法","6.4 列表常用方法",[109,163259,163261],{"className":30371,"code":163260,"language":30373,"meta":39,"style":39},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[115,163262,163263,163279,163283,163292,163306,163320,163324],{"__ignoreMap":39},[118,163264,163265,163267,163269,163271,163273,163275,163277],{"class":120,"line":121},[118,163266,160373],{"class":128},[118,163268,174],{"class":124},[118,163270,52219],{"class":128},[118,163272,149881],{"class":233},[118,163274,12440],{"class":128},[118,163276,150929],{"class":233},[118,163278,33239],{"class":128},[118,163280,163281],{"class":120,"line":40},[118,163282,2404],{"emptyLinePlaceholder":45},[118,163284,163285,163288,163290],{"class":120,"line":1183},[118,163286,163287],{"class":128},"names.append(",[118,163289,159724],{"class":233},[118,163291,135],{"class":128},[118,163293,163294,163297,163299,163301,163304],{"class":120,"line":1198},[118,163295,163296],{"class":128},"names.insert(",[118,163298,346],{"class":177},[118,163300,12440],{"class":128},[118,163302,163303],{"class":233},"\"小李\"",[118,163305,135],{"class":128},[118,163307,163308,163311,163313,163315,163318],{"class":120,"line":1204},[118,163309,163310],{"class":128},"names.extend([",[118,163312,8688],{"class":233},[118,163314,12440],{"class":128},[118,163316,163317],{"class":233},"\"小赵\"",[118,163319,4661],{"class":128},[118,163321,163322],{"class":120,"line":1218},[118,163323,2404],{"emptyLinePlaceholder":45},[118,163325,163326,163328],{"class":120,"line":1224},[118,163327,30408],{"class":177},[118,163329,163330],{"class":128},"(names)\n",[15,163332,163333],{},"删除元素：",[109,163335,163337],{"className":30371,"code":163336,"language":30373,"meta":39,"style":39},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[115,163338,163339,163348,163358,163372,163384],{"__ignoreMap":39},[118,163340,163341,163344,163346],{"class":120,"line":121},[118,163342,163343],{"class":128},"names.remove(",[118,163345,150929],{"class":233},[118,163347,135],{"class":128},[118,163349,163350,163353,163355],{"class":120,"line":40},[118,163351,163352],{"class":128},"last ",[118,163354,174],{"class":124},[118,163356,163357],{"class":128}," names.pop()\n",[118,163359,163360,163363,163365,163368,163370],{"class":120,"line":1183},[118,163361,163362],{"class":128},"first ",[118,163364,174],{"class":124},[118,163366,163367],{"class":128}," names.pop(",[118,163369,320],{"class":177},[118,163371,135],{"class":128},[118,163373,163374,163377,163380,163382],{"class":120,"line":1198},[118,163375,163376],{"class":124},"del",[118,163378,163379],{"class":128}," names[",[118,163381,320],{"class":177},[118,163383,33239],{"class":128},[118,163385,163386],{"class":120,"line":1204},[118,163387,163388],{"class":128},"names.clear()\n",[15,163390,163391],{},"查询和统计：",[109,163393,163395],{"className":30371,"code":163394,"language":30373,"meta":39,"style":39},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[115,163396,163397,163425,163429,163440,163451],{"__ignoreMap":39},[118,163398,163399,163401,163403,163405,163407,163409,163411,163413,163415,163417,163419,163421,163423],{"class":120,"line":121},[118,163400,163076],{"class":128},[118,163402,174],{"class":124},[118,163404,52219],{"class":128},[118,163406,346],{"class":177},[118,163408,12440],{"class":128},[118,163410,206],{"class":177},[118,163412,12440],{"class":128},[118,163414,200],{"class":177},[118,163416,12440],{"class":128},[118,163418,206],{"class":177},[118,163420,12440],{"class":128},[118,163422,421],{"class":177},[118,163424,33239],{"class":128},[118,163426,163427],{"class":120,"line":40},[118,163428,2404],{"emptyLinePlaceholder":45},[118,163430,163431,163433,163436,163438],{"class":120,"line":1183},[118,163432,30408],{"class":177},[118,163434,163435],{"class":128},"(numbers.index(",[118,163437,200],{"class":177},[118,163439,30490],{"class":128},[118,163441,163442,163444,163447,163449],{"class":120,"line":1198},[118,163443,30408],{"class":177},[118,163445,163446],{"class":128},"(numbers.count(",[118,163448,206],{"class":177},[118,163450,30490],{"class":128},[118,163452,163453,163455,163457,163459],{"class":120,"line":1204},[118,163454,30408],{"class":177},[118,163456,129],{"class":128},[118,163458,7363],{"class":177},[118,163460,163461],{"class":128},"(numbers))\n",[15,163463,163464],{},"排序：",[109,163466,163468],{"className":30371,"code":163467,"language":30373,"meta":39,"style":39},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[115,163469,163470,163494,163498,163503,163510,163514,163528,163534,163538,163543],{"__ignoreMap":39},[118,163471,163472,163474,163476,163478,163480,163482,163484,163486,163488,163490,163492],{"class":120,"line":121},[118,163473,163076],{"class":128},[118,163475,174],{"class":124},[118,163477,52219],{"class":128},[118,163479,200],{"class":177},[118,163481,12440],{"class":128},[118,163483,346],{"class":177},[118,163485,12440],{"class":128},[118,163487,447],{"class":177},[118,163489,12440],{"class":128},[118,163491,206],{"class":177},[118,163493,33239],{"class":128},[118,163495,163496],{"class":120,"line":40},[118,163497,2404],{"emptyLinePlaceholder":45},[118,163499,163500],{"class":120,"line":1183},[118,163501,163502],{"class":128},"numbers.sort()\n",[118,163504,163505,163507],{"class":120,"line":1198},[118,163506,30408],{"class":177},[118,163508,163509],{"class":128},"(numbers)\n",[118,163511,163512],{"class":120,"line":1204},[118,163513,2404],{"emptyLinePlaceholder":45},[118,163515,163516,163519,163522,163524,163526],{"class":120,"line":1218},[118,163517,163518],{"class":128},"numbers.sort(",[118,163520,163521],{"class":5221},"reverse",[118,163523,174],{"class":124},[118,163525,31469],{"class":177},[118,163527,135],{"class":128},[118,163529,163530,163532],{"class":120,"line":1224},[118,163531,30408],{"class":177},[118,163533,163509],{"class":128},[118,163535,163536],{"class":120,"line":1315},[118,163537,2404],{"emptyLinePlaceholder":45},[118,163539,163540],{"class":120,"line":1321},[118,163541,163542],{"class":128},"numbers.reverse()\n",[118,163544,163545,163547],{"class":120,"line":1333},[118,163546,30408],{"class":177},[118,163548,163509],{"class":128},[15,163550,163551,163554,163555,163558],{},[115,163552,163553],{},"sort()"," 会修改原列表，",[115,163556,163557],{},"sorted()"," 返回新列表。",[109,163560,163562],{"className":30371,"code":163561,"language":30373,"meta":39,"style":39},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[115,163563,163564,163588,163600,163604,163610],{"__ignoreMap":39},[118,163565,163566,163568,163570,163572,163574,163576,163578,163580,163582,163584,163586],{"class":120,"line":121},[118,163567,163076],{"class":128},[118,163569,174],{"class":124},[118,163571,52219],{"class":128},[118,163573,200],{"class":177},[118,163575,12440],{"class":128},[118,163577,346],{"class":177},[118,163579,12440],{"class":128},[118,163581,447],{"class":177},[118,163583,12440],{"class":128},[118,163585,206],{"class":177},[118,163587,33239],{"class":128},[118,163589,163590,163593,163595,163598],{"class":120,"line":40},[118,163591,163592],{"class":128},"new_numbers ",[118,163594,174],{"class":124},[118,163596,163597],{"class":177}," sorted",[118,163599,163509],{"class":128},[118,163601,163602],{"class":120,"line":1183},[118,163603,2404],{"emptyLinePlaceholder":45},[118,163605,163606,163608],{"class":120,"line":1198},[118,163607,30408],{"class":177},[118,163609,163509],{"class":128},[118,163611,163612,163614],{"class":120,"line":1204},[118,163613,30408],{"class":177},[118,163615,163616],{"class":128},"(new_numbers)\n",[60,163618,163620],{"id":163619},"_65-列表遍历","6.5 列表遍历",[109,163622,163624],{"className":30371,"code":163623,"language":30373,"meta":39,"style":39},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[115,163625,163626,163646,163650,163660],{"__ignoreMap":39},[118,163627,163628,163630,163632,163634,163636,163638,163640,163642,163644],{"class":120,"line":121},[118,163629,160373],{"class":128},[118,163631,174],{"class":124},[118,163633,52219],{"class":128},[118,163635,149881],{"class":233},[118,163637,12440],{"class":128},[118,163639,150929],{"class":233},[118,163641,12440],{"class":128},[118,163643,159724],{"class":233},[118,163645,33239],{"class":128},[118,163647,163648],{"class":120,"line":40},[118,163649,2404],{"emptyLinePlaceholder":45},[118,163651,163652,163654,163656,163658],{"class":120,"line":1183},[118,163653,3029],{"class":124},[118,163655,160409],{"class":128},[118,163657,26036],{"class":124},[118,163659,160414],{"class":128},[118,163661,163662,163664],{"class":120,"line":1198},[118,163663,31292],{"class":177},[118,163665,150653],{"class":128},[15,163667,163668],{},"需要索引时：",[109,163670,163672],{"className":30371,"code":163671,"language":30373,"meta":39,"style":39},"for index, name in enumerate(names):\n    print(index, name)\n",[115,163673,163674,163688],{"__ignoreMap":39},[118,163675,163676,163678,163681,163683,163685],{"class":120,"line":121},[118,163677,3029],{"class":124},[118,163679,163680],{"class":128}," index, name ",[118,163682,26036],{"class":124},[118,163684,31599],{"class":177},[118,163686,163687],{"class":128},"(names):\n",[118,163689,163690,163692],{"class":120,"line":40},[118,163691,31292],{"class":177},[118,163693,163694],{"class":128},"(index, name)\n",[15,163696,163697],{},"统计总分：",[109,163699,163701],{"className":30371,"code":163700,"language":30373,"meta":39,"style":39},"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",[115,163702,163703,163728,163736,163740,163751,163759,163763,163780],{"__ignoreMap":39},[118,163704,163705,163708,163710,163712,163714,163716,163718,163720,163722,163724,163726],{"class":120,"line":121},[118,163706,163707],{"class":128},"scores ",[118,163709,174],{"class":124},[118,163711,52219],{"class":128},[118,163713,990],{"class":177},[118,163715,12440],{"class":128},[118,163717,864],{"class":177},[118,163719,12440],{"class":128},[118,163721,382],{"class":177},[118,163723,12440],{"class":128},[118,163725,689],{"class":177},[118,163727,33239],{"class":128},[118,163729,163730,163732,163734],{"class":120,"line":40},[118,163731,157253],{"class":128},[118,163733,174],{"class":124},[118,163735,47326],{"class":177},[118,163737,163738],{"class":120,"line":1183},[118,163739,2404],{"emptyLinePlaceholder":45},[118,163741,163742,163744,163746,163748],{"class":120,"line":1198},[118,163743,3029],{"class":124},[118,163745,157776],{"class":128},[118,163747,26036],{"class":124},[118,163749,163750],{"class":128}," scores:\n",[118,163752,163753,163755,163757],{"class":120,"line":1204},[118,163754,159300],{"class":128},[118,163756,9482],{"class":124},[118,163758,1583],{"class":128},[118,163760,163761],{"class":120,"line":1218},[118,163762,2404],{"emptyLinePlaceholder":45},[118,163764,163765,163768,163770,163773,163775,163777],{"class":120,"line":1224},[118,163766,163767],{"class":128},"avg ",[118,163769,174],{"class":124},[118,163771,163772],{"class":128}," total ",[118,163774,712],{"class":124},[118,163776,7336],{"class":177},[118,163778,163779],{"class":128},"(scores)\n",[118,163781,163782,163784,163786,163788,163791,163793,163796,163798,163800,163802],{"class":120,"line":1315},[118,163783,30408],{"class":177},[118,163785,129],{"class":128},[118,163787,181],{"class":124},[118,163789,163790],{"class":233},"\"平均分:",[118,163792,1024],{"class":177},[118,163794,163795],{"class":128},"avg",[118,163797,157152],{"class":124},[118,163799,1074],{"class":177},[118,163801,379],{"class":233},[118,163803,135],{"class":128},[60,163805,163807],{"id":163806},"_66-元组tuple","6.6 元组tuple",[15,163809,163810],{},"元组和列表类似，但不可修改。",[109,163812,163814],{"className":30371,"code":163813,"language":30373,"meta":39,"style":39},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[115,163815,163816,163833],{"__ignoreMap":39},[118,163817,163818,163821,163823,163825,163827,163829,163831],{"class":120,"line":121},[118,163819,163820],{"class":128},"point ",[118,163822,174],{"class":124},[118,163824,1662],{"class":128},[118,163826,574],{"class":177},[118,163828,12440],{"class":128},[118,163830,828],{"class":177},[118,163832,135],{"class":128},[118,163834,163835,163837,163839,163841,163843,163845,163847,163849,163851],{"class":120,"line":40},[118,163836,116307],{"class":128},[118,163838,174],{"class":124},[118,163840,1662],{"class":128},[118,163842,149881],{"class":233},[118,163844,12440],{"class":128},[118,163846,778],{"class":177},[118,163848,12440],{"class":128},[118,163850,69262],{"class":233},[118,163852,135],{"class":128},[15,163854,163855],{},"单元素元组必须加逗号：",[109,163857,163859],{"className":30371,"code":163858,"language":30373,"meta":39,"style":39},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[115,163860,163861,163875,163888,163892,163906],{"__ignoreMap":39},[118,163862,163863,163866,163868,163870,163872],{"class":120,"line":121},[118,163864,163865],{"class":128},"t1 ",[118,163867,174],{"class":124},[118,163869,1662],{"class":128},[118,163871,574],{"class":177},[118,163873,163874],{"class":128},",)\n",[118,163876,163877,163880,163882,163884,163886],{"class":120,"line":40},[118,163878,163879],{"class":128},"t2 ",[118,163881,174],{"class":124},[118,163883,1662],{"class":128},[118,163885,574],{"class":177},[118,163887,135],{"class":128},[118,163889,163890],{"class":120,"line":1183},[118,163891,2404],{"emptyLinePlaceholder":45},[118,163893,163894,163896,163898,163900,163903],{"class":120,"line":1198},[118,163895,30408],{"class":177},[118,163897,129],{"class":128},[118,163899,103100],{"class":177},[118,163901,163902],{"class":128},"(t1))  ",[118,163904,163905],{"class":187},"# tuple\n",[118,163907,163908,163910,163912,163914,163917],{"class":120,"line":1204},[118,163909,30408],{"class":177},[118,163911,129],{"class":128},[118,163913,103100],{"class":177},[118,163915,163916],{"class":128},"(t2))  ",[118,163918,163919],{"class":187},"# int\n",[15,163921,163922],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[60,163924,163926],{"id":163925},"_67-字符串str","6.7 字符串str",[15,163928,163929],{},"字符串也是序列，可以索引、切片和遍历。",[109,163931,163933],{"className":30371,"code":163932,"language":30373,"meta":39,"style":39},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[115,163934,163935,163943,163947,163958,163970,163974,163985],{"__ignoreMap":39},[118,163936,163937,163939,163941],{"class":120,"line":121},[118,163938,156437],{"class":128},[118,163940,174],{"class":124},[118,163942,159674],{"class":233},[118,163944,163945],{"class":120,"line":40},[118,163946,2404],{"emptyLinePlaceholder":45},[118,163948,163949,163951,163954,163956],{"class":120,"line":1183},[118,163950,30408],{"class":177},[118,163952,163953],{"class":128},"(text[",[118,163955,320],{"class":177},[118,163957,4661],{"class":128},[118,163959,163960,163962,163964,163966,163968],{"class":120,"line":1198},[118,163961,30408],{"class":177},[118,163963,163953],{"class":128},[118,163965,660],{"class":124},[118,163967,346],{"class":177},[118,163969,4661],{"class":128},[118,163971,163972],{"class":120,"line":1204},[118,163973,2404],{"emptyLinePlaceholder":45},[118,163975,163976,163978,163980,163982],{"class":120,"line":1218},[118,163977,3029],{"class":124},[118,163979,159685],{"class":128},[118,163981,26036],{"class":124},[118,163983,163984],{"class":128}," text:\n",[118,163986,163987,163989],{"class":120,"line":1224},[118,163988,31292],{"class":177},[118,163990,159696],{"class":128},[15,163992,163993],{},"字符串不可变：",[109,163995,163997],{"className":30371,"code":163996,"language":30373,"meta":39,"style":39},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[115,163998,163999,164007],{"__ignoreMap":39},[118,164000,164001,164003,164005],{"class":120,"line":121},[118,164002,156437],{"class":128},[118,164004,174],{"class":124},[118,164006,159674],{"class":233},[118,164008,164009,164012,164014,164016,164018,164021],{"class":120,"line":40},[118,164010,164011],{"class":128},"text[",[118,164013,320],{"class":177},[118,164015,4447],{"class":128},[118,164017,174],{"class":124},[118,164019,164020],{"class":233}," \"P\"",[118,164022,164023],{"class":187},"  # 报错\n",[15,164025,164026],{},"如果要得到新字符串：",[109,164028,164030],{"className":30371,"code":164029,"language":30373,"meta":39,"style":39},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[115,164031,164032,164040,164058],{"__ignoreMap":39},[118,164033,164034,164036,164038],{"class":120,"line":121},[118,164035,156437],{"class":128},[118,164037,174],{"class":124},[118,164039,159674],{"class":233},[118,164041,164042,164044,164046,164048,164050,164053,164055],{"class":120,"line":40},[118,164043,156437],{"class":128},[118,164045,174],{"class":124},[118,164047,164020],{"class":233},[118,164049,45559],{"class":124},[118,164051,164052],{"class":128}," text[",[118,164054,346],{"class":177},[118,164056,164057],{"class":128},":]\n",[118,164059,164060,164062],{"class":120,"line":1183},[118,164061,30408],{"class":177},[118,164063,164064],{"class":128},"(text)\n",[60,164066,164068],{"id":164067},"_68-切片","6.8 切片",[15,164070,164071],{},"切片用于从序列中取一部分。",[109,164073,164075],{"className":30371,"code":164074,"language":30373,"meta":39,"style":39},"序列[开始:结束:步长]\n",[115,164076,164077],{"__ignoreMap":39},[118,164078,164079],{"class":120,"line":121},[118,164080,164074],{"class":128},[15,164082,164083],{},"结束位置不包含。",[109,164085,164087],{"className":30371,"code":164086,"language":30373,"meta":39,"style":39},"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",[115,164088,164089,164126,164130,164149,164164,164178,164192],{"__ignoreMap":39},[118,164090,164091,164094,164096,164098,164100,164102,164104,164106,164108,164110,164112,164114,164116,164118,164120,164122,164124],{"class":120,"line":121},[118,164092,164093],{"class":128},"nums ",[118,164095,174],{"class":124},[118,164097,52219],{"class":128},[118,164099,320],{"class":177},[118,164101,12440],{"class":128},[118,164103,346],{"class":177},[118,164105,12440],{"class":128},[118,164107,206],{"class":177},[118,164109,12440],{"class":128},[118,164111,200],{"class":177},[118,164113,12440],{"class":128},[118,164115,421],{"class":177},[118,164117,12440],{"class":128},[118,164119,447],{"class":177},[118,164121,12440],{"class":128},[118,164123,472],{"class":177},[118,164125,33239],{"class":128},[118,164127,164128],{"class":120,"line":40},[118,164129,2404],{"emptyLinePlaceholder":45},[118,164131,164132,164134,164137,164139,164141,164143,164146],{"class":120,"line":1183},[118,164133,30408],{"class":177},[118,164135,164136],{"class":128},"(nums[",[118,164138,346],{"class":177},[118,164140,987],{"class":128},[118,164142,421],{"class":177},[118,164144,164145],{"class":128},"])    ",[118,164147,164148],{"class":187},"# [1, 2, 3]\n",[118,164150,164151,164153,164156,164158,164161],{"class":120,"line":1198},[118,164152,30408],{"class":177},[118,164154,164155],{"class":128},"(nums[:",[118,164157,200],{"class":177},[118,164159,164160],{"class":128},"])     ",[118,164162,164163],{"class":187},"# [0, 1, 2]\n",[118,164165,164166,164168,164170,164172,164175],{"class":120,"line":1204},[118,164167,30408],{"class":177},[118,164169,164136],{"class":128},[118,164171,200],{"class":177},[118,164173,164174],{"class":128},":])     ",[118,164176,164177],{"class":187},"# [3, 4, 5, 6]\n",[118,164179,164180,164182,164185,164187,164189],{"class":120,"line":1218},[118,164181,30408],{"class":177},[118,164183,164184],{"class":128},"(nums[::",[118,164186,206],{"class":177},[118,164188,164145],{"class":128},[118,164190,164191],{"class":187},"# [0, 2, 4, 6]\n",[118,164193,164194,164196,164198,164200,164202,164205],{"class":120,"line":1224},[118,164195,30408],{"class":177},[118,164197,164184],{"class":128},[118,164199,660],{"class":124},[118,164201,346],{"class":177},[118,164203,164204],{"class":128},"])   ",[118,164206,164207],{"class":187},"# 反转\n",[15,164209,164210],{},"字符串切片：",[109,164212,164214],{"className":30371,"code":164213,"language":30373,"meta":39,"style":39},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[115,164215,164216,164225,164239],{"__ignoreMap":39},[118,164217,164218,164220,164222],{"class":120,"line":121},[118,164219,156437],{"class":128},[118,164221,174],{"class":124},[118,164223,164224],{"class":233}," \"abcdef\"\n",[118,164226,164227,164229,164231,164233,164235,164237],{"class":120,"line":40},[118,164228,30408],{"class":177},[118,164230,163953],{"class":128},[118,164232,346],{"class":177},[118,164234,987],{"class":128},[118,164236,421],{"class":177},[118,164238,4661],{"class":128},[118,164240,164241,164243,164246,164248,164250],{"class":120,"line":1183},[118,164242,30408],{"class":177},[118,164244,164245],{"class":128},"(text[::",[118,164247,660],{"class":124},[118,164249,346],{"class":177},[118,164251,4661],{"class":128},[60,164253,164255],{"id":164254},"_69-集合set","6.9 集合set",[15,164257,164258],{},"集合特点：",[72,164260,164261,164264,164267],{},[75,164262,164263],{},"无序。",[75,164265,164266],{},"元素不重复。",[75,164268,164269],{},"可以做交集、并集、差集。",[109,164271,164273],{"className":30371,"code":164272,"language":30373,"meta":39,"style":39},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[115,164274,164275,164303],{"__ignoreMap":39},[118,164276,164277,164279,164281,164283,164285,164287,164289,164291,164293,164295,164297,164299,164301],{"class":120,"line":121},[118,164278,164093],{"class":128},[118,164280,174],{"class":124},[118,164282,4452],{"class":128},[118,164284,346],{"class":177},[118,164286,12440],{"class":128},[118,164288,206],{"class":177},[118,164290,12440],{"class":128},[118,164292,200],{"class":177},[118,164294,12440],{"class":128},[118,164296,200],{"class":177},[118,164298,12440],{"class":128},[118,164300,421],{"class":177},[118,164302,1569],{"class":128},[118,164304,164305,164307],{"class":120,"line":40},[118,164306,30408],{"class":177},[118,164308,164309],{"class":128},"(nums)\n",[15,164311,164312],{},"创建空集合：",[109,164314,164316],{"className":30371,"code":164315,"language":30373,"meta":39,"style":39},"s = set()\n",[115,164317,164318],{"__ignoreMap":39},[118,164319,164320,164322,164324,164326],{"class":120,"line":121},[118,164321,10584],{"class":128},[118,164323,174],{"class":124},[118,164325,119715],{"class":177},[118,164327,1980],{"class":128},[15,164329,9030,164330,164332],{},[115,164331,32452],{}," 是空字典，不是空集合。",[15,164334,164335],{},"集合常用操作：",[109,164337,164339],{"className":30371,"code":164338,"language":30373,"meta":39,"style":39},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[115,164340,164341,164361,164365,164374,164383,164392],{"__ignoreMap":39},[118,164342,164343,164345,164347,164349,164351,164353,164355,164357,164359],{"class":120,"line":121},[118,164344,10584],{"class":128},[118,164346,174],{"class":124},[118,164348,4452],{"class":128},[118,164350,346],{"class":177},[118,164352,12440],{"class":128},[118,164354,206],{"class":177},[118,164356,12440],{"class":128},[118,164358,200],{"class":177},[118,164360,1569],{"class":128},[118,164362,164363],{"class":120,"line":40},[118,164364,2404],{"emptyLinePlaceholder":45},[118,164366,164367,164370,164372],{"class":120,"line":1183},[118,164368,164369],{"class":128},"s.add(",[118,164371,421],{"class":177},[118,164373,135],{"class":128},[118,164375,164376,164379,164381],{"class":120,"line":1198},[118,164377,164378],{"class":128},"s.remove(",[118,164380,206],{"class":177},[118,164382,135],{"class":128},[118,164384,164385,164388,164390],{"class":120,"line":1204},[118,164386,164387],{"class":128},"s.discard(",[118,164389,574],{"class":177},[118,164391,135],{"class":128},[118,164393,164394,164396,164398,164400],{"class":120,"line":1218},[118,164395,30408],{"class":177},[118,164397,129],{"class":128},[118,164399,7363],{"class":177},[118,164401,164402],{"class":128},"(s))\n",[15,164404,164405],{},"交并差：",[109,164407,164409],{"className":30371,"code":164408,"language":30373,"meta":39,"style":39},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[115,164410,164411,164431,164451,164455,164470,164483],{"__ignoreMap":39},[118,164412,164413,164415,164417,164419,164421,164423,164425,164427,164429],{"class":120,"line":121},[118,164414,10924],{"class":128},[118,164416,174],{"class":124},[118,164418,4452],{"class":128},[118,164420,346],{"class":177},[118,164422,12440],{"class":128},[118,164424,206],{"class":177},[118,164426,12440],{"class":128},[118,164428,200],{"class":177},[118,164430,1569],{"class":128},[118,164432,164433,164435,164437,164439,164441,164443,164445,164447,164449],{"class":120,"line":40},[118,164434,10950],{"class":128},[118,164436,174],{"class":124},[118,164438,4452],{"class":128},[118,164440,200],{"class":177},[118,164442,12440],{"class":128},[118,164444,421],{"class":177},[118,164446,12440],{"class":128},[118,164448,447],{"class":177},[118,164450,1569],{"class":128},[118,164452,164453],{"class":120,"line":1183},[118,164454,2404],{"emptyLinePlaceholder":45},[118,164456,164457,164459,164462,164464,164467],{"class":120,"line":1198},[118,164458,30408],{"class":177},[118,164460,164461],{"class":128},"(a ",[118,164463,481],{"class":124},[118,164465,164466],{"class":128}," b)  ",[118,164468,164469],{"class":187},"# 交集\n",[118,164471,164472,164474,164476,164478,164480],{"class":120,"line":1204},[118,164473,30408],{"class":177},[118,164475,164461],{"class":128},[118,164477,1049],{"class":124},[118,164479,164466],{"class":128},[118,164481,164482],{"class":187},"# 并集\n",[118,164484,164485,164487,164489,164491,164493],{"class":120,"line":1218},[118,164486,30408],{"class":177},[118,164488,164461],{"class":128},[118,164490,660],{"class":124},[118,164492,164466],{"class":128},[118,164494,164495],{"class":187},"# 差集\n",[60,164497,164499],{"id":164498},"_610-字典dict","6.10 字典dict",[15,164501,164502],{},"字典通过 key-value 保存数据。",[109,164504,164506],{"className":30371,"code":164505,"language":30373,"meta":39,"style":39},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[115,164507,164508,164516,164526,164537,164547],{"__ignoreMap":39},[118,164509,164510,164512,164514],{"class":120,"line":121},[118,164511,149474],{"class":128},[118,164513,174],{"class":124},[118,164515,15577],{"class":128},[118,164517,164518,164520,164522,164524],{"class":120,"line":40},[118,164519,147013],{"class":233},[118,164521,51430],{"class":128},[118,164523,149881],{"class":233},[118,164525,31459],{"class":128},[118,164527,164528,164531,164533,164535],{"class":120,"line":1183},[118,164529,164530],{"class":233},"    \"age\"",[118,164532,51430],{"class":128},[118,164534,778],{"class":177},[118,164536,31459],{"class":128},[118,164538,164539,164542,164544],{"class":120,"line":1198},[118,164540,164541],{"class":233},"    \"score\"",[118,164543,51430],{"class":128},[118,164545,164546],{"class":177},"95\n",[118,164548,164549],{"class":120,"line":1204},[118,164550,1569],{"class":128},[15,164552,164553],{},"获取值：",[109,164555,164557],{"className":30371,"code":164556,"language":30373,"meta":39,"style":39},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[115,164558,164559,164570],{"__ignoreMap":39},[118,164560,164561,164563,164566,164568],{"class":120,"line":121},[118,164562,30408],{"class":177},[118,164564,164565],{"class":128},"(student[",[118,164567,62672],{"class":233},[118,164569,4661],{"class":128},[118,164571,164572,164574,164577,164579],{"class":120,"line":40},[118,164573,30408],{"class":177},[118,164575,164576],{"class":128},"(student.get(",[118,164578,62672],{"class":233},[118,164580,30490],{"class":128},[15,164582,15393],{},[109,164584,164586],{"className":30371,"code":164585,"language":30373,"meta":39,"style":39},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[115,164587,164588,164601],{"__ignoreMap":39},[118,164589,164590,164592,164595,164598],{"class":120,"line":121},[118,164591,152852],{"class":128},[118,164593,164594],{"class":233},"\"address\"",[118,164596,164597],{"class":128},"]     ",[118,164599,164600],{"class":187},"# key不存在会报错\n",[118,164602,164603,164606,164608,164610],{"class":120,"line":40},[118,164604,164605],{"class":128},"student.get(",[118,164607,164594],{"class":233},[118,164609,13719],{"class":128},[118,164611,164612],{"class":187},"# key不存在返回None\n",[15,164614,164615],{},"设置默认值：",[109,164617,164619],{"className":30371,"code":164618,"language":30373,"meta":39,"style":39},"print(student.get(\"address\", \"未知\"))\n",[115,164620,164621],{"__ignoreMap":39},[118,164622,164623,164625,164627,164629,164631,164634],{"class":120,"line":121},[118,164624,30408],{"class":177},[118,164626,164576],{"class":128},[118,164628,164594],{"class":233},[118,164630,12440],{"class":128},[118,164632,164633],{"class":233},"\"未知\"",[118,164635,30490],{"class":128},[15,164637,164638],{},"新增和修改：",[109,164640,164642],{"className":30371,"code":164641,"language":30373,"meta":39,"style":39},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[115,164643,164644,164657],{"__ignoreMap":39},[118,164645,164646,164648,164650,164652,164654],{"class":120,"line":121},[118,164647,152852],{"class":128},[118,164649,69117],{"class":233},[118,164651,4447],{"class":128},[118,164653,174],{"class":124},[118,164655,164656],{"class":177}," 19\n",[118,164658,164659,164661,164663,164665,164667],{"class":120,"line":40},[118,164660,152852],{"class":128},[118,164662,164594],{"class":233},[118,164664,4447],{"class":128},[118,164666,174],{"class":124},[118,164668,164669],{"class":233}," \"北京\"\n",[15,164671,164672],{},"删除：",[109,164674,164676],{"className":30371,"code":164675,"language":30373,"meta":39,"style":39},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[115,164677,164678,164691,164701],{"__ignoreMap":39},[118,164679,164680,164682,164684,164687,164689],{"class":120,"line":121},[118,164681,155351],{"class":128},[118,164683,174],{"class":124},[118,164685,164686],{"class":128}," student.pop(",[118,164688,151465],{"class":233},[118,164690,135],{"class":128},[118,164692,164693,164695,164697,164699],{"class":120,"line":40},[118,164694,163376],{"class":124},[118,164696,152142],{"class":128},[118,164698,69117],{"class":233},[118,164700,33239],{"class":128},[118,164702,164703],{"class":120,"line":1183},[118,164704,164705],{"class":128},"student.clear()\n",[60,164707,164709],{"id":164708},"_611-字典遍历","6.11 字典遍历",[15,164711,164712],{},"遍历 key：",[109,164714,164716],{"className":30371,"code":164715,"language":30373,"meta":39,"style":39},"for key in student:\n    print(key, student[key])\n",[115,164717,164718,164730],{"__ignoreMap":39},[118,164719,164720,164722,164725,164727],{"class":120,"line":121},[118,164721,3029],{"class":124},[118,164723,164724],{"class":128}," key ",[118,164726,26036],{"class":124},[118,164728,164729],{"class":128}," student:\n",[118,164731,164732,164734],{"class":120,"line":40},[118,164733,31292],{"class":177},[118,164735,164736],{"class":128},"(key, student[key])\n",[15,164738,164739],{},"遍历 value：",[109,164741,164743],{"className":30371,"code":164742,"language":30373,"meta":39,"style":39},"for value in student.values():\n    print(value)\n",[115,164744,164745,164757],{"__ignoreMap":39},[118,164746,164747,164749,164752,164754],{"class":120,"line":121},[118,164748,3029],{"class":124},[118,164750,164751],{"class":128}," value ",[118,164753,26036],{"class":124},[118,164755,164756],{"class":128}," student.values():\n",[118,164758,164759,164761],{"class":120,"line":40},[118,164760,31292],{"class":177},[118,164762,164763],{"class":128},"(value)\n",[15,164765,164766],{},"遍历 key 和 value：",[109,164768,164770],{"className":30371,"code":164769,"language":30373,"meta":39,"style":39},"for key, value in student.items():\n    print(key, value)\n",[115,164771,164772,164784],{"__ignoreMap":39},[118,164773,164774,164776,164779,164781],{"class":120,"line":121},[118,164775,3029],{"class":124},[118,164777,164778],{"class":128}," key, value ",[118,164780,26036],{"class":124},[118,164782,164783],{"class":128}," student.items():\n",[118,164785,164786,164788],{"class":120,"line":40},[118,164787,31292],{"class":177},[118,164789,164790],{"class":128},"(key, value)\n",[60,164792,164794],{"id":164793},"_612-嵌套容器","6.12 嵌套容器",[15,164796,164797],{},"列表中保存字典，是项目中最常见的结构之一。",[109,164799,164801],{"className":30371,"code":164800,"language":30373,"meta":39,"style":39},"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",[115,164802,164803,164811,164839,164867,164895,164899,164903,164913],{"__ignoreMap":39},[118,164804,164805,164807,164809],{"class":120,"line":121},[118,164806,159709],{"class":128},[118,164808,174],{"class":124},[118,164810,55440],{"class":128},[118,164812,164813,164815,164817,164819,164821,164823,164825,164827,164829,164831,164833,164835,164837],{"class":120,"line":40},[118,164814,148378],{"class":128},[118,164816,62672],{"class":233},[118,164818,51430],{"class":128},[118,164820,149881],{"class":233},[118,164822,12440],{"class":128},[118,164824,69117],{"class":233},[118,164826,51430],{"class":128},[118,164828,778],{"class":177},[118,164830,12440],{"class":128},[118,164832,151465],{"class":233},[118,164834,51430],{"class":128},[118,164836,1117],{"class":177},[118,164838,4934],{"class":128},[118,164840,164841,164843,164845,164847,164849,164851,164853,164855,164857,164859,164861,164863,164865],{"class":120,"line":1183},[118,164842,148378],{"class":128},[118,164844,62672],{"class":233},[118,164846,51430],{"class":128},[118,164848,150929],{"class":233},[118,164850,12440],{"class":128},[118,164852,69117],{"class":233},[118,164854,51430],{"class":128},[118,164856,753],{"class":177},[118,164858,12440],{"class":128},[118,164860,151465],{"class":233},[118,164862,51430],{"class":128},[118,164864,939],{"class":177},[118,164866,4934],{"class":128},[118,164868,164869,164871,164873,164875,164877,164879,164881,164883,164885,164887,164889,164891,164893],{"class":120,"line":1198},[118,164870,148378],{"class":128},[118,164872,62672],{"class":233},[118,164874,51430],{"class":128},[118,164876,159724],{"class":233},[118,164878,12440],{"class":128},[118,164880,69117],{"class":233},[118,164882,51430],{"class":128},[118,164884,803],{"class":177},[118,164886,12440],{"class":128},[118,164888,151465],{"class":233},[118,164890,51430],{"class":128},[118,164892,534],{"class":177},[118,164894,4934],{"class":128},[118,164896,164897],{"class":120,"line":1204},[118,164898,33239],{"class":128},[118,164900,164901],{"class":120,"line":1218},[118,164902,2404],{"emptyLinePlaceholder":45},[118,164904,164905,164907,164909,164911],{"class":120,"line":1224},[118,164906,3029],{"class":124},[118,164908,152130],{"class":128},[118,164910,26036],{"class":124},[118,164912,152135],{"class":128},[118,164914,164915,164917,164919,164921,164924,164926],{"class":120,"line":1315},[118,164916,31292],{"class":177},[118,164918,164565],{"class":128},[118,164920,62672],{"class":233},[118,164922,164923],{"class":128},"], student[",[118,164925,151465],{"class":233},[118,164927,4661],{"class":128},[15,164929,164930],{},"统计平均分：",[109,164932,164934],{"className":30371,"code":164933,"language":30373,"meta":39,"style":39},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[115,164935,164936,164944,164948,164958,164970,164974,164989],{"__ignoreMap":39},[118,164937,164938,164940,164942],{"class":120,"line":121},[118,164939,157253],{"class":128},[118,164941,174],{"class":124},[118,164943,47326],{"class":177},[118,164945,164946],{"class":120,"line":40},[118,164947,2404],{"emptyLinePlaceholder":45},[118,164949,164950,164952,164954,164956],{"class":120,"line":1183},[118,164951,3029],{"class":124},[118,164953,152130],{"class":128},[118,164955,26036],{"class":124},[118,164957,152135],{"class":128},[118,164959,164960,164962,164964,164966,164968],{"class":120,"line":1198},[118,164961,159300],{"class":128},[118,164963,9482],{"class":124},[118,164965,152142],{"class":128},[118,164967,151465],{"class":233},[118,164969,33239],{"class":128},[118,164971,164972],{"class":120,"line":1204},[118,164973,2404],{"emptyLinePlaceholder":45},[118,164975,164976,164978,164980,164982,164984,164986],{"class":120,"line":1218},[118,164977,163767],{"class":128},[118,164979,174],{"class":124},[118,164981,163772],{"class":128},[118,164983,712],{"class":124},[118,164985,7336],{"class":177},[118,164987,164988],{"class":128},"(students)\n",[118,164990,164991,164993,164995,164997,164999,165001,165003,165005,165007,165009],{"class":120,"line":1224},[118,164992,30408],{"class":177},[118,164994,129],{"class":128},[118,164996,181],{"class":124},[118,164998,163790],{"class":233},[118,165000,1024],{"class":177},[118,165002,163795],{"class":128},[118,165004,157152],{"class":124},[118,165006,1074],{"class":177},[118,165008,379],{"class":233},[118,165010,135],{"class":128},[15,165012,165013],{},"查找学生：",[109,165015,165017],{"className":30371,"code":165016,"language":30373,"meta":39,"style":39},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[115,165018,165019,165034,165038,165048,165062,165068,165072,165078],{"__ignoreMap":39},[118,165020,165021,165023,165025,165027,165029,165032],{"class":120,"line":121},[118,165022,111571],{"class":128},[118,165024,174],{"class":124},[118,165026,60598],{"class":177},[118,165028,129],{"class":128},[118,165030,165031],{"class":233},"\"请输入学生姓名:\"",[118,165033,135],{"class":128},[118,165035,165036],{"class":120,"line":40},[118,165037,2404],{"emptyLinePlaceholder":45},[118,165039,165040,165042,165044,165046],{"class":120,"line":1183},[118,165041,3029],{"class":124},[118,165043,152130],{"class":128},[118,165045,26036],{"class":124},[118,165047,152135],{"class":128},[118,165049,165050,165052,165054,165056,165058,165060],{"class":120,"line":1198},[118,165051,3105],{"class":124},[118,165053,152142],{"class":128},[118,165055,62672],{"class":233},[118,165057,4447],{"class":128},[118,165059,2953],{"class":124},[118,165061,160425],{"class":128},[118,165063,165064,165066],{"class":120,"line":1204},[118,165065,32444],{"class":177},[118,165067,150035],{"class":128},[118,165069,165070],{"class":120,"line":1218},[118,165071,31620],{"class":124},[118,165073,165074,165076],{"class":120,"line":1224},[118,165075,1705],{"class":124},[118,165077,3743],{"class":128},[118,165079,165080,165082,165084,165087],{"class":120,"line":1315},[118,165081,31292],{"class":177},[118,165083,129],{"class":128},[118,165085,165086],{"class":233},"\"没有找到\"",[118,165088,135],{"class":128},[60,165090,165092],{"id":165091},"_613-容器通用操作","6.13 容器通用操作",[15,165094,165095],{},"长度：",[109,165097,165099],{"className":30371,"code":165098,"language":30373,"meta":39,"style":39},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[115,165100,165101,165120,165130],{"__ignoreMap":39},[118,165102,165103,165105,165108,165110,165112,165114,165116,165118],{"class":120,"line":121},[118,165104,7363],{"class":177},[118,165106,165107],{"class":128},"([",[118,165109,346],{"class":177},[118,165111,12440],{"class":128},[118,165113,206],{"class":177},[118,165115,12440],{"class":128},[118,165117,200],{"class":177},[118,165119,4661],{"class":128},[118,165121,165122,165124,165126,165128],{"class":120,"line":40},[118,165123,7363],{"class":177},[118,165125,129],{"class":128},[118,165127,155873],{"class":233},[118,165129,135],{"class":128},[118,165131,165132,165134,165137,165139,165141,165143],{"class":120,"line":1183},[118,165133,7363],{"class":177},[118,165135,165136],{"class":128},"({",[118,165138,62672],{"class":233},[118,165140,51430],{"class":128},[118,165142,149881],{"class":233},[118,165144,165145],{"class":128},"})\n",[15,165147,165148],{},"最大最小：",[109,165150,165152],{"className":30371,"code":165151,"language":30373,"meta":39,"style":39},"max([1, 2, 3])\nmin([1, 2, 3])\n",[115,165153,165154,165172],{"__ignoreMap":39},[118,165155,165156,165158,165160,165162,165164,165166,165168,165170],{"class":120,"line":121},[118,165157,6020],{"class":177},[118,165159,165107],{"class":128},[118,165161,346],{"class":177},[118,165163,12440],{"class":128},[118,165165,206],{"class":177},[118,165167,12440],{"class":128},[118,165169,200],{"class":177},[118,165171,4661],{"class":128},[118,165173,165174,165177,165179,165181,165183,165185,165187,165189],{"class":120,"line":40},[118,165175,165176],{"class":177},"min",[118,165178,165107],{"class":128},[118,165180,346],{"class":177},[118,165182,12440],{"class":128},[118,165184,206],{"class":177},[118,165186,12440],{"class":128},[118,165188,200],{"class":177},[118,165190,4661],{"class":128},[15,165192,165193],{},"求和：",[109,165195,165197],{"className":30371,"code":165196,"language":30373,"meta":39,"style":39},"sum([1, 2, 3])\n",[115,165198,165199],{"__ignoreMap":39},[118,165200,165201,165204,165206,165208,165210,165212,165214,165216],{"class":120,"line":121},[118,165202,165203],{"class":177},"sum",[118,165205,165107],{"class":128},[118,165207,346],{"class":177},[118,165209,12440],{"class":128},[118,165211,206],{"class":177},[118,165213,12440],{"class":128},[118,165215,200],{"class":177},[118,165217,4661],{"class":128},[15,165219,163464],{},[109,165221,165223],{"className":30371,"code":165222,"language":30373,"meta":39,"style":39},"sorted([3, 1, 2])\n",[115,165224,165225],{"__ignoreMap":39},[118,165226,165227,165230,165232,165234,165236,165238,165240,165242],{"class":120,"line":121},[118,165228,165229],{"class":177},"sorted",[118,165231,165107],{"class":128},[118,165233,200],{"class":177},[118,165235,12440],{"class":128},[118,165237,346],{"class":177},[118,165239,12440],{"class":128},[118,165241,206],{"class":177},[118,165243,4661],{"class":128},[15,165245,165246],{},"类型转换：",[109,165248,165250],{"className":30371,"code":165249,"language":30373,"meta":39,"style":39},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[115,165251,165252,165262,165280],{"__ignoreMap":39},[118,165253,165254,165256,165258,165260],{"class":120,"line":121},[118,165255,154063],{"class":177},[118,165257,129],{"class":128},[118,165259,155873],{"class":233},[118,165261,135],{"class":128},[118,165263,165264,165266,165268,165270,165272,165274,165276,165278],{"class":120,"line":40},[118,165265,155258],{"class":177},[118,165267,165107],{"class":128},[118,165269,346],{"class":177},[118,165271,12440],{"class":128},[118,165273,206],{"class":177},[118,165275,12440],{"class":128},[118,165277,200],{"class":177},[118,165279,4661],{"class":128},[118,165281,165282,165284,165286,165288,165290,165292,165294,165296,165298,165300],{"class":120,"line":1183},[118,165283,155283],{"class":177},[118,165285,165107],{"class":128},[118,165287,346],{"class":177},[118,165289,12440],{"class":128},[118,165291,346],{"class":177},[118,165293,12440],{"class":128},[118,165295,206],{"class":177},[118,165297,12440],{"class":128},[118,165299,200],{"class":177},[118,165301,4661],{"class":128},[15,165303,165304],{},"成员判断：",[109,165306,165308],{"className":30371,"code":165307,"language":30373,"meta":39,"style":39},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[115,165309,165310,165327,165351],{"__ignoreMap":39},[118,165311,165312,165314,165316,165319,165322,165325],{"class":120,"line":121},[118,165313,30408],{"class":177},[118,165315,129],{"class":128},[118,165317,165318],{"class":233},"\"a\"",[118,165320,165321],{"class":124}," in",[118,165323,165324],{"class":233}," \"abc\"",[118,165326,135],{"class":128},[118,165328,165329,165331,165333,165335,165337,165339,165341,165343,165345,165347,165349],{"class":120,"line":40},[118,165330,30408],{"class":177},[118,165332,129],{"class":128},[118,165334,346],{"class":177},[118,165336,165321],{"class":124},[118,165338,52219],{"class":128},[118,165340,346],{"class":177},[118,165342,12440],{"class":128},[118,165344,206],{"class":177},[118,165346,12440],{"class":128},[118,165348,200],{"class":177},[118,165350,4661],{"class":128},[118,165352,165353,165355,165357,165359,165361,165363,165365,165367,165369],{"class":120,"line":1183},[118,165354,30408],{"class":177},[118,165356,129],{"class":128},[118,165358,62672],{"class":233},[118,165360,165321],{"class":124},[118,165362,4452],{"class":128},[118,165364,62672],{"class":233},[118,165366,51430],{"class":128},[118,165368,149881],{"class":233},[118,165370,165145],{"class":128},[60,165372,165374],{"id":165373},"_614-推导式","6.14 推导式",[15,165376,165377],{},"推导式用于快速生成容器。",[15,165379,165380],{},"列表推导式：",[109,165382,165384],{"className":30371,"code":165383,"language":30373,"meta":39,"style":39},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[115,165385,165386,165413],{"__ignoreMap":39},[118,165387,165388,165390,165392,165395,165397,165399,165401,165403,165405,165407,165409,165411],{"class":120,"line":121},[118,165389,164093],{"class":128},[118,165391,174],{"class":124},[118,165393,165394],{"class":128}," [i ",[118,165396,3029],{"class":124},[118,165398,9443],{"class":128},[118,165400,26036],{"class":124},[118,165402,32436],{"class":177},[118,165404,129],{"class":128},[118,165406,346],{"class":177},[118,165408,12440],{"class":128},[118,165410,472],{"class":177},[118,165412,97293],{"class":128},[118,165414,165415,165417],{"class":120,"line":40},[118,165416,30408],{"class":177},[118,165418,164309],{"class":128},[15,165420,165421],{},"带条件：",[109,165423,165425],{"className":30371,"code":165424,"language":30373,"meta":39,"style":39},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[115,165426,165427,165468],{"__ignoreMap":39},[118,165428,165429,165432,165434,165436,165438,165440,165442,165444,165446,165448,165450,165452,165454,165456,165458,165460,165462,165464,165466],{"class":120,"line":121},[118,165430,165431],{"class":128},"even_nums ",[118,165433,174],{"class":124},[118,165435,165394],{"class":128},[118,165437,3029],{"class":124},[118,165439,9443],{"class":128},[118,165441,26036],{"class":124},[118,165443,32436],{"class":177},[118,165445,129],{"class":128},[118,165447,346],{"class":177},[118,165449,12440],{"class":128},[118,165451,465],{"class":177},[118,165453,13719],{"class":128},[118,165455,1535],{"class":124},[118,165457,9443],{"class":128},[118,165459,456],{"class":124},[118,165461,14760],{"class":177},[118,165463,101552],{"class":124},[118,165465,4097],{"class":177},[118,165467,33239],{"class":128},[118,165469,165470,165472],{"class":120,"line":40},[118,165471,30408],{"class":177},[118,165473,165474],{"class":128},"(even_nums)\n",[15,165476,165477],{},"字典推导式：",[109,165479,165481],{"className":30371,"code":165480,"language":30373,"meta":39,"style":39},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[115,165482,165483,165517],{"__ignoreMap":39},[118,165484,165485,165488,165490,165493,165495,165497,165500,165502,165504,165506,165508,165510,165512,165514],{"class":120,"line":121},[118,165486,165487],{"class":128},"squares ",[118,165489,174],{"class":124},[118,165491,165492],{"class":128}," {i: i ",[118,165494,10666],{"class":124},[118,165496,14760],{"class":177},[118,165498,165499],{"class":124}," for",[118,165501,9443],{"class":128},[118,165503,26036],{"class":124},[118,165505,32436],{"class":177},[118,165507,129],{"class":128},[118,165509,346],{"class":177},[118,165511,12440],{"class":128},[118,165513,472],{"class":177},[118,165515,165516],{"class":128},")}\n",[118,165518,165519,165521],{"class":120,"line":40},[118,165520,30408],{"class":177},[118,165522,165523],{"class":128},"(squares)\n",[15,165525,165526],{},"集合推导式：",[109,165528,165530],{"className":30371,"code":165529,"language":30373,"meta":39,"style":39},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[115,165531,165532,165553],{"__ignoreMap":39},[118,165533,165534,165537,165539,165542,165544,165546,165548,165551],{"class":120,"line":121},[118,165535,165536],{"class":128},"chars ",[118,165538,174],{"class":124},[118,165540,165541],{"class":128}," {ch ",[118,165543,3029],{"class":124},[118,165545,159685],{"class":128},[118,165547,26036],{"class":124},[118,165549,165550],{"class":233}," \"hello\"",[118,165552,1569],{"class":128},[118,165554,165555,165557],{"class":120,"line":40},[118,165556,30408],{"class":177},[118,165558,165559],{"class":128},"(chars)\n",[15,165561,165562],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[60,165564,165566],{"id":165565},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[109,165568,165570],{"className":30371,"code":165569,"language":30373,"meta":39,"style":39},"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",[115,165571,165572,165580,165600,165620,165640,165660,165664,165668,165676,165690,165699,165703,165713,165725,165729,165749,165758,165762,165778,165783,165787,165801,165805,165827,165863],{"__ignoreMap":39},[118,165573,165574,165576,165578],{"class":120,"line":121},[118,165575,159709],{"class":128},[118,165577,174],{"class":124},[118,165579,55440],{"class":128},[118,165581,165582,165584,165586,165588,165590,165592,165594,165596,165598],{"class":120,"line":40},[118,165583,148378],{"class":128},[118,165585,62672],{"class":233},[118,165587,51430],{"class":128},[118,165589,149881],{"class":233},[118,165591,12440],{"class":128},[118,165593,151465],{"class":233},[118,165595,51430],{"class":128},[118,165597,1117],{"class":177},[118,165599,4934],{"class":128},[118,165601,165602,165604,165606,165608,165610,165612,165614,165616,165618],{"class":120,"line":1183},[118,165603,148378],{"class":128},[118,165605,62672],{"class":233},[118,165607,51430],{"class":128},[118,165609,150929],{"class":233},[118,165611,12440],{"class":128},[118,165613,151465],{"class":233},[118,165615,51430],{"class":128},[118,165617,939],{"class":177},[118,165619,4934],{"class":128},[118,165621,165622,165624,165626,165628,165630,165632,165634,165636,165638],{"class":120,"line":1198},[118,165623,148378],{"class":128},[118,165625,62672],{"class":233},[118,165627,51430],{"class":128},[118,165629,159724],{"class":233},[118,165631,12440],{"class":128},[118,165633,151465],{"class":233},[118,165635,51430],{"class":128},[118,165637,534],{"class":177},[118,165639,4934],{"class":128},[118,165641,165642,165644,165646,165648,165650,165652,165654,165656,165658],{"class":120,"line":1204},[118,165643,148378],{"class":128},[118,165645,62672],{"class":233},[118,165647,51430],{"class":128},[118,165649,163303],{"class":233},[118,165651,12440],{"class":128},[118,165653,151465],{"class":233},[118,165655,51430],{"class":128},[118,165657,1010],{"class":177},[118,165659,4934],{"class":128},[118,165661,165662],{"class":120,"line":1218},[118,165663,33239],{"class":128},[118,165665,165666],{"class":120,"line":1224},[118,165667,2404],{"emptyLinePlaceholder":45},[118,165669,165670,165672,165674],{"class":120,"line":1315},[118,165671,157253],{"class":128},[118,165673,174],{"class":124},[118,165675,47326],{"class":177},[118,165677,165678,165681,165683,165686,165688],{"class":120,"line":1321},[118,165679,165680],{"class":128},"max_student ",[118,165682,174],{"class":124},[118,165684,165685],{"class":128}," students[",[118,165687,320],{"class":177},[118,165689,33239],{"class":128},[118,165691,165692,165695,165697],{"class":120,"line":1333},[118,165693,165694],{"class":128},"passed ",[118,165696,174],{"class":124},[118,165698,51831],{"class":128},[118,165700,165701],{"class":120,"line":1616},[118,165702,2404],{"emptyLinePlaceholder":45},[118,165704,165705,165707,165709,165711],{"class":120,"line":1621},[118,165706,3029],{"class":124},[118,165708,152130],{"class":128},[118,165710,26036],{"class":124},[118,165712,152135],{"class":128},[118,165714,165715,165717,165719,165721,165723],{"class":120,"line":1627},[118,165716,159300],{"class":128},[118,165718,9482],{"class":124},[118,165720,152142],{"class":128},[118,165722,151465],{"class":233},[118,165724,33239],{"class":128},[118,165726,165727],{"class":120,"line":1632},[118,165728,2404],{"emptyLinePlaceholder":45},[118,165730,165731,165733,165735,165737,165739,165741,165744,165746],{"class":120,"line":1646},[118,165732,3105],{"class":124},[118,165734,152142],{"class":128},[118,165736,151465],{"class":233},[118,165738,4447],{"class":128},[118,165740,1088],{"class":124},[118,165742,165743],{"class":128}," max_student[",[118,165745,151465],{"class":233},[118,165747,165748],{"class":128},"]:\n",[118,165750,165751,165754,165756],{"class":120,"line":1651},[118,165752,165753],{"class":128},"        max_student ",[118,165755,174],{"class":124},[118,165757,152158],{"class":128},[118,165759,165760],{"class":120,"line":1657},[118,165761,2404],{"emptyLinePlaceholder":45},[118,165763,165764,165766,165768,165770,165772,165774,165776],{"class":120,"line":1678},[118,165765,3105],{"class":124},[118,165767,152142],{"class":128},[118,165769,151465],{"class":233},[118,165771,4447],{"class":128},[118,165773,1714],{"class":124},[118,165775,157830],{"class":177},[118,165777,3743],{"class":128},[118,165779,165780],{"class":120,"line":1683},[118,165781,165782],{"class":128},"        passed.append(student)\n",[118,165784,165785],{"class":120,"line":1697},[118,165786,2404],{"emptyLinePlaceholder":45},[118,165788,165789,165791,165793,165795,165797,165799],{"class":120,"line":1702},[118,165790,163767],{"class":128},[118,165792,174],{"class":124},[118,165794,163772],{"class":128},[118,165796,712],{"class":124},[118,165798,7336],{"class":177},[118,165800,164988],{"class":128},[118,165802,165803],{"class":120,"line":1731},[118,165804,2404],{"emptyLinePlaceholder":45},[118,165806,165807,165809,165811,165813,165815,165817,165819,165821,165823,165825],{"class":120,"line":1736},[118,165808,30408],{"class":177},[118,165810,129],{"class":128},[118,165812,181],{"class":124},[118,165814,163790],{"class":233},[118,165816,1024],{"class":177},[118,165818,163795],{"class":128},[118,165820,157152],{"class":124},[118,165822,1074],{"class":177},[118,165824,379],{"class":233},[118,165826,135],{"class":128},[118,165828,165829,165831,165833,165835,165838,165840,165843,165845,165847,165849,165851,165853,165855,165857,165859,165861],{"class":120,"line":1753},[118,165830,30408],{"class":177},[118,165832,129],{"class":128},[118,165834,181],{"class":124},[118,165836,165837],{"class":233},"\"最高分学生:",[118,165839,1024],{"class":177},[118,165841,165842],{"class":128},"max_student[",[118,165844,152875],{"class":233},[118,165846,1068],{"class":128},[118,165848,1074],{"class":177},[118,165850,4452],{"class":177},[118,165852,165842],{"class":128},[118,165854,152913],{"class":233},[118,165856,1068],{"class":128},[118,165858,1074],{"class":177},[118,165860,379],{"class":233},[118,165862,135],{"class":128},[118,165864,165865,165867,165869,165871,165874,165877,165880,165882,165884],{"class":120,"line":1758},[118,165866,30408],{"class":177},[118,165868,129],{"class":128},[118,165870,181],{"class":124},[118,165872,165873],{"class":233},"\"及格人数:",[118,165875,165876],{"class":177},"{len",[118,165878,165879],{"class":128},"(passed)",[118,165881,1074],{"class":177},[118,165883,379],{"class":233},[118,165885,135],{"class":128},[60,165887,165889],{"id":165888},"_616-易错点","6.16 易错点",[72,165891,165892,165895,165898,165901,165907,165916],{},[75,165893,165894],{},"列表可变，元组和字符串不可变。",[75,165896,165897],{},"切片结束位置不包含。",[75,165899,165900],{},"字典通过 key 取值，不是通过索引。",[75,165902,165903,165904,28378],{},"空集合要用 ",[115,165905,165906],{},"set()",[75,165908,104359,165909,165912,165913,28378],{},[115,165910,165911],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[115,165914,165915],{},"get()",[75,165917,165918],{},"嵌套容器要先看清楚每一层是什么类型。",[60,165920,165922],{"id":165921},"_617-本章练习","6.17 本章练习",[72,165924,165925,165928,165931,165934,165937],{},[75,165926,165927],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[75,165929,165930],{},"输入一句话，统计每个字符出现次数。",[75,165932,165933],{},"使用集合去除列表中的重复元素。",[75,165935,165936],{},"使用字典保存一个学生的信息，并实现修改成绩。",[75,165938,165939],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5131,165941,165942],{},"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":39,"searchDepth":40,"depth":40,"links":165944},[165945,165946,165947,165948,165949,165950,165951,165952,165953,165954,165955,165956,165957,165958,165959,165960,165961],{"id":162925,"depth":40,"text":162926},{"id":163042,"depth":40,"text":163043},{"id":163132,"depth":40,"text":163133},{"id":163256,"depth":40,"text":163257},{"id":163619,"depth":40,"text":163620},{"id":163806,"depth":40,"text":163807},{"id":163925,"depth":40,"text":163926},{"id":164067,"depth":40,"text":164068},{"id":164254,"depth":40,"text":164255},{"id":164498,"depth":40,"text":164499},{"id":164708,"depth":40,"text":164709},{"id":164793,"depth":40,"text":164794},{"id":165091,"depth":40,"text":165092},{"id":165373,"depth":40,"text":165374},{"id":165565,"depth":40,"text":165566},{"id":165888,"depth":40,"text":165889},{"id":165921,"depth":40,"text":165922},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162917,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165968,"title":165969,"body":165970,"description":42,"extension":43,"meta":168142,"navigation":45,"path":168143,"seo":168144,"stem":168145,"__hash__":168146},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165971,"toc":168117},[165972,165975,165979,165982,166062,166065,166086,166089,166093,166096,166158,166161,166178,166182,166185,166230,166232,166240,166244,166247,166329,166332,166335,166360,166363,166386,166390,166393,166395,166457,166460,166462,166513,166517,166521,166527,166632,166636,166642,166713,166717,166720,166788,166791,166871,166875,166881,166917,166920,166923,167033,167039,167043,167046,167118,167121,167125,167129,167134,167196,167200,167205,167273,167277,167282,167398,167402,167405,167485,167488,167492,167495,167599,167601,167616,167619,167623,167761,167769,167773,167775,167786,167788,168046,168050,168082,168086,168114],[10,165973,165969],{"id":165974},"_7-函数进阶",[60,165976,165978],{"id":165977},"_71-多返回值","7.1 多返回值",[15,165980,165981],{},"Python 函数可以返回多个值，本质上返回的是元组。",[109,165983,165985],{"className":30371,"code":165984,"language":30373,"meta":39,"style":39},"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",[115,165986,165987,165996,166004,166012,166021,166028,166032,166036,166045,166051],{"__ignoreMap":39},[118,165988,165989,165991,165994],{"class":120,"line":121},[118,165990,31940],{"class":124},[118,165992,165993],{"class":1967}," get_info",[118,165995,31946],{"class":128},[118,165997,165998,166000,166002],{"class":120,"line":40},[118,165999,152363],{"class":128},[118,166001,174],{"class":124},[118,166003,149346],{"class":233},[118,166005,166006,166008,166010],{"class":120,"line":1183},[118,166007,152379],{"class":128},[118,166009,174],{"class":124},[118,166011,146544],{"class":177},[118,166013,166014,166016,166018],{"class":120,"line":1198},[118,166015,152394],{"class":128},[118,166017,174],{"class":124},[118,166019,166020],{"class":177}," 95\n",[118,166022,166023,166025],{"class":120,"line":1204},[118,166024,4094],{"class":124},[118,166026,166027],{"class":128}," name, age, score\n",[118,166029,166030],{"class":120,"line":1218},[118,166031,2404],{"emptyLinePlaceholder":45},[118,166033,166034],{"class":120,"line":1224},[118,166035,2404],{"emptyLinePlaceholder":45},[118,166037,166038,166040,166042],{"class":120,"line":1315},[118,166039,161299],{"class":128},[118,166041,174],{"class":124},[118,166043,166044],{"class":128}," get_info()\n",[118,166046,166047,166049],{"class":120,"line":1321},[118,166048,30408],{"class":177},[118,166050,76578],{"class":128},[118,166052,166053,166055,166057,166059],{"class":120,"line":1333},[118,166054,30408],{"class":177},[118,166056,129],{"class":128},[118,166058,103100],{"class":177},[118,166060,166061],{"class":128},"(result))\n",[15,166063,166064],{},"可以直接解包：",[109,166066,166068],{"className":30371,"code":166067,"language":30373,"meta":39,"style":39},"name, age, score = get_info()\nprint(name, age, score)\n",[115,166069,166070,166079],{"__ignoreMap":39},[118,166071,166072,166075,166077],{"class":120,"line":121},[118,166073,166074],{"class":128},"name, age, score ",[118,166076,174],{"class":124},[118,166078,166044],{"class":128},[118,166080,166081,166083],{"class":120,"line":40},[118,166082,30408],{"class":177},[118,166084,166085],{"class":128},"(name, age, score)\n",[15,166087,166088],{},"返回多个值适合函数需要同时给出多个结果时使用。",[60,166090,166092],{"id":166091},"_72-位置参数","7.2 位置参数",[15,166094,166095],{},"位置参数按顺序传递。",[109,166097,166099],{"className":30371,"code":166098,"language":30373,"meta":39,"style":39},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[115,166100,166101,166109,166137,166141,166145],{"__ignoreMap":39},[118,166102,166103,166105,166107],{"class":120,"line":121},[118,166104,31940],{"class":124},[118,166106,149365],{"class":1967},[118,166108,149368],{"class":128},[118,166110,166111,166113,166115,166117,166119,166121,166123,166125,166127,166129,166131,166133,166135],{"class":120,"line":40},[118,166112,31292],{"class":177},[118,166114,129],{"class":128},[118,166116,181],{"class":124},[118,166118,149379],{"class":233},[118,166120,1024],{"class":177},[118,166122,79803],{"class":128},[118,166124,1074],{"class":177},[118,166126,149388],{"class":233},[118,166128,1024],{"class":177},[118,166130,70214],{"class":128},[118,166132,1074],{"class":177},[118,166134,149397],{"class":233},[118,166136,135],{"class":128},[118,166138,166139],{"class":120,"line":1183},[118,166140,2404],{"emptyLinePlaceholder":45},[118,166142,166143],{"class":120,"line":1198},[118,166144,2404],{"emptyLinePlaceholder":45},[118,166146,166147,166150,166152,166154,166156],{"class":120,"line":1204},[118,166148,166149],{"class":128},"introduce(",[118,166151,149881],{"class":233},[118,166153,12440],{"class":128},[118,166155,778],{"class":177},[118,166157,135],{"class":128},[15,166159,166160],{},"顺序错了就会得到错误含义：",[109,166162,166164],{"className":30371,"code":166163,"language":30373,"meta":39,"style":39},"introduce(18, \"小明\")\n",[115,166165,166166],{"__ignoreMap":39},[118,166167,166168,166170,166172,166174,166176],{"class":120,"line":121},[118,166169,166149],{"class":128},[118,166171,778],{"class":177},[118,166173,12440],{"class":128},[118,166175,149881],{"class":233},[118,166177,135],{"class":128},[60,166179,166181],{"id":166180},"_73-关键字参数","7.3 关键字参数",[15,166183,166184],{},"关键字参数按参数名传递。",[109,166186,166188],{"className":30371,"code":166187,"language":30373,"meta":39,"style":39},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[115,166189,166190,166210],{"__ignoreMap":39},[118,166191,166192,166194,166196,166198,166200,166202,166204,166206,166208],{"class":120,"line":121},[118,166193,166149],{"class":128},[118,166195,79803],{"class":5221},[118,166197,174],{"class":124},[118,166199,149881],{"class":233},[118,166201,12440],{"class":128},[118,166203,70214],{"class":5221},[118,166205,174],{"class":124},[118,166207,778],{"class":177},[118,166209,135],{"class":128},[118,166211,166212,166214,166216,166218,166220,166222,166224,166226,166228],{"class":120,"line":40},[118,166213,166149],{"class":128},[118,166215,70214],{"class":5221},[118,166217,174],{"class":124},[118,166219,778],{"class":177},[118,166221,12440],{"class":128},[118,166223,79803],{"class":5221},[118,166225,174],{"class":124},[118,166227,149881],{"class":233},[118,166229,135],{"class":128},[15,166231,117927],{},[72,166233,166234,166237],{},[75,166235,166236],{},"顺序不容易错。",[75,166238,166239],{},"调用时可读性更强。",[60,166241,166243],{"id":166242},"_74-默认参数","7.4 默认参数",[15,166245,166246],{},"默认参数给参数设置默认值。",[109,166248,166250],{"className":30371,"code":166249,"language":30373,"meta":39,"style":39},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[115,166251,166252,166268,166298,166302,166306,166316],{"__ignoreMap":39},[118,166253,166254,166256,166258,166261,166263,166266],{"class":120,"line":121},[118,166255,31940],{"class":124},[118,166257,122086],{"class":1967},[118,166259,166260],{"class":128},"(host, port",[118,166262,174],{"class":124},[118,166264,166265],{"class":177},"3306",[118,166267,30779],{"class":128},[118,166269,166270,166272,166274,166276,166279,166281,166283,166285,166287,166289,166292,166294,166296],{"class":120,"line":40},[118,166271,31292],{"class":177},[118,166273,129],{"class":128},[118,166275,181],{"class":124},[118,166277,166278],{"class":233},"\"连接",[118,166280,1024],{"class":177},[118,166282,27388],{"class":128},[118,166284,1074],{"class":177},[118,166286,987],{"class":233},[118,166288,1024],{"class":177},[118,166290,166291],{"class":128},"port",[118,166293,1074],{"class":177},[118,166295,379],{"class":233},[118,166297,135],{"class":128},[118,166299,166300],{"class":120,"line":1183},[118,166301,2404],{"emptyLinePlaceholder":45},[118,166303,166304],{"class":120,"line":1198},[118,166305,2404],{"emptyLinePlaceholder":45},[118,166307,166308,166311,166314],{"class":120,"line":1204},[118,166309,166310],{"class":128},"connect(",[118,166312,166313],{"class":233},"\"localhost\"",[118,166315,135],{"class":128},[118,166317,166318,166320,166322,166324,166327],{"class":120,"line":1218},[118,166319,166310],{"class":128},[118,166321,166313],{"class":233},[118,166323,12440],{"class":128},[118,166325,166326],{"class":177},"6379",[118,166328,135],{"class":128},[15,166330,166331],{},"注意：默认参数必须放在非默认参数后面。",[15,166333,166334],{},"错误：",[109,166336,166338],{"className":30371,"code":166337,"language":30373,"meta":39,"style":39},"def connect(port=3306, host):\n    pass\n",[115,166339,166340,166356],{"__ignoreMap":39},[118,166341,166342,166344,166346,166349,166351,166353],{"class":120,"line":121},[118,166343,31940],{"class":124},[118,166345,122086],{"class":1967},[118,166347,166348],{"class":128},"(port",[118,166350,174],{"class":124},[118,166352,166265],{"class":177},[118,166354,166355],{"class":128},", host):\n",[118,166357,166358],{"class":120,"line":40},[118,166359,149530],{"class":124},[15,166361,166362],{},"正确：",[109,166364,166366],{"className":30371,"code":166365,"language":30373,"meta":39,"style":39},"def connect(host, port=3306):\n    pass\n",[115,166367,166368,166382],{"__ignoreMap":39},[118,166369,166370,166372,166374,166376,166378,166380],{"class":120,"line":121},[118,166371,31940],{"class":124},[118,166373,122086],{"class":1967},[118,166375,166260],{"class":128},[118,166377,174],{"class":124},[118,166379,166265],{"class":177},[118,166381,30779],{"class":128},[118,166383,166384],{"class":120,"line":40},[118,166385,149530],{"class":124},[60,166387,166389],{"id":166388},"_75-默认参数的坑","7.5 默认参数的坑",[15,166391,166392],{},"不要使用可变对象作为默认参数。",[15,166394,157616],{},[109,166396,166398],{"className":30371,"code":166397,"language":30373,"meta":39,"style":39},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[115,166399,166400,166415,166420,166427,166431,166435,166446],{"__ignoreMap":39},[118,166401,166402,166404,166407,166410,166412],{"class":120,"line":121},[118,166403,31940],{"class":124},[118,166405,166406],{"class":1967}," add_item",[118,166408,166409],{"class":128},"(item, items",[118,166411,174],{"class":124},[118,166413,166414],{"class":128},"[]):\n",[118,166416,166417],{"class":120,"line":40},[118,166418,166419],{"class":128},"    items.append(item)\n",[118,166421,166422,166424],{"class":120,"line":1183},[118,166423,4094],{"class":124},[118,166425,166426],{"class":128}," items\n",[118,166428,166429],{"class":120,"line":1198},[118,166430,2404],{"emptyLinePlaceholder":45},[118,166432,166433],{"class":120,"line":1204},[118,166434,2404],{"emptyLinePlaceholder":45},[118,166436,166437,166439,166442,166444],{"class":120,"line":1218},[118,166438,30408],{"class":177},[118,166440,166441],{"class":128},"(add_item(",[118,166443,165318],{"class":233},[118,166445,30490],{"class":128},[118,166447,166448,166450,166452,166455],{"class":120,"line":1224},[118,166449,30408],{"class":177},[118,166451,166441],{"class":128},[118,166453,166454],{"class":233},"\"b\"",[118,166456,30490],{"class":128},[15,166458,166459],{},"第二次调用会复用第一次的列表。",[15,166461,155881],{},[109,166463,166465],{"className":30371,"code":166464,"language":30373,"meta":39,"style":39},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[115,166466,166467,166481,166494,166503,166507],{"__ignoreMap":39},[118,166468,166469,166471,166473,166475,166477,166479],{"class":120,"line":121},[118,166470,31940],{"class":124},[118,166472,166406],{"class":1967},[118,166474,166409],{"class":128},[118,166476,174],{"class":124},[118,166478,95679],{"class":177},[118,166480,30779],{"class":128},[118,166482,166483,166485,166488,166490,166492],{"class":120,"line":40},[118,166484,3105],{"class":124},[118,166486,166487],{"class":128}," items ",[118,166489,38920],{"class":124},[118,166491,38926],{"class":177},[118,166493,3743],{"class":128},[118,166495,166496,166499,166501],{"class":120,"line":1183},[118,166497,166498],{"class":128},"        items ",[118,166500,174],{"class":124},[118,166502,51831],{"class":128},[118,166504,166505],{"class":120,"line":1198},[118,166506,166419],{"class":128},[118,166508,166509,166511],{"class":120,"line":1204},[118,166510,4094],{"class":124},[118,166512,166426],{"class":128},[60,166514,166516],{"id":166515},"_76-不定长参数","7.6 不定长参数",[89,166518,166520],{"id":166519},"_761-args","7.6.1 *args",[15,166522,166523,166526],{},[115,166524,166525],{},"*args"," 接收任意数量的位置参数，得到元组。",[109,166528,166530],{"className":30371,"code":166529,"language":30373,"meta":39,"style":39},"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",[115,166531,166532,166545,166553,166564,166573,166579,166583,166587,166606],{"__ignoreMap":39},[118,166533,166534,166536,166538,166540,166542],{"class":120,"line":121},[118,166535,31940],{"class":124},[118,166537,5214],{"class":1967},[118,166539,129],{"class":128},[118,166541,583],{"class":124},[118,166543,166544],{"class":128},"args):\n",[118,166546,166547,166549,166551],{"class":120,"line":40},[118,166548,159300],{"class":128},[118,166550,174],{"class":124},[118,166552,47326],{"class":177},[118,166554,166555,166557,166559,166561],{"class":120,"line":1183},[118,166556,3205],{"class":124},[118,166558,156173],{"class":128},[118,166560,26036],{"class":124},[118,166562,166563],{"class":128}," args:\n",[118,166565,166566,166568,166570],{"class":120,"line":1198},[118,166567,159975],{"class":128},[118,166569,9482],{"class":124},[118,166571,166572],{"class":128}," num\n",[118,166574,166575,166577],{"class":120,"line":1204},[118,166576,4094],{"class":124},[118,166578,162280],{"class":128},[118,166580,166581],{"class":120,"line":1218},[118,166582,2404],{"emptyLinePlaceholder":45},[118,166584,166585],{"class":120,"line":1224},[118,166586,2404],{"emptyLinePlaceholder":45},[118,166588,166589,166591,166594,166596,166598,166600,166602,166604],{"class":120,"line":1315},[118,166590,30408],{"class":177},[118,166592,166593],{"class":128},"(add(",[118,166595,346],{"class":177},[118,166597,12440],{"class":128},[118,166599,206],{"class":177},[118,166601,12440],{"class":128},[118,166603,200],{"class":177},[118,166605,30490],{"class":128},[118,166607,166608,166610,166612,166614,166616,166618,166620,166622,166624,166626,166628,166630],{"class":120,"line":1321},[118,166609,30408],{"class":177},[118,166611,166593],{"class":128},[118,166613,346],{"class":177},[118,166615,12440],{"class":128},[118,166617,206],{"class":177},[118,166619,12440],{"class":128},[118,166621,200],{"class":177},[118,166623,12440],{"class":128},[118,166625,421],{"class":177},[118,166627,12440],{"class":128},[118,166629,447],{"class":177},[118,166631,30490],{"class":128},[89,166633,166635],{"id":166634},"_762-kwargs","7.6.2 **kwargs",[15,166637,166638,166641],{},[115,166639,166640],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[109,166643,166645],{"className":30371,"code":166644,"language":30373,"meta":39,"style":39},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[115,166646,166647,166660,166671,166677,166681,166685],{"__ignoreMap":39},[118,166648,166649,166651,166653,166655,166657],{"class":120,"line":121},[118,166650,31940],{"class":124},[118,166652,161938],{"class":1967},[118,166654,129],{"class":128},[118,166656,10666],{"class":124},[118,166658,166659],{"class":128},"kwargs):\n",[118,166661,166662,166664,166666,166668],{"class":120,"line":40},[118,166663,3205],{"class":124},[118,166665,164778],{"class":128},[118,166667,26036],{"class":124},[118,166669,166670],{"class":128}," kwargs.items():\n",[118,166672,166673,166675],{"class":120,"line":1183},[118,166674,32444],{"class":177},[118,166676,164790],{"class":128},[118,166678,166679],{"class":120,"line":1198},[118,166680,2404],{"emptyLinePlaceholder":45},[118,166682,166683],{"class":120,"line":1204},[118,166684,2404],{"emptyLinePlaceholder":45},[118,166686,166687,166689,166691,166693,166695,166697,166699,166701,166703,166705,166707,166709,166711],{"class":120,"line":1218},[118,166688,162003],{"class":128},[118,166690,79803],{"class":5221},[118,166692,174],{"class":124},[118,166694,149881],{"class":233},[118,166696,12440],{"class":128},[118,166698,70214],{"class":5221},[118,166700,174],{"class":124},[118,166702,778],{"class":177},[118,166704,12440],{"class":128},[118,166706,70265],{"class":5221},[118,166708,174],{"class":124},[118,166710,69262],{"class":233},[118,166712,135],{"class":128},[60,166714,166716],{"id":166715},"_77-参数解包","7.7 参数解包",[15,166718,166719],{},"列表或元组解包为位置参数：",[109,166721,166723],{"className":30371,"code":166722,"language":30373,"meta":39,"style":39},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[115,166724,166725,166734,166749,166753,166757,166777],{"__ignoreMap":39},[118,166726,166727,166729,166731],{"class":120,"line":121},[118,166728,31940],{"class":124},[118,166730,5214],{"class":1967},[118,166732,166733],{"class":128},"(a, b, c):\n",[118,166735,166736,166738,166740,166742,166744,166746],{"class":120,"line":40},[118,166737,4094],{"class":124},[118,166739,10874],{"class":128},[118,166741,609],{"class":124},[118,166743,10887],{"class":128},[118,166745,609],{"class":124},[118,166747,166748],{"class":128}," c\n",[118,166750,166751],{"class":120,"line":1183},[118,166752,2404],{"emptyLinePlaceholder":45},[118,166754,166755],{"class":120,"line":1198},[118,166756,2404],{"emptyLinePlaceholder":45},[118,166758,166759,166761,166763,166765,166767,166769,166771,166773,166775],{"class":120,"line":1204},[118,166760,164093],{"class":128},[118,166762,174],{"class":124},[118,166764,52219],{"class":128},[118,166766,346],{"class":177},[118,166768,12440],{"class":128},[118,166770,206],{"class":177},[118,166772,12440],{"class":128},[118,166774,200],{"class":177},[118,166776,33239],{"class":128},[118,166778,166779,166781,166783,166785],{"class":120,"line":1218},[118,166780,30408],{"class":177},[118,166782,166593],{"class":128},[118,166784,583],{"class":124},[118,166786,166787],{"class":128},"nums))\n",[15,166789,166790],{},"字典解包为关键字参数：",[109,166792,166794],{"className":30371,"code":166793,"language":30373,"meta":39,"style":39},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[115,166795,166796,166804,166830,166834,166838,166862],{"__ignoreMap":39},[118,166797,166798,166800,166802],{"class":120,"line":121},[118,166799,31940],{"class":124},[118,166801,149365],{"class":1967},[118,166803,149368],{"class":128},[118,166805,166806,166808,166810,166812,166814,166816,166818,166820,166822,166824,166826,166828],{"class":120,"line":40},[118,166807,31292],{"class":177},[118,166809,129],{"class":128},[118,166811,181],{"class":124},[118,166813,379],{"class":233},[118,166815,1024],{"class":177},[118,166817,79803],{"class":128},[118,166819,1074],{"class":177},[118,166821,4452],{"class":177},[118,166823,70214],{"class":128},[118,166825,1074],{"class":177},[118,166827,379],{"class":233},[118,166829,135],{"class":128},[118,166831,166832],{"class":120,"line":1183},[118,166833,2404],{"emptyLinePlaceholder":45},[118,166835,166836],{"class":120,"line":1198},[118,166837,2404],{"emptyLinePlaceholder":45},[118,166839,166840,166842,166844,166846,166848,166850,166852,166854,166856,166858,166860],{"class":120,"line":1204},[118,166841,116307],{"class":128},[118,166843,174],{"class":124},[118,166845,4452],{"class":128},[118,166847,62672],{"class":233},[118,166849,51430],{"class":128},[118,166851,149881],{"class":233},[118,166853,12440],{"class":128},[118,166855,69117],{"class":233},[118,166857,51430],{"class":128},[118,166859,778],{"class":177},[118,166861,1569],{"class":128},[118,166863,166864,166866,166868],{"class":120,"line":1218},[118,166865,166149],{"class":128},[118,166867,10666],{"class":124},[118,166869,166870],{"class":128},"info)\n",[60,166872,166874],{"id":166873},"_78-匿名函数lambda","7.8 匿名函数lambda",[15,166876,166877,166880],{},[115,166878,166879],{},"lambda"," 用于定义简单匿名函数。",[109,166882,166884],{"className":30371,"code":166883,"language":30373,"meta":39,"style":39},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[115,166885,166886,166903],{"__ignoreMap":39},[118,166887,166888,166891,166893,166896,166899,166901],{"class":120,"line":121},[118,166889,166890],{"class":128},"add ",[118,166892,174],{"class":124},[118,166894,166895],{"class":124}," lambda",[118,166897,166898],{"class":128}," a, b: a ",[118,166900,609],{"class":124},[118,166902,151097],{"class":128},[118,166904,166905,166907,166909,166911,166913,166915],{"class":120,"line":40},[118,166906,30408],{"class":177},[118,166908,166593],{"class":128},[118,166910,346],{"class":177},[118,166912,12440],{"class":128},[118,166914,206],{"class":177},[118,166916,30490],{"class":128},[15,166918,166919],{},"常和排序、过滤等函数一起使用。",[15,166921,166922],{},"按分数排序：",[109,166924,166926],{"className":30371,"code":166925,"language":30373,"meta":39,"style":39},"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",[115,166927,166928,166936,166956,166976,166996,167000,167004,167027],{"__ignoreMap":39},[118,166929,166930,166932,166934],{"class":120,"line":121},[118,166931,159709],{"class":128},[118,166933,174],{"class":124},[118,166935,55440],{"class":128},[118,166937,166938,166940,166942,166944,166946,166948,166950,166952,166954],{"class":120,"line":40},[118,166939,148378],{"class":128},[118,166941,62672],{"class":233},[118,166943,51430],{"class":128},[118,166945,149881],{"class":233},[118,166947,12440],{"class":128},[118,166949,151465],{"class":233},[118,166951,51430],{"class":128},[118,166953,1117],{"class":177},[118,166955,4934],{"class":128},[118,166957,166958,166960,166962,166964,166966,166968,166970,166972,166974],{"class":120,"line":1183},[118,166959,148378],{"class":128},[118,166961,62672],{"class":233},[118,166963,51430],{"class":128},[118,166965,150929],{"class":233},[118,166967,12440],{"class":128},[118,166969,151465],{"class":233},[118,166971,51430],{"class":128},[118,166973,939],{"class":177},[118,166975,4934],{"class":128},[118,166977,166978,166980,166982,166984,166986,166988,166990,166992,166994],{"class":120,"line":1198},[118,166979,148378],{"class":128},[118,166981,62672],{"class":233},[118,166983,51430],{"class":128},[118,166985,159724],{"class":233},[118,166987,12440],{"class":128},[118,166989,151465],{"class":233},[118,166991,51430],{"class":128},[118,166993,534],{"class":177},[118,166995,4934],{"class":128},[118,166997,166998],{"class":120,"line":1204},[118,166999,33239],{"class":128},[118,167001,167002],{"class":120,"line":1218},[118,167003,2404],{"emptyLinePlaceholder":45},[118,167005,167006,167009,167011,167013,167015,167017,167019,167021,167023,167025],{"class":120,"line":1224},[118,167007,167008],{"class":128},"students.sort(",[118,167010,153939],{"class":5221},[118,167012,153942],{"class":124},[118,167014,153945],{"class":128},[118,167016,151465],{"class":233},[118,167018,112195],{"class":128},[118,167020,163521],{"class":5221},[118,167022,174],{"class":124},[118,167024,31469],{"class":177},[118,167026,135],{"class":128},[118,167028,167029,167031],{"class":120,"line":1315},[118,167030,30408],{"class":177},[118,167032,164988],{"class":128},[15,167034,167035,167036,167038],{},"如果逻辑复杂，不要硬写 ",[115,167037,166879],{},"，定义普通函数更清晰。",[60,167040,167042],{"id":167041},"_79-函数作为参数","7.9 函数作为参数",[15,167044,167045],{},"函数可以作为参数传给另一个函数。",[109,167047,167049],{"className":30371,"code":167048,"language":30373,"meta":39,"style":39},"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",[115,167050,167051,167059,167069,167073,167077,167087,167094,167098,167102],{"__ignoreMap":39},[118,167052,167053,167055,167057],{"class":120,"line":121},[118,167054,31940],{"class":124},[118,167056,5214],{"class":1967},[118,167058,151086],{"class":128},[118,167060,167061,167063,167065,167067],{"class":120,"line":40},[118,167062,4094],{"class":124},[118,167064,10874],{"class":128},[118,167066,609],{"class":124},[118,167068,151097],{"class":128},[118,167070,167071],{"class":120,"line":1183},[118,167072,2404],{"emptyLinePlaceholder":45},[118,167074,167075],{"class":120,"line":1198},[118,167076,2404],{"emptyLinePlaceholder":45},[118,167078,167079,167081,167084],{"class":120,"line":1204},[118,167080,31940],{"class":124},[118,167082,167083],{"class":1967}," calculate",[118,167085,167086],{"class":128},"(a, b, func):\n",[118,167088,167089,167091],{"class":120,"line":1218},[118,167090,4094],{"class":124},[118,167092,167093],{"class":128}," func(a, b)\n",[118,167095,167096],{"class":120,"line":1224},[118,167097,2404],{"emptyLinePlaceholder":45},[118,167099,167100],{"class":120,"line":1315},[118,167101,2404],{"emptyLinePlaceholder":45},[118,167103,167104,167106,167109,167111,167113,167115],{"class":120,"line":1321},[118,167105,30408],{"class":177},[118,167107,167108],{"class":128},"(calculate(",[118,167110,574],{"class":177},[118,167112,12440],{"class":128},[118,167114,828],{"class":177},[118,167116,167117],{"class":128},", add))\n",[15,167119,167120],{},"这种思想在排序、回调、框架中经常出现。",[60,167122,167124],{"id":167123},"_710-mapfiltersorted","7.10 map、filter、sorted",[89,167126,167128],{"id":167127},"_7101-map","7.10.1 map",[15,167130,167131,167133],{},[115,167132,74037],{}," 对每个元素执行函数。",[109,167135,167137],{"className":30371,"code":167136,"language":30373,"meta":39,"style":39},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[115,167138,167139,167163,167186],{"__ignoreMap":39},[118,167140,167141,167143,167145,167147,167149,167151,167153,167155,167157,167159,167161],{"class":120,"line":121},[118,167142,164093],{"class":128},[118,167144,174],{"class":124},[118,167146,52219],{"class":128},[118,167148,346],{"class":177},[118,167150,12440],{"class":128},[118,167152,206],{"class":177},[118,167154,12440],{"class":128},[118,167156,200],{"class":177},[118,167158,12440],{"class":128},[118,167160,421],{"class":177},[118,167162,33239],{"class":128},[118,167164,167165,167167,167169,167172,167174,167176,167179,167181,167183],{"class":120,"line":40},[118,167166,161299],{"class":128},[118,167168,174],{"class":124},[118,167170,167171],{"class":177}," map",[118,167173,129],{"class":128},[118,167175,166879],{"class":124},[118,167177,167178],{"class":128}," x: x ",[118,167180,583],{"class":124},[118,167182,14760],{"class":177},[118,167184,167185],{"class":128},", nums)\n",[118,167187,167188,167190,167192,167194],{"class":120,"line":1183},[118,167189,30408],{"class":177},[118,167191,129],{"class":128},[118,167193,154063],{"class":177},[118,167195,166061],{"class":128},[89,167197,167199],{"id":167198},"_7102-filter","7.10.2 filter",[15,167201,167202,167204],{},[115,167203,80044],{}," 保留满足条件的元素。",[109,167206,167208],{"className":30371,"code":167207,"language":30373,"meta":39,"style":39},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[115,167209,167210,167238,167263],{"__ignoreMap":39},[118,167211,167212,167214,167216,167218,167220,167222,167224,167226,167228,167230,167232,167234,167236],{"class":120,"line":121},[118,167213,164093],{"class":128},[118,167215,174],{"class":124},[118,167217,52219],{"class":128},[118,167219,346],{"class":177},[118,167221,12440],{"class":128},[118,167223,206],{"class":177},[118,167225,12440],{"class":128},[118,167227,200],{"class":177},[118,167229,12440],{"class":128},[118,167231,421],{"class":177},[118,167233,12440],{"class":128},[118,167235,447],{"class":177},[118,167237,33239],{"class":128},[118,167239,167240,167242,167244,167247,167249,167251,167253,167255,167257,167259,167261],{"class":120,"line":40},[118,167241,161299],{"class":128},[118,167243,174],{"class":124},[118,167245,167246],{"class":177}," filter",[118,167248,129],{"class":128},[118,167250,166879],{"class":124},[118,167252,167178],{"class":128},[118,167254,456],{"class":124},[118,167256,14760],{"class":177},[118,167258,101552],{"class":124},[118,167260,4097],{"class":177},[118,167262,167185],{"class":128},[118,167264,167265,167267,167269,167271],{"class":120,"line":1183},[118,167266,30408],{"class":177},[118,167268,129],{"class":128},[118,167270,154063],{"class":177},[118,167272,166061],{"class":128},[89,167274,167276],{"id":167275},"_7103-sorted","7.10.3 sorted",[15,167278,167279,167281],{},[115,167280,165229],{}," 返回排序后的新列表。",[109,167283,167285],{"className":30371,"code":167284,"language":30373,"meta":39,"style":39},"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",[115,167286,167287,167295,167315,167335,167355,167359,167363,167392],{"__ignoreMap":39},[118,167288,167289,167291,167293],{"class":120,"line":121},[118,167290,159709],{"class":128},[118,167292,174],{"class":124},[118,167294,55440],{"class":128},[118,167296,167297,167299,167301,167303,167305,167307,167309,167311,167313],{"class":120,"line":40},[118,167298,148378],{"class":128},[118,167300,62672],{"class":233},[118,167302,51430],{"class":128},[118,167304,149881],{"class":233},[118,167306,12440],{"class":128},[118,167308,151465],{"class":233},[118,167310,51430],{"class":128},[118,167312,1117],{"class":177},[118,167314,4934],{"class":128},[118,167316,167317,167319,167321,167323,167325,167327,167329,167331,167333],{"class":120,"line":1183},[118,167318,148378],{"class":128},[118,167320,62672],{"class":233},[118,167322,51430],{"class":128},[118,167324,150929],{"class":233},[118,167326,12440],{"class":128},[118,167328,151465],{"class":233},[118,167330,51430],{"class":128},[118,167332,939],{"class":177},[118,167334,4934],{"class":128},[118,167336,167337,167339,167341,167343,167345,167347,167349,167351,167353],{"class":120,"line":1198},[118,167338,148378],{"class":128},[118,167340,62672],{"class":233},[118,167342,51430],{"class":128},[118,167344,159724],{"class":233},[118,167346,12440],{"class":128},[118,167348,151465],{"class":233},[118,167350,51430],{"class":128},[118,167352,534],{"class":177},[118,167354,4934],{"class":128},[118,167356,167357],{"class":120,"line":1204},[118,167358,33239],{"class":128},[118,167360,167361],{"class":120,"line":1218},[118,167362,2404],{"emptyLinePlaceholder":45},[118,167364,167365,167367,167369,167371,167374,167376,167378,167380,167382,167384,167386,167388,167390],{"class":120,"line":1224},[118,167366,161299],{"class":128},[118,167368,174],{"class":124},[118,167370,163597],{"class":177},[118,167372,167373],{"class":128},"(students, ",[118,167375,153939],{"class":5221},[118,167377,153942],{"class":124},[118,167379,153945],{"class":128},[118,167381,151465],{"class":233},[118,167383,112195],{"class":128},[118,167385,163521],{"class":5221},[118,167387,174],{"class":124},[118,167389,31469],{"class":177},[118,167391,135],{"class":128},[118,167393,167394,167396],{"class":120,"line":1315},[118,167395,30408],{"class":177},[118,167397,76578],{"class":128},[60,167399,167401],{"id":167400},"_711-闭包入门","7.11 闭包入门",[15,167403,167404],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[109,167406,167408],{"className":30371,"code":167407,"language":30373,"meta":39,"style":39},"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",[115,167409,167410,167420,167430,167441,167445,167452,167456,167460,167474],{"__ignoreMap":39},[118,167411,167412,167414,167417],{"class":120,"line":121},[118,167413,31940],{"class":124},[118,167415,167416],{"class":1967}," outer",[118,167418,167419],{"class":128},"(base):\n",[118,167421,167422,167424,167427],{"class":120,"line":40},[118,167423,30794],{"class":124},[118,167425,167426],{"class":1967}," inner",[118,167428,167429],{"class":128},"(num):\n",[118,167431,167432,167434,167437,167439],{"class":120,"line":1183},[118,167433,14757],{"class":124},[118,167435,167436],{"class":128}," base ",[118,167438,609],{"class":124},[118,167440,166572],{"class":128},[118,167442,167443],{"class":120,"line":1198},[118,167444,2404],{"emptyLinePlaceholder":45},[118,167446,167447,167449],{"class":120,"line":1204},[118,167448,4094],{"class":124},[118,167450,167451],{"class":128}," inner\n",[118,167453,167454],{"class":120,"line":1218},[118,167455,2404],{"emptyLinePlaceholder":45},[118,167457,167458],{"class":120,"line":1224},[118,167459,2404],{"emptyLinePlaceholder":45},[118,167461,167462,167465,167467,167470,167472],{"class":120,"line":1315},[118,167463,167464],{"class":128},"add_10 ",[118,167466,174],{"class":124},[118,167468,167469],{"class":128}," outer(",[118,167471,574],{"class":177},[118,167473,135],{"class":128},[118,167475,167476,167478,167481,167483],{"class":120,"line":1321},[118,167477,30408],{"class":177},[118,167479,167480],{"class":128},"(add_10(",[118,167482,447],{"class":177},[118,167484,30490],{"class":128},[15,167486,167487],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[60,167489,167491],{"id":167490},"_712-装饰器入门","7.12 装饰器入门",[15,167493,167494],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[109,167496,167498],{"className":30371,"code":167497,"language":30373,"meta":39,"style":39},"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",[115,167499,167500,167509,167518,167529,167534,167545,167549,167556,167560,167564,167569,167577,167587,167591,167595],{"__ignoreMap":39},[118,167501,167502,167504,167506],{"class":120,"line":121},[118,167503,31940],{"class":124},[118,167505,87184],{"class":1967},[118,167507,167508],{"class":128},"(func):\n",[118,167510,167511,167513,167516],{"class":120,"line":40},[118,167512,30794],{"class":124},[118,167514,167515],{"class":1967}," wrapper",[118,167517,31946],{"class":128},[118,167519,167520,167522,167524,167527],{"class":120,"line":1183},[118,167521,32444],{"class":177},[118,167523,129],{"class":128},[118,167525,167526],{"class":233},"\"函数开始执行\"",[118,167528,135],{"class":128},[118,167530,167531],{"class":120,"line":1198},[118,167532,167533],{"class":128},"        func()\n",[118,167535,167536,167538,167540,167543],{"class":120,"line":1204},[118,167537,32444],{"class":177},[118,167539,129],{"class":128},[118,167541,167542],{"class":233},"\"函数执行结束\"",[118,167544,135],{"class":128},[118,167546,167547],{"class":120,"line":1218},[118,167548,2404],{"emptyLinePlaceholder":45},[118,167550,167551,167553],{"class":120,"line":1224},[118,167552,4094],{"class":124},[118,167554,167555],{"class":128}," wrapper\n",[118,167557,167558],{"class":120,"line":1315},[118,167559,2404],{"emptyLinePlaceholder":45},[118,167561,167562],{"class":120,"line":1321},[118,167563,2404],{"emptyLinePlaceholder":45},[118,167565,167566],{"class":120,"line":1333},[118,167567,167568],{"class":1967},"@log\n",[118,167570,167571,167573,167575],{"class":120,"line":1616},[118,167572,31940],{"class":124},[118,167574,160989],{"class":1967},[118,167576,31946],{"class":128},[118,167578,167579,167581,167583,167585],{"class":120,"line":1621},[118,167580,31292],{"class":177},[118,167582,129],{"class":128},[118,167584,5849],{"class":233},[118,167586,135],{"class":128},[118,167588,167589],{"class":120,"line":1627},[118,167590,2404],{"emptyLinePlaceholder":45},[118,167592,167593],{"class":120,"line":1632},[118,167594,2404],{"emptyLinePlaceholder":45},[118,167596,167597],{"class":120,"line":1646},[118,167598,161024],{"class":128},[15,167600,158267],{},[109,167602,167604],{"className":30371,"code":167603,"language":30373,"meta":39,"style":39},"say_hello = log(say_hello)\n",[115,167605,167606],{"__ignoreMap":39},[118,167607,167608,167611,167613],{"class":120,"line":121},[118,167609,167610],{"class":128},"say_hello ",[118,167612,174],{"class":124},[118,167614,167615],{"class":128}," log(say_hello)\n",[15,167617,167618],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[60,167620,167622],{"id":167621},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[109,167624,167626],{"className":30371,"code":167625,"language":30373,"meta":39,"style":39},"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",[115,167627,167628,167636,167653,167663,167682,167692,167699,167703,167709,167713,167717,167721,167729,167739,167743,167747],{"__ignoreMap":39},[118,167629,167630,167632,167634],{"class":120,"line":121},[118,167631,31940],{"class":124},[118,167633,87184],{"class":1967},[118,167635,167508],{"class":128},[118,167637,167638,167640,167642,167644,167646,167649,167651],{"class":120,"line":40},[118,167639,30794],{"class":124},[118,167641,167515],{"class":1967},[118,167643,129],{"class":128},[118,167645,583],{"class":124},[118,167647,167648],{"class":128},"args, ",[118,167650,10666],{"class":124},[118,167652,166659],{"class":128},[118,167654,167655,167657,167659,167661],{"class":120,"line":1183},[118,167656,32444],{"class":177},[118,167658,129],{"class":128},[118,167660,167526],{"class":233},[118,167662,135],{"class":128},[118,167664,167665,167668,167670,167673,167675,167677,167679],{"class":120,"line":1198},[118,167666,167667],{"class":128},"        result ",[118,167669,174],{"class":124},[118,167671,167672],{"class":128}," func(",[118,167674,583],{"class":124},[118,167676,167648],{"class":128},[118,167678,10666],{"class":124},[118,167680,167681],{"class":128},"kwargs)\n",[118,167683,167684,167686,167688,167690],{"class":120,"line":1204},[118,167685,32444],{"class":177},[118,167687,129],{"class":128},[118,167689,167542],{"class":233},[118,167691,135],{"class":128},[118,167693,167694,167696],{"class":120,"line":1218},[118,167695,14757],{"class":124},[118,167697,167698],{"class":128}," result\n",[118,167700,167701],{"class":120,"line":1224},[118,167702,2404],{"emptyLinePlaceholder":45},[118,167704,167705,167707],{"class":120,"line":1315},[118,167706,4094],{"class":124},[118,167708,167555],{"class":128},[118,167710,167711],{"class":120,"line":1321},[118,167712,2404],{"emptyLinePlaceholder":45},[118,167714,167715],{"class":120,"line":1333},[118,167716,2404],{"emptyLinePlaceholder":45},[118,167718,167719],{"class":120,"line":1616},[118,167720,167568],{"class":1967},[118,167722,167723,167725,167727],{"class":120,"line":1621},[118,167724,31940],{"class":124},[118,167726,5214],{"class":1967},[118,167728,151086],{"class":128},[118,167730,167731,167733,167735,167737],{"class":120,"line":1627},[118,167732,4094],{"class":124},[118,167734,10874],{"class":128},[118,167736,609],{"class":124},[118,167738,151097],{"class":128},[118,167740,167741],{"class":120,"line":1632},[118,167742,2404],{"emptyLinePlaceholder":45},[118,167744,167745],{"class":120,"line":1646},[118,167746,2404],{"emptyLinePlaceholder":45},[118,167748,167749,167751,167753,167755,167757,167759],{"class":120,"line":1651},[118,167750,30408],{"class":177},[118,167752,166593],{"class":128},[118,167754,574],{"class":177},[118,167756,12440],{"class":128},[118,167758,828],{"class":177},[118,167760,30490],{"class":128},[15,167762,167763,167764,101011,167766,167768],{},"这个写法使用 ",[115,167765,166525],{},[115,167767,166640],{}," 接收原函数的所有参数。",[60,167770,167772],{"id":167771},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[15,167774,123285],{},[72,167776,167777,167780,167783],{},[75,167778,167779],{},"给定一组学生数据。",[75,167781,167782],{},"封装函数，根据传入规则筛选学生。",[75,167784,167785],{},"筛选及格、优秀、未成年学生。",[15,167787,10040],{},[109,167789,167791],{"className":30371,"code":167790,"language":30373,"meta":39,"style":39},"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",[115,167792,167793,167801,167829,167857,167885,167889,167893,167897,167907,167915,167925,167932,167937,167943,167947,167951,167975,167998,168021,168025,168032,168039],{"__ignoreMap":39},[118,167794,167795,167797,167799],{"class":120,"line":121},[118,167796,159709],{"class":128},[118,167798,174],{"class":124},[118,167800,55440],{"class":128},[118,167802,167803,167805,167807,167809,167811,167813,167815,167817,167819,167821,167823,167825,167827],{"class":120,"line":40},[118,167804,148378],{"class":128},[118,167806,62672],{"class":233},[118,167808,51430],{"class":128},[118,167810,149881],{"class":233},[118,167812,12440],{"class":128},[118,167814,69117],{"class":233},[118,167816,51430],{"class":128},[118,167818,778],{"class":177},[118,167820,12440],{"class":128},[118,167822,151465],{"class":233},[118,167824,51430],{"class":128},[118,167826,1117],{"class":177},[118,167828,4934],{"class":128},[118,167830,167831,167833,167835,167837,167839,167841,167843,167845,167847,167849,167851,167853,167855],{"class":120,"line":1183},[118,167832,148378],{"class":128},[118,167834,62672],{"class":233},[118,167836,51430],{"class":128},[118,167838,150929],{"class":233},[118,167840,12440],{"class":128},[118,167842,69117],{"class":233},[118,167844,51430],{"class":128},[118,167846,753],{"class":177},[118,167848,12440],{"class":128},[118,167850,151465],{"class":233},[118,167852,51430],{"class":128},[118,167854,939],{"class":177},[118,167856,4934],{"class":128},[118,167858,167859,167861,167863,167865,167867,167869,167871,167873,167875,167877,167879,167881,167883],{"class":120,"line":1198},[118,167860,148378],{"class":128},[118,167862,62672],{"class":233},[118,167864,51430],{"class":128},[118,167866,159724],{"class":233},[118,167868,12440],{"class":128},[118,167870,69117],{"class":233},[118,167872,51430],{"class":128},[118,167874,803],{"class":177},[118,167876,12440],{"class":128},[118,167878,151465],{"class":233},[118,167880,51430],{"class":128},[118,167882,1010],{"class":177},[118,167884,4934],{"class":128},[118,167886,167887],{"class":120,"line":1204},[118,167888,33239],{"class":128},[118,167890,167891],{"class":120,"line":1218},[118,167892,2404],{"emptyLinePlaceholder":45},[118,167894,167895],{"class":120,"line":1224},[118,167896,2404],{"emptyLinePlaceholder":45},[118,167898,167899,167901,167904],{"class":120,"line":1315},[118,167900,31940],{"class":124},[118,167902,167903],{"class":1967}," filter_students",[118,167905,167906],{"class":128},"(students, condition):\n",[118,167908,167909,167911,167913],{"class":120,"line":1321},[118,167910,161216],{"class":128},[118,167912,174],{"class":124},[118,167914,51831],{"class":128},[118,167916,167917,167919,167921,167923],{"class":120,"line":1333},[118,167918,3205],{"class":124},[118,167920,152130],{"class":128},[118,167922,26036],{"class":124},[118,167924,152135],{"class":128},[118,167926,167927,167929],{"class":120,"line":1616},[118,167928,2501],{"class":124},[118,167930,167931],{"class":128}," condition(student):\n",[118,167933,167934],{"class":120,"line":1621},[118,167935,167936],{"class":128},"            result.append(student)\n",[118,167938,167939,167941],{"class":120,"line":1627},[118,167940,4094],{"class":124},[118,167942,167698],{"class":128},[118,167944,167945],{"class":120,"line":1632},[118,167946,2404],{"emptyLinePlaceholder":45},[118,167948,167949],{"class":120,"line":1646},[118,167950,2404],{"emptyLinePlaceholder":45},[118,167952,167953,167955,167957,167960,167962,167965,167967,167969,167971,167973],{"class":120,"line":1651},[118,167954,165694],{"class":128},[118,167956,174],{"class":124},[118,167958,167959],{"class":128}," filter_students(students, ",[118,167961,166879],{"class":124},[118,167963,167964],{"class":128}," s: s[",[118,167966,151465],{"class":233},[118,167968,4447],{"class":128},[118,167970,1714],{"class":124},[118,167972,157830],{"class":177},[118,167974,135],{"class":128},[118,167976,167977,167980,167982,167984,167986,167988,167990,167992,167994,167996],{"class":120,"line":1657},[118,167978,167979],{"class":128},"excellent ",[118,167981,174],{"class":124},[118,167983,167959],{"class":128},[118,167985,166879],{"class":124},[118,167987,167964],{"class":128},[118,167989,151465],{"class":233},[118,167991,4447],{"class":128},[118,167993,1714],{"class":124},[118,167995,157781],{"class":177},[118,167997,135],{"class":128},[118,167999,168000,168003,168005,168007,168009,168011,168013,168015,168017,168019],{"class":120,"line":1678},[118,168001,168002],{"class":128},"under_age ",[118,168004,174],{"class":124},[118,168006,167959],{"class":128},[118,168008,166879],{"class":124},[118,168010,167964],{"class":128},[118,168012,69117],{"class":233},[118,168014,4447],{"class":128},[118,168016,1038],{"class":124},[118,168018,156278],{"class":177},[118,168020,135],{"class":128},[118,168022,168023],{"class":120,"line":1683},[118,168024,2404],{"emptyLinePlaceholder":45},[118,168026,168027,168029],{"class":120,"line":1697},[118,168028,30408],{"class":177},[118,168030,168031],{"class":128},"(passed)\n",[118,168033,168034,168036],{"class":120,"line":1702},[118,168035,30408],{"class":177},[118,168037,168038],{"class":128},"(excellent)\n",[118,168040,168041,168043],{"class":120,"line":1731},[118,168042,30408],{"class":177},[118,168044,168045],{"class":128},"(under_age)\n",[60,168047,168049],{"id":168048},"_715-易错点","7.15 易错点",[72,168051,168052,168055,168063,168068,168079],{},[75,168053,168054],{},"默认参数不要写可变对象。",[75,168056,168057,168059,168060,168062],{},[115,168058,166525],{}," 是元组，",[115,168061,166640],{}," 是字典。",[75,168064,168065,168067],{},[115,168066,166879],{}," 只适合简单表达式。",[75,168069,168070,101011,168072,168074,168075,168078],{},[115,168071,74037],{},[115,168073,80044],{}," 的结果是迭代器，常用 ",[115,168076,168077],{},"list()"," 转换查看。",[75,168080,168081],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[60,168083,168085],{"id":168084},"_716-本章练习","7.16 本章练习",[72,168087,168088,168095,168101,168106,168111],{},[75,168089,168090,168091,168094],{},"写函数 ",[115,168092,168093],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[75,168096,168090,168097,168100],{},[115,168098,168099],{},"print_user(**kwargs)","，输出用户所有字段。",[75,168102,104359,168103,168105],{},[115,168104,166879],{}," 对学生列表按年龄排序。",[75,168107,104359,168108,168110],{},[115,168109,80044],{}," 找出成绩不及格的学生。",[75,168112,168113],{},"写一个装饰器，统计函数执行前后的提示信息。",[5131,168115,168116],{},"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":39,"searchDepth":40,"depth":40,"links":168118},[168119,168120,168121,168122,168123,168124,168128,168129,168130,168131,168136,168137,168138,168139,168140,168141],{"id":165977,"depth":40,"text":165978},{"id":166091,"depth":40,"text":166092},{"id":166180,"depth":40,"text":166181},{"id":166242,"depth":40,"text":166243},{"id":166388,"depth":40,"text":166389},{"id":166515,"depth":40,"text":166516,"children":168125},[168126,168127],{"id":166519,"depth":1183,"text":166520},{"id":166634,"depth":1183,"text":166635},{"id":166715,"depth":40,"text":166716},{"id":166873,"depth":40,"text":166874},{"id":167041,"depth":40,"text":167042},{"id":167123,"depth":40,"text":167124,"children":168132},[168133,168134,168135],{"id":167127,"depth":1183,"text":167128},{"id":167198,"depth":1183,"text":167199},{"id":167275,"depth":1183,"text":167276},{"id":167400,"depth":40,"text":167401},{"id":167490,"depth":40,"text":167491},{"id":167621,"depth":40,"text":167622},{"id":167771,"depth":40,"text":167772},{"id":168048,"depth":40,"text":168049},{"id":168084,"depth":40,"text":168085},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165969,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168148,"title":168149,"body":168150,"description":42,"extension":43,"meta":170669,"navigation":45,"path":170670,"seo":170671,"stem":170672,"__hash__":170673},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168151,"toc":170644},[168152,168155,168159,168162,168165,168196,168200,168204,168207,168234,168238,168241,168292,168295,168310,168313,168348,168352,168354,168378,168381,168441,168445,168449,168452,168509,168512,168532,168536,168539,168602,168606,168609,168665,168672,168696,168700,168703,168766,168770,168775,168826,168829,168833,168838,168905,168908,168990,168994,168999,169050,169053,169057,169060,169063,169071,169074,169120,169123,169169,169173,169179,169223,169226,169272,169275,169315,169318,169379,169383,169386,169476,169479,169621,169624,169691,169695,169698,169701,169842,169845,169923,169926,170102,170106,170108,170119,170121,170320,170324,170568,170572,170606,170610,170641],[10,168153,168149],{"id":168154},"_8-文件操作",[60,168156,168158],{"id":168157},"_81-文件操作的意义","8.1 文件操作的意义",[15,168160,168161],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[15,168163,168164],{},"常见文件类型：",[72,168166,168167,168173,168179,168185,168191],{},[75,168168,168169,168172],{},[115,168170,168171],{},".txt","：普通文本。",[75,168174,168175,168178],{},[115,168176,168177],{},".csv","：表格文本。",[75,168180,168181,168184],{},[115,168182,168183],{},".json","：结构化数据。",[75,168186,168187,168190],{},[115,168188,168189],{},".log","：日志文件。",[75,168192,168193,168195],{},[115,168194,146345],{},"：Python 源代码。",[60,168197,168199],{"id":168198},"_82-路径","8.2 路径",[89,168201,168203],{"id":168202},"_821-相对路径","8.2.1 相对路径",[15,168205,168206],{},"相对当前运行目录：",[109,168208,168210],{"className":30371,"code":168209,"language":30373,"meta":39,"style":39},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[115,168211,168212],{"__ignoreMap":39},[118,168213,168214,168216,168218,168220,168222,168224,168226,168228,168230,168232],{"class":120,"line":121},[118,168215,86908],{"class":177},[118,168217,129],{"class":128},[118,168219,146789],{"class":233},[118,168221,12440],{"class":128},[118,168223,146794],{"class":233},[118,168225,12440],{"class":128},[118,168227,146799],{"class":5221},[118,168229,174],{"class":124},[118,168231,146804],{"class":233},[118,168233,135],{"class":128},[89,168235,168237],{"id":168236},"_822-绝对路径","8.2.2 绝对路径",[15,168239,168240],{},"从根目录或盘符开始：",[109,168242,168244],{"className":30371,"code":168243,"language":30373,"meta":39,"style":39},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[115,168245,168246,168269],{"__ignoreMap":39},[118,168247,168248,168250,168252,168255,168257,168259,168261,168263,168265,168267],{"class":120,"line":121},[118,168249,86908],{"class":177},[118,168251,129],{"class":128},[118,168253,168254],{"class":233},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[118,168256,12440],{"class":128},[118,168258,146794],{"class":233},[118,168260,12440],{"class":128},[118,168262,146799],{"class":5221},[118,168264,174],{"class":124},[118,168266,146804],{"class":233},[118,168268,135],{"class":128},[118,168270,168271,168273,168275,168278,168280,168282,168284,168286,168288,168290],{"class":120,"line":40},[118,168272,86908],{"class":177},[118,168274,129],{"class":128},[118,168276,168277],{"class":233},"\"D:\u002Fdata\u002Fdata.txt\"",[118,168279,12440],{"class":128},[118,168281,146794],{"class":233},[118,168283,12440],{"class":128},[118,168285,146799],{"class":5221},[118,168287,174],{"class":124},[118,168289,146804],{"class":233},[118,168291,135],{"class":128},[15,168293,168294],{},"Windows 路径建议写成：",[109,168296,168298],{"className":30371,"code":168297,"language":30373,"meta":39,"style":39},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[115,168299,168300],{"__ignoreMap":39},[118,168301,168302,168305,168307],{"class":120,"line":121},[118,168303,168304],{"class":128},"path ",[118,168306,174],{"class":124},[118,168308,168309],{"class":233}," \"D:\u002Fdata\u002Fdata.txt\"\n",[15,168311,168312],{},"或原始字符串：",[109,168314,168316],{"className":30371,"code":168315,"language":30373,"meta":39,"style":39},"path = r\"D:\\data\\data.txt\"\n",[115,168317,168318],{"__ignoreMap":39},[118,168319,168320,168322,168324,168326,168328,168331,168334,168337,168339,168341,168343,168346],{"class":120,"line":121},[118,168321,168304],{"class":128},[118,168323,174],{"class":124},[118,168325,17126],{"class":124},[118,168327,379],{"class":233},[118,168329,168330],{"class":47970},"D:",[118,168332,168333],{"class":177},"\\d",[118,168335,168336],{"class":47970},"ata",[118,168338,168333],{"class":177},[118,168340,168336],{"class":47970},[118,168342,686],{"class":177},[118,168344,168345],{"class":47970},"txt",[118,168347,25138],{"class":233},[60,168349,168351],{"id":168350},"_83-open函数","8.3 open函数",[15,168353,5186],{},[109,168355,168357],{"className":30371,"code":168356,"language":30373,"meta":39,"style":39},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[115,168358,168359],{"__ignoreMap":39},[118,168360,168361,168363,168365,168367,168370,168372,168374,168376],{"class":120,"line":121},[118,168362,45347],{"class":5221},[118,168364,13569],{"class":124},[118,168366,146784],{"class":177},[118,168368,168369],{"class":128},"(文件路径, 打开模式, ",[118,168371,146799],{"class":5221},[118,168373,174],{"class":124},[118,168375,146804],{"class":233},[118,168377,135],{"class":128},[15,168379,168380],{},"常见模式：",[266,168382,168383,168392],{},[269,168384,168385],{},[272,168386,168387,168390],{},[275,168388,168389],{},"模式",[275,168391,25862],{},[313,168393,168394,168403,168412,168421,168431],{},[272,168395,168396,168400],{},[318,168397,168398],{},[115,168399,798],{},[318,168401,168402],{},"只读，文件不存在会报错",[272,168404,168405,168409],{},[318,168406,168407],{},[115,168408,923],{},[318,168410,168411],{},"只写，文件不存在会创建，存在会清空",[272,168413,168414,168418],{},[318,168415,168416],{},[115,168417,21],{},[318,168419,168420],{},"追加，文件不存在会创建",[272,168422,168423,168428],{},[318,168424,168425],{},[115,168426,168427],{},"rb",[318,168429,168430],{},"二进制只读",[272,168432,168433,168438],{},[318,168434,168435],{},[115,168436,168437],{},"wb",[318,168439,168440],{},"二进制只写",[60,168442,168444],{"id":168443},"_84-读取文件","8.4 读取文件",[89,168446,168448],{"id":168447},"_841-read","8.4.1 read",[15,168450,168451],{},"一次读取全部内容：",[109,168453,168455],{"className":30371,"code":168454,"language":30373,"meta":39,"style":39},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[115,168456,168457,168483,168495,168502],{"__ignoreMap":39},[118,168458,168459,168461,168463,168465,168467,168469,168471,168473,168475,168477,168479,168481],{"class":120,"line":121},[118,168460,45347],{"class":5221},[118,168462,13569],{"class":124},[118,168464,146784],{"class":177},[118,168466,129],{"class":128},[118,168468,146789],{"class":233},[118,168470,12440],{"class":128},[118,168472,146794],{"class":233},[118,168474,12440],{"class":128},[118,168476,146799],{"class":5221},[118,168478,174],{"class":124},[118,168480,146804],{"class":233},[118,168482,135],{"class":128},[118,168484,168485,168488,168490,168492],{"class":120,"line":40},[118,168486,168487],{"class":128},"content ",[118,168489,174],{"class":124},[118,168491,148146],{"class":5221},[118,168493,168494],{"class":128},".read()\n",[118,168496,168497,168499],{"class":120,"line":1183},[118,168498,30408],{"class":177},[118,168500,168501],{"class":128},"(content)\n",[118,168503,168504,168506],{"class":120,"line":1198},[118,168505,45347],{"class":5221},[118,168507,168508],{"class":128},".close()\n",[15,168510,168511],{},"可以指定读取字符数：",[109,168513,168515],{"className":30371,"code":168514,"language":30373,"meta":39,"style":39},"content = file.read(10)\n",[115,168516,168517],{"__ignoreMap":39},[118,168518,168519,168521,168523,168525,168528,168530],{"class":120,"line":121},[118,168520,168487],{"class":128},[118,168522,174],{"class":124},[118,168524,148146],{"class":5221},[118,168526,168527],{"class":128},".read(",[118,168529,574],{"class":177},[118,168531,135],{"class":128},[89,168533,168535],{"id":168534},"_842-readline","8.4.2 readline",[15,168537,168538],{},"一次读取一行：",[109,168540,168542],{"className":30371,"code":168541,"language":30373,"meta":39,"style":39},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[115,168543,168544,168570,168574,168585,168592,168596],{"__ignoreMap":39},[118,168545,168546,168548,168550,168552,168554,168556,168558,168560,168562,168564,168566,168568],{"class":120,"line":121},[118,168547,45347],{"class":5221},[118,168549,13569],{"class":124},[118,168551,146784],{"class":177},[118,168553,129],{"class":128},[118,168555,146789],{"class":233},[118,168557,12440],{"class":128},[118,168559,146794],{"class":233},[118,168561,12440],{"class":128},[118,168563,146799],{"class":5221},[118,168565,174],{"class":124},[118,168567,146804],{"class":233},[118,168569,135],{"class":128},[118,168571,168572],{"class":120,"line":40},[118,168573,2404],{"emptyLinePlaceholder":45},[118,168575,168576,168578,168580,168582],{"class":120,"line":1183},[118,168577,147245],{"class":128},[118,168579,174],{"class":124},[118,168581,148146],{"class":5221},[118,168583,168584],{"class":128},".readline()\n",[118,168586,168587,168589],{"class":120,"line":1198},[118,168588,30408],{"class":177},[118,168590,168591],{"class":128},"(line)\n",[118,168593,168594],{"class":120,"line":1204},[118,168595,2404],{"emptyLinePlaceholder":45},[118,168597,168598,168600],{"class":120,"line":1218},[118,168599,45347],{"class":5221},[118,168601,168508],{"class":128},[89,168603,168605],{"id":168604},"_843-readlines","8.4.3 readlines",[15,168607,168608],{},"读取所有行，返回列表：",[109,168610,168612],{"className":30371,"code":168611,"language":30373,"meta":39,"style":39},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[115,168613,168614,168640,168652,168659],{"__ignoreMap":39},[118,168615,168616,168618,168620,168622,168624,168626,168628,168630,168632,168634,168636,168638],{"class":120,"line":121},[118,168617,45347],{"class":5221},[118,168619,13569],{"class":124},[118,168621,146784],{"class":177},[118,168623,129],{"class":128},[118,168625,146789],{"class":233},[118,168627,12440],{"class":128},[118,168629,146794],{"class":233},[118,168631,12440],{"class":128},[118,168633,146799],{"class":5221},[118,168635,174],{"class":124},[118,168637,146804],{"class":233},[118,168639,135],{"class":128},[118,168641,168642,168645,168647,168649],{"class":120,"line":40},[118,168643,168644],{"class":128},"lines ",[118,168646,174],{"class":124},[118,168648,148146],{"class":5221},[118,168650,168651],{"class":128},".readlines()\n",[118,168653,168654,168656],{"class":120,"line":1183},[118,168655,30408],{"class":177},[118,168657,168658],{"class":128},"(lines)\n",[118,168660,168661,168663],{"class":120,"line":1198},[118,168662,45347],{"class":5221},[118,168664,168508],{"class":128},[15,168666,168667,168668,168671],{},"每一行通常带有换行符，可以用 ",[115,168669,168670],{},"strip()"," 去掉：",[109,168673,168675],{"className":30371,"code":168674,"language":30373,"meta":39,"style":39},"for line in lines:\n    print(line.strip())\n",[115,168676,168677,168689],{"__ignoreMap":39},[118,168678,168679,168681,168684,168686],{"class":120,"line":121},[118,168680,3029],{"class":124},[118,168682,168683],{"class":128}," line ",[118,168685,26036],{"class":124},[118,168687,168688],{"class":128}," lines:\n",[118,168690,168691,168693],{"class":120,"line":40},[118,168692,31292],{"class":177},[118,168694,168695],{"class":128},"(line.strip())\n",[89,168697,168699],{"id":168698},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[15,168701,168702],{},"推荐读取大文件时使用：",[109,168704,168706],{"className":30371,"code":168705,"language":30373,"meta":39,"style":39},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[115,168707,168708,168734,168738,168750,168756,168760],{"__ignoreMap":39},[118,168709,168710,168712,168714,168716,168718,168720,168722,168724,168726,168728,168730,168732],{"class":120,"line":121},[118,168711,45347],{"class":5221},[118,168713,13569],{"class":124},[118,168715,146784],{"class":177},[118,168717,129],{"class":128},[118,168719,146789],{"class":233},[118,168721,12440],{"class":128},[118,168723,146794],{"class":233},[118,168725,12440],{"class":128},[118,168727,146799],{"class":5221},[118,168729,174],{"class":124},[118,168731,146804],{"class":233},[118,168733,135],{"class":128},[118,168735,168736],{"class":120,"line":40},[118,168737,2404],{"emptyLinePlaceholder":45},[118,168739,168740,168742,168744,168746,168748],{"class":120,"line":1183},[118,168741,3029],{"class":124},[118,168743,168683],{"class":128},[118,168745,26036],{"class":124},[118,168747,148146],{"class":5221},[118,168749,3743],{"class":128},[118,168751,168752,168754],{"class":120,"line":1198},[118,168753,31292],{"class":177},[118,168755,168695],{"class":128},[118,168757,168758],{"class":120,"line":1204},[118,168759,2404],{"emptyLinePlaceholder":45},[118,168761,168762,168764],{"class":120,"line":1218},[118,168763,45347],{"class":5221},[118,168765,168508],{"class":128},[60,168767,168769],{"id":168768},"_85-with语句","8.5 with语句",[15,168771,168772,168774],{},[115,168773,107826],{}," 会自动关闭文件，推荐使用。",[109,168776,168778],{"className":30371,"code":168777,"language":30373,"meta":39,"style":39},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[115,168779,168780,168810,168820],{"__ignoreMap":39},[118,168781,168782,168784,168786,168788,168790,168792,168794,168796,168798,168800,168802,168804,168806,168808],{"class":120,"line":121},[118,168783,107826],{"class":124},[118,168785,146784],{"class":177},[118,168787,129],{"class":128},[118,168789,146789],{"class":233},[118,168791,12440],{"class":128},[118,168793,146794],{"class":233},[118,168795,12440],{"class":128},[118,168797,146799],{"class":5221},[118,168799,174],{"class":124},[118,168801,146804],{"class":233},[118,168803,13719],{"class":128},[118,168805,31376],{"class":124},[118,168807,148146],{"class":5221},[118,168809,3743],{"class":128},[118,168811,168812,168814,168816,168818],{"class":120,"line":40},[118,168813,146816],{"class":128},[118,168815,174],{"class":124},[118,168817,148146],{"class":5221},[118,168819,168494],{"class":128},[118,168821,168822,168824],{"class":120,"line":1183},[118,168823,31292],{"class":177},[118,168825,168501],{"class":128},[15,168827,168828],{},"等价于打开文件、读取、最后关闭，但更安全。",[60,168830,168832],{"id":168831},"_86-写入文件","8.6 写入文件",[15,168834,168835,168837],{},[115,168836,923],{}," 模式会清空原文件。",[109,168839,168841],{"className":30371,"code":168840,"language":30373,"meta":39,"style":39},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[115,168842,168843,168873,168890],{"__ignoreMap":39},[118,168844,168845,168847,168849,168851,168853,168855,168857,168859,168861,168863,168865,168867,168869,168871],{"class":120,"line":121},[118,168846,107826],{"class":124},[118,168848,146784],{"class":177},[118,168850,129],{"class":128},[118,168852,146789],{"class":233},[118,168854,12440],{"class":128},[118,168856,151969],{"class":233},[118,168858,12440],{"class":128},[118,168860,146799],{"class":5221},[118,168862,174],{"class":124},[118,168864,146804],{"class":233},[118,168866,13719],{"class":128},[118,168868,31376],{"class":124},[118,168870,148146],{"class":5221},[118,168872,3743],{"class":128},[118,168874,168875,168878,168881,168884,168886,168888],{"class":120,"line":40},[118,168876,168877],{"class":5221},"    file",[118,168879,168880],{"class":128},".write(",[118,168882,168883],{"class":233},"\"hello",[118,168885,156518],{"class":177},[118,168887,379],{"class":233},[118,168889,135],{"class":128},[118,168891,168892,168894,168896,168899,168901,168903],{"class":120,"line":1183},[118,168893,168877],{"class":5221},[118,168895,168880],{"class":128},[118,168897,168898],{"class":233},"\"python",[118,168900,156518],{"class":177},[118,168902,379],{"class":233},[118,168904,135],{"class":128},[15,168906,168907],{},"写入多行：",[109,168909,168911],{"className":30371,"code":168910,"language":30373,"meta":39,"style":39},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[115,168912,168913,168948,168952,168983],{"__ignoreMap":39},[118,168914,168915,168917,168919,168921,168924,168926,168928,168930,168933,168935,168937,168939,168942,168944,168946],{"class":120,"line":121},[118,168916,168644],{"class":128},[118,168918,174],{"class":124},[118,168920,52219],{"class":128},[118,168922,168923],{"class":233},"\"小明,18",[118,168925,156518],{"class":177},[118,168927,379],{"class":233},[118,168929,12440],{"class":128},[118,168931,168932],{"class":233},"\"小红,17",[118,168934,156518],{"class":177},[118,168936,379],{"class":233},[118,168938,12440],{"class":128},[118,168940,168941],{"class":233},"\"小刚,19",[118,168943,156518],{"class":177},[118,168945,379],{"class":233},[118,168947,33239],{"class":128},[118,168949,168950],{"class":120,"line":40},[118,168951,2404],{"emptyLinePlaceholder":45},[118,168953,168954,168956,168958,168960,168963,168965,168967,168969,168971,168973,168975,168977,168979,168981],{"class":120,"line":1183},[118,168955,107826],{"class":124},[118,168957,146784],{"class":177},[118,168959,129],{"class":128},[118,168961,168962],{"class":233},"\"students.txt\"",[118,168964,12440],{"class":128},[118,168966,151969],{"class":233},[118,168968,12440],{"class":128},[118,168970,146799],{"class":5221},[118,168972,174],{"class":124},[118,168974,146804],{"class":233},[118,168976,13719],{"class":128},[118,168978,31376],{"class":124},[118,168980,148146],{"class":5221},[118,168982,3743],{"class":128},[118,168984,168985,168987],{"class":120,"line":1198},[118,168986,168877],{"class":5221},[118,168988,168989],{"class":128},".writelines(lines)\n",[60,168991,168993],{"id":168992},"_87-追加文件","8.7 追加文件",[15,168995,168996,168998],{},[115,168997,21],{}," 模式不会清空原内容，而是在末尾追加。",[109,169000,169002],{"className":30371,"code":169001,"language":30373,"meta":39,"style":39},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[115,169003,169004,169035],{"__ignoreMap":39},[118,169005,169006,169008,169010,169012,169015,169017,169019,169021,169023,169025,169027,169029,169031,169033],{"class":120,"line":121},[118,169007,107826],{"class":124},[118,169009,146784],{"class":177},[118,169011,129],{"class":128},[118,169013,169014],{"class":233},"\"log.txt\"",[118,169016,12440],{"class":128},[118,169018,165318],{"class":233},[118,169020,12440],{"class":128},[118,169022,146799],{"class":5221},[118,169024,174],{"class":124},[118,169026,146804],{"class":233},[118,169028,13719],{"class":128},[118,169030,31376],{"class":124},[118,169032,148146],{"class":5221},[118,169034,3743],{"class":128},[118,169036,169037,169039,169041,169044,169046,169048],{"class":120,"line":40},[118,169038,168877],{"class":5221},[118,169040,168880],{"class":128},[118,169042,169043],{"class":233},"\"程序启动",[118,169045,156518],{"class":177},[118,169047,379],{"class":233},[118,169049,135],{"class":128},[15,169051,169052],{},"日志类文件常用追加模式。",[60,169054,169056],{"id":169055},"_88-文件编码","8.8 文件编码",[15,169058,169059],{},"编码决定文字如何保存为字节。",[15,169061,169062],{},"常见编码：",[72,169064,169065,169068],{},[75,169066,169067],{},"UTF-8：推荐。",[75,169069,169070],{},"GBK：部分 Windows 中文文件常见。",[15,169072,169073],{},"读取文件乱码时，可以尝试：",[109,169075,169077],{"className":30371,"code":169076,"language":30373,"meta":39,"style":39},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[115,169078,169079,169110],{"__ignoreMap":39},[118,169080,169081,169083,169085,169087,169089,169091,169093,169095,169097,169099,169102,169104,169106,169108],{"class":120,"line":121},[118,169082,107826],{"class":124},[118,169084,146784],{"class":177},[118,169086,129],{"class":128},[118,169088,146789],{"class":233},[118,169090,12440],{"class":128},[118,169092,146794],{"class":233},[118,169094,12440],{"class":128},[118,169096,146799],{"class":5221},[118,169098,174],{"class":124},[118,169100,169101],{"class":233},"\"gbk\"",[118,169103,13719],{"class":128},[118,169105,31376],{"class":124},[118,169107,148146],{"class":5221},[118,169109,3743],{"class":128},[118,169111,169112,169114,169116,169118],{"class":120,"line":40},[118,169113,146816],{"class":128},[118,169115,174],{"class":124},[118,169117,148146],{"class":5221},[118,169119,168494],{"class":128},[15,169121,169122],{},"写文件时建议统一 UTF-8：",[109,169124,169126],{"className":30371,"code":169125,"language":30373,"meta":39,"style":39},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[115,169127,169128,169158],{"__ignoreMap":39},[118,169129,169130,169132,169134,169136,169138,169140,169142,169144,169146,169148,169150,169152,169154,169156],{"class":120,"line":121},[118,169131,107826],{"class":124},[118,169133,146784],{"class":177},[118,169135,129],{"class":128},[118,169137,146789],{"class":233},[118,169139,12440],{"class":128},[118,169141,151969],{"class":233},[118,169143,12440],{"class":128},[118,169145,146799],{"class":5221},[118,169147,174],{"class":124},[118,169149,146804],{"class":233},[118,169151,13719],{"class":128},[118,169153,31376],{"class":124},[118,169155,148146],{"class":5221},[118,169157,3743],{"class":128},[118,169159,169160,169162,169164,169167],{"class":120,"line":40},[118,169161,168877],{"class":5221},[118,169163,168880],{"class":128},[118,169165,169166],{"class":233},"\"中文内容\"",[118,169168,135],{"class":128},[60,169170,169172],{"id":169171},"_89-pathlib","8.9 pathlib",[15,169174,169175,169178],{},[115,169176,169177],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[109,169180,169182],{"className":30371,"code":169181,"language":30373,"meta":39,"style":39},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[115,169183,169184,169194,169198,169216],{"__ignoreMap":39},[118,169185,169186,169188,169190,169192],{"class":120,"line":121},[118,169187,30730],{"class":124},[118,169189,108304],{"class":128},[118,169191,30385],{"class":124},[118,169193,108309],{"class":128},[118,169195,169196],{"class":120,"line":40},[118,169197,2404],{"emptyLinePlaceholder":45},[118,169199,169200,169202,169204,169206,169209,169211,169213],{"class":120,"line":1183},[118,169201,168304],{"class":128},[118,169203,174],{"class":124},[118,169205,108538],{"class":128},[118,169207,169208],{"class":233},"\"data\"",[118,169210,13719],{"class":128},[118,169212,712],{"class":124},[118,169214,169215],{"class":233}," \"students.txt\"\n",[118,169217,169218,169220],{"class":120,"line":1198},[118,169219,30408],{"class":177},[118,169221,169222],{"class":128},"(path)\n",[15,169224,169225],{},"创建目录：",[109,169227,169229],{"className":30371,"code":169228,"language":30373,"meta":39,"style":39},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[115,169230,169231,169241,169245,169258],{"__ignoreMap":39},[118,169232,169233,169235,169237,169239],{"class":120,"line":121},[118,169234,30730],{"class":124},[118,169236,108304],{"class":128},[118,169238,30385],{"class":124},[118,169240,108309],{"class":128},[118,169242,169243],{"class":120,"line":40},[118,169244,2404],{"emptyLinePlaceholder":45},[118,169246,169247,169250,169252,169254,169256],{"class":120,"line":1183},[118,169248,169249],{"class":128},"data_dir ",[118,169251,174],{"class":124},[118,169253,108538],{"class":128},[118,169255,169208],{"class":233},[118,169257,135],{"class":128},[118,169259,169260,169263,169266,169268,169270],{"class":120,"line":1198},[118,169261,169262],{"class":128},"data_dir.mkdir(",[118,169264,169265],{"class":5221},"exist_ok",[118,169267,174],{"class":124},[118,169269,31469],{"class":177},[118,169271,135],{"class":128},[15,169273,169274],{},"判断文件是否存在：",[109,169276,169278],{"className":30371,"code":169277,"language":30373,"meta":39,"style":39},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[115,169279,169280,169293,169297,169304],{"__ignoreMap":39},[118,169281,169282,169284,169286,169288,169291],{"class":120,"line":121},[118,169283,168304],{"class":128},[118,169285,174],{"class":124},[118,169287,108538],{"class":128},[118,169289,169290],{"class":233},"\"data\u002Fstudents.txt\"",[118,169292,135],{"class":128},[118,169294,169295],{"class":120,"line":40},[118,169296,2404],{"emptyLinePlaceholder":45},[118,169298,169299,169301],{"class":120,"line":1183},[118,169300,1535],{"class":124},[118,169302,169303],{"class":128}," path.exists():\n",[118,169305,169306,169308,169310,169313],{"class":120,"line":1198},[118,169307,31292],{"class":177},[118,169309,129],{"class":128},[118,169311,169312],{"class":233},"\"文件存在\"",[118,169314,135],{"class":128},[15,169316,169317],{},"读写文本：",[109,169319,169321],{"className":30371,"code":169320,"language":30373,"meta":39,"style":39},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[115,169322,169323,169335,169339,169356,169373],{"__ignoreMap":39},[118,169324,169325,169327,169329,169331,169333],{"class":120,"line":121},[118,169326,168304],{"class":128},[118,169328,174],{"class":124},[118,169330,108538],{"class":128},[118,169332,146789],{"class":233},[118,169334,135],{"class":128},[118,169336,169337],{"class":120,"line":40},[118,169338,2404],{"emptyLinePlaceholder":45},[118,169340,169341,169344,169346,169348,169350,169352,169354],{"class":120,"line":1183},[118,169342,169343],{"class":128},"path.write_text(",[118,169345,145869],{"class":233},[118,169347,12440],{"class":128},[118,169349,146799],{"class":5221},[118,169351,174],{"class":124},[118,169353,146804],{"class":233},[118,169355,135],{"class":128},[118,169357,169358,169360,169362,169365,169367,169369,169371],{"class":120,"line":1198},[118,169359,168487],{"class":128},[118,169361,174],{"class":124},[118,169363,169364],{"class":128}," path.read_text(",[118,169366,146799],{"class":5221},[118,169368,174],{"class":124},[118,169370,146804],{"class":233},[118,169372,135],{"class":128},[118,169374,169375,169377],{"class":120,"line":1204},[118,169376,30408],{"class":177},[118,169378,168501],{"class":128},[60,169380,169382],{"id":169381},"_810-json文件","8.10 JSON文件",[15,169384,169385],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[109,169387,169389],{"className":30371,"code":169388,"language":30373,"meta":39,"style":39},"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",[115,169390,169391,169397,169401,169409,169419,169429,169437,169441,169445,169470],{"__ignoreMap":39},[118,169392,169393,169395],{"class":120,"line":121},[118,169394,30385],{"class":124},[118,169396,147084],{"class":128},[118,169398,169399],{"class":120,"line":40},[118,169400,2404],{"emptyLinePlaceholder":45},[118,169402,169403,169405,169407],{"class":120,"line":1183},[118,169404,149474],{"class":128},[118,169406,174],{"class":124},[118,169408,15577],{"class":128},[118,169410,169411,169413,169415,169417],{"class":120,"line":1198},[118,169412,147013],{"class":233},[118,169414,51430],{"class":128},[118,169416,149881],{"class":233},[118,169418,31459],{"class":128},[118,169420,169421,169423,169425,169427],{"class":120,"line":1204},[118,169422,164530],{"class":233},[118,169424,51430],{"class":128},[118,169426,778],{"class":177},[118,169428,31459],{"class":128},[118,169430,169431,169433,169435],{"class":120,"line":1218},[118,169432,164541],{"class":233},[118,169434,51430],{"class":128},[118,169436,164546],{"class":177},[118,169438,169439],{"class":120,"line":1224},[118,169440,1569],{"class":128},[118,169442,169443],{"class":120,"line":1315},[118,169444,2404],{"emptyLinePlaceholder":45},[118,169446,169447,169449,169451,169454,169456,169458,169460,169462,169464,169466,169468],{"class":120,"line":1321},[118,169448,156437],{"class":128},[118,169450,174],{"class":124},[118,169452,169453],{"class":128}," json.dumps(student, ",[118,169455,147130],{"class":5221},[118,169457,174],{"class":124},[118,169459,33980],{"class":177},[118,169461,12440],{"class":128},[118,169463,152005],{"class":5221},[118,169465,174],{"class":124},[118,169467,206],{"class":177},[118,169469,135],{"class":128},[118,169471,169472,169474],{"class":120,"line":1333},[118,169473,30408],{"class":177},[118,169475,164064],{"class":128},[15,169477,169478],{},"写入 JSON 文件：",[109,169480,169482],{"className":30371,"code":169481,"language":30373,"meta":39,"style":39},"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",[115,169483,169484,169490,169494,169502,169530,169558,169562,169566,169596],{"__ignoreMap":39},[118,169485,169486,169488],{"class":120,"line":121},[118,169487,30385],{"class":124},[118,169489,147084],{"class":128},[118,169491,169492],{"class":120,"line":40},[118,169493,2404],{"emptyLinePlaceholder":45},[118,169495,169496,169498,169500],{"class":120,"line":1183},[118,169497,159709],{"class":128},[118,169499,174],{"class":124},[118,169501,55440],{"class":128},[118,169503,169504,169506,169508,169510,169512,169514,169516,169518,169520,169522,169524,169526,169528],{"class":120,"line":1198},[118,169505,148378],{"class":128},[118,169507,62672],{"class":233},[118,169509,51430],{"class":128},[118,169511,149881],{"class":233},[118,169513,12440],{"class":128},[118,169515,69117],{"class":233},[118,169517,51430],{"class":128},[118,169519,778],{"class":177},[118,169521,12440],{"class":128},[118,169523,151465],{"class":233},[118,169525,51430],{"class":128},[118,169527,1117],{"class":177},[118,169529,4934],{"class":128},[118,169531,169532,169534,169536,169538,169540,169542,169544,169546,169548,169550,169552,169554,169556],{"class":120,"line":1204},[118,169533,148378],{"class":128},[118,169535,62672],{"class":233},[118,169537,51430],{"class":128},[118,169539,150929],{"class":233},[118,169541,12440],{"class":128},[118,169543,69117],{"class":233},[118,169545,51430],{"class":128},[118,169547,753],{"class":177},[118,169549,12440],{"class":128},[118,169551,151465],{"class":233},[118,169553,51430],{"class":128},[118,169555,939],{"class":177},[118,169557,4934],{"class":128},[118,169559,169560],{"class":120,"line":1218},[118,169561,33239],{"class":128},[118,169563,169564],{"class":120,"line":1224},[118,169565,2404],{"emptyLinePlaceholder":45},[118,169567,169568,169570,169572,169574,169576,169578,169580,169582,169584,169586,169588,169590,169592,169594],{"class":120,"line":1315},[118,169569,107826],{"class":124},[118,169571,146784],{"class":177},[118,169573,129],{"class":128},[118,169575,151824],{"class":233},[118,169577,12440],{"class":128},[118,169579,151969],{"class":233},[118,169581,12440],{"class":128},[118,169583,146799],{"class":5221},[118,169585,174],{"class":124},[118,169587,146804],{"class":233},[118,169589,13719],{"class":128},[118,169591,31376],{"class":124},[118,169593,148146],{"class":5221},[118,169595,3743],{"class":128},[118,169597,169598,169601,169603,169605,169607,169609,169611,169613,169615,169617,169619],{"class":120,"line":1321},[118,169599,169600],{"class":128},"    json.dump(students, ",[118,169602,45347],{"class":5221},[118,169604,12440],{"class":128},[118,169606,147130],{"class":5221},[118,169608,174],{"class":124},[118,169610,33980],{"class":177},[118,169612,12440],{"class":128},[118,169614,152005],{"class":5221},[118,169616,174],{"class":124},[118,169618,206],{"class":177},[118,169620,135],{"class":128},[15,169622,169623],{},"读取 JSON 文件：",[109,169625,169627],{"className":30371,"code":169626,"language":30373,"meta":39,"style":39},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[115,169628,169629,169635,169639,169669,169681,169685],{"__ignoreMap":39},[118,169630,169631,169633],{"class":120,"line":121},[118,169632,30385],{"class":124},[118,169634,147084],{"class":128},[118,169636,169637],{"class":120,"line":40},[118,169638,2404],{"emptyLinePlaceholder":45},[118,169640,169641,169643,169645,169647,169649,169651,169653,169655,169657,169659,169661,169663,169665,169667],{"class":120,"line":1183},[118,169642,107826],{"class":124},[118,169644,146784],{"class":177},[118,169646,129],{"class":128},[118,169648,151824],{"class":233},[118,169650,12440],{"class":128},[118,169652,146794],{"class":233},[118,169654,12440],{"class":128},[118,169656,146799],{"class":5221},[118,169658,174],{"class":124},[118,169660,146804],{"class":233},[118,169662,13719],{"class":128},[118,169664,31376],{"class":124},[118,169666,148146],{"class":5221},[118,169668,3743],{"class":128},[118,169670,169671,169673,169675,169677,169679],{"class":120,"line":1198},[118,169672,153030],{"class":128},[118,169674,174],{"class":124},[118,169676,148157],{"class":128},[118,169678,45347],{"class":5221},[118,169680,135],{"class":128},[118,169682,169683],{"class":120,"line":1204},[118,169684,2404],{"emptyLinePlaceholder":45},[118,169686,169687,169689],{"class":120,"line":1218},[118,169688,30408],{"class":177},[118,169690,164988],{"class":128},[60,169692,169694],{"id":169693},"_811-csv文件","8.11 CSV文件",[15,169696,169697],{},"CSV 是逗号分隔值，常用于表格数据。",[15,169699,169700],{},"写入 CSV：",[109,169702,169704],{"className":30371,"code":169703,"language":30373,"meta":39,"style":39},"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",[115,169705,169706,169713,169717,169725,169743,169759,169775,169779,169783,169823,169837],{"__ignoreMap":39},[118,169707,169708,169710],{"class":120,"line":121},[118,169709,30385],{"class":124},[118,169711,169712],{"class":128}," csv\n",[118,169714,169715],{"class":120,"line":40},[118,169716,2404],{"emptyLinePlaceholder":45},[118,169718,169719,169721,169723],{"class":120,"line":1183},[118,169720,159709],{"class":128},[118,169722,174],{"class":124},[118,169724,55440],{"class":128},[118,169726,169727,169730,169732,169734,169736,169738,169741],{"class":120,"line":1198},[118,169728,169729],{"class":128},"    [",[118,169731,73092],{"class":233},[118,169733,12440],{"class":128},[118,169735,73125],{"class":233},[118,169737,12440],{"class":128},[118,169739,169740],{"class":233},"\"成绩\"",[118,169742,87829],{"class":128},[118,169744,169745,169747,169749,169751,169753,169755,169757],{"class":120,"line":1204},[118,169746,169729],{"class":128},[118,169748,149881],{"class":233},[118,169750,12440],{"class":128},[118,169752,778],{"class":177},[118,169754,12440],{"class":128},[118,169756,1117],{"class":177},[118,169758,87829],{"class":128},[118,169760,169761,169763,169765,169767,169769,169771,169773],{"class":120,"line":1218},[118,169762,169729],{"class":128},[118,169764,150929],{"class":233},[118,169766,12440],{"class":128},[118,169768,753],{"class":177},[118,169770,12440],{"class":128},[118,169772,939],{"class":177},[118,169774,87829],{"class":128},[118,169776,169777],{"class":120,"line":1224},[118,169778,33239],{"class":128},[118,169780,169781],{"class":120,"line":1315},[118,169782,2404],{"emptyLinePlaceholder":45},[118,169784,169785,169787,169789,169791,169794,169796,169798,169800,169802,169804,169806,169808,169811,169813,169815,169817,169819,169821],{"class":120,"line":1321},[118,169786,107826],{"class":124},[118,169788,146784],{"class":177},[118,169790,129],{"class":128},[118,169792,169793],{"class":233},"\"students.csv\"",[118,169795,12440],{"class":128},[118,169797,151969],{"class":233},[118,169799,12440],{"class":128},[118,169801,146799],{"class":5221},[118,169803,174],{"class":124},[118,169805,146804],{"class":233},[118,169807,12440],{"class":128},[118,169809,169810],{"class":5221},"newline",[118,169812,174],{"class":124},[118,169814,7657],{"class":233},[118,169816,13719],{"class":128},[118,169818,31376],{"class":124},[118,169820,148146],{"class":5221},[118,169822,3743],{"class":128},[118,169824,169825,169828,169830,169833,169835],{"class":120,"line":1333},[118,169826,169827],{"class":128},"    writer ",[118,169829,174],{"class":124},[118,169831,169832],{"class":128}," csv.writer(",[118,169834,45347],{"class":5221},[118,169836,135],{"class":128},[118,169838,169839],{"class":120,"line":1616},[118,169840,169841],{"class":128},"    writer.writerows(students)\n",[15,169843,169844],{},"读取 CSV：",[109,169846,169848],{"className":30371,"code":169847,"language":30373,"meta":39,"style":39},"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",[115,169849,169850,169856,169860,169890,169904,169916],{"__ignoreMap":39},[118,169851,169852,169854],{"class":120,"line":121},[118,169853,30385],{"class":124},[118,169855,169712],{"class":128},[118,169857,169858],{"class":120,"line":40},[118,169859,2404],{"emptyLinePlaceholder":45},[118,169861,169862,169864,169866,169868,169870,169872,169874,169876,169878,169880,169882,169884,169886,169888],{"class":120,"line":1183},[118,169863,107826],{"class":124},[118,169865,146784],{"class":177},[118,169867,129],{"class":128},[118,169869,169793],{"class":233},[118,169871,12440],{"class":128},[118,169873,146794],{"class":233},[118,169875,12440],{"class":128},[118,169877,146799],{"class":5221},[118,169879,174],{"class":124},[118,169881,146804],{"class":233},[118,169883,13719],{"class":128},[118,169885,31376],{"class":124},[118,169887,148146],{"class":5221},[118,169889,3743],{"class":128},[118,169891,169892,169895,169897,169900,169902],{"class":120,"line":1198},[118,169893,169894],{"class":128},"    reader ",[118,169896,174],{"class":124},[118,169898,169899],{"class":128}," csv.reader(",[118,169901,45347],{"class":5221},[118,169903,135],{"class":128},[118,169905,169906,169908,169911,169913],{"class":120,"line":1204},[118,169907,3205],{"class":124},[118,169909,169910],{"class":128}," row ",[118,169912,26036],{"class":124},[118,169914,169915],{"class":128}," reader:\n",[118,169917,169918,169920],{"class":120,"line":1218},[118,169919,32444],{"class":177},[118,169921,169922],{"class":128},"(row)\n",[15,169924,169925],{},"使用字典写入：",[109,169927,169929],{"className":30371,"code":169928,"language":30373,"meta":39,"style":39},"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",[115,169930,169931,169937,169941,169949,169977,170005,170009,170013,170051,170072,170093,170098],{"__ignoreMap":39},[118,169932,169933,169935],{"class":120,"line":121},[118,169934,30385],{"class":124},[118,169936,169712],{"class":128},[118,169938,169939],{"class":120,"line":40},[118,169940,2404],{"emptyLinePlaceholder":45},[118,169942,169943,169945,169947],{"class":120,"line":1183},[118,169944,159709],{"class":128},[118,169946,174],{"class":124},[118,169948,55440],{"class":128},[118,169950,169951,169953,169955,169957,169959,169961,169963,169965,169967,169969,169971,169973,169975],{"class":120,"line":1198},[118,169952,148378],{"class":128},[118,169954,62672],{"class":233},[118,169956,51430],{"class":128},[118,169958,149881],{"class":233},[118,169960,12440],{"class":128},[118,169962,69117],{"class":233},[118,169964,51430],{"class":128},[118,169966,778],{"class":177},[118,169968,12440],{"class":128},[118,169970,151465],{"class":233},[118,169972,51430],{"class":128},[118,169974,1117],{"class":177},[118,169976,4934],{"class":128},[118,169978,169979,169981,169983,169985,169987,169989,169991,169993,169995,169997,169999,170001,170003],{"class":120,"line":1204},[118,169980,148378],{"class":128},[118,169982,62672],{"class":233},[118,169984,51430],{"class":128},[118,169986,150929],{"class":233},[118,169988,12440],{"class":128},[118,169990,69117],{"class":233},[118,169992,51430],{"class":128},[118,169994,753],{"class":177},[118,169996,12440],{"class":128},[118,169998,151465],{"class":233},[118,170000,51430],{"class":128},[118,170002,939],{"class":177},[118,170004,4934],{"class":128},[118,170006,170007],{"class":120,"line":1218},[118,170008,33239],{"class":128},[118,170010,170011],{"class":120,"line":1224},[118,170012,2404],{"emptyLinePlaceholder":45},[118,170014,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049],{"class":120,"line":1315},[118,170016,107826],{"class":124},[118,170018,146784],{"class":177},[118,170020,129],{"class":128},[118,170022,169793],{"class":233},[118,170024,12440],{"class":128},[118,170026,151969],{"class":233},[118,170028,12440],{"class":128},[118,170030,146799],{"class":5221},[118,170032,174],{"class":124},[118,170034,146804],{"class":233},[118,170036,12440],{"class":128},[118,170038,169810],{"class":5221},[118,170040,174],{"class":124},[118,170042,7657],{"class":233},[118,170044,13719],{"class":128},[118,170046,31376],{"class":124},[118,170048,148146],{"class":5221},[118,170050,3743],{"class":128},[118,170052,170053,170056,170058,170060,170062,170064,170066,170068,170070],{"class":120,"line":1321},[118,170054,170055],{"class":128},"    fieldnames ",[118,170057,174],{"class":124},[118,170059,52219],{"class":128},[118,170061,62672],{"class":233},[118,170063,12440],{"class":128},[118,170065,69117],{"class":233},[118,170067,12440],{"class":128},[118,170069,151465],{"class":233},[118,170071,33239],{"class":128},[118,170073,170074,170076,170078,170081,170083,170085,170088,170090],{"class":120,"line":1333},[118,170075,169827],{"class":128},[118,170077,174],{"class":124},[118,170079,170080],{"class":128}," csv.DictWriter(",[118,170082,45347],{"class":5221},[118,170084,12440],{"class":128},[118,170086,170087],{"class":5221},"fieldnames",[118,170089,174],{"class":124},[118,170091,170092],{"class":128},"fieldnames)\n",[118,170094,170095],{"class":120,"line":1616},[118,170096,170097],{"class":128},"    writer.writeheader()\n",[118,170099,170100],{"class":120,"line":1621},[118,170101,169841],{"class":128},[60,170103,170105],{"id":170104},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[15,170107,123285],{},[72,170109,170110,170113,170116],{},[75,170111,170112],{},"读取文本文件。",[75,170114,170115],{},"统计每个单词出现次数。",[75,170117,170118],{},"输出出现次数最多的前 10 个单词。",[15,170120,10040],{},[109,170122,170124],{"className":30371,"code":170123,"language":30373,"meta":39,"style":39},"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",[115,170125,170126,170136,170140,170153,170169,170173,170183,170192,170196,170208,170228,170237,170241,170259,170263,170293,170297,170313],{"__ignoreMap":39},[118,170127,170128,170130,170132,170134],{"class":120,"line":121},[118,170129,30730],{"class":124},[118,170131,108304],{"class":128},[118,170133,30385],{"class":124},[118,170135,108309],{"class":128},[118,170137,170138],{"class":120,"line":40},[118,170139,2404],{"emptyLinePlaceholder":45},[118,170141,170142,170144,170146,170148,170151],{"class":120,"line":1183},[118,170143,168304],{"class":128},[118,170145,174],{"class":124},[118,170147,108538],{"class":128},[118,170149,170150],{"class":233},"\"article.txt\"",[118,170152,135],{"class":128},[118,170154,170155,170157,170159,170161,170163,170165,170167],{"class":120,"line":1198},[118,170156,168487],{"class":128},[118,170158,174],{"class":124},[118,170160,169364],{"class":128},[118,170162,146799],{"class":5221},[118,170164,174],{"class":124},[118,170166,146804],{"class":233},[118,170168,135],{"class":128},[118,170170,170171],{"class":120,"line":1204},[118,170172,2404],{"emptyLinePlaceholder":45},[118,170174,170175,170178,170180],{"class":120,"line":1218},[118,170176,170177],{"class":128},"words ",[118,170179,174],{"class":124},[118,170181,170182],{"class":128}," content.lower().split()\n",[118,170184,170185,170188,170190],{"class":120,"line":1224},[118,170186,170187],{"class":128},"counter ",[118,170189,174],{"class":124},[118,170191,87861],{"class":128},[118,170193,170194],{"class":120,"line":1315},[118,170195,2404],{"emptyLinePlaceholder":45},[118,170197,170198,170200,170203,170205],{"class":120,"line":1321},[118,170199,3029],{"class":124},[118,170201,170202],{"class":128}," word ",[118,170204,26036],{"class":124},[118,170206,170207],{"class":128}," words:\n",[118,170209,170210,170213,170215,170218,170221,170223,170226],{"class":120,"line":1333},[118,170211,170212],{"class":128},"    word ",[118,170214,174],{"class":124},[118,170216,170217],{"class":128}," word.strip(",[118,170219,170220],{"class":233},"\".,!?;:",[118,170222,156488],{"class":177},[118,170224,170225],{"class":233},"'()[]\"",[118,170227,135],{"class":128},[118,170229,170230,170232,170234],{"class":120,"line":1616},[118,170231,3105],{"class":124},[118,170233,38923],{"class":124},[118,170235,170236],{"class":128}," word:\n",[118,170238,170239],{"class":120,"line":1621},[118,170240,148505],{"class":124},[118,170242,170243,170246,170248,170251,170253,170255,170257],{"class":120,"line":1627},[118,170244,170245],{"class":128},"    counter[word] ",[118,170247,174],{"class":124},[118,170249,170250],{"class":128}," counter.get(word, ",[118,170252,320],{"class":177},[118,170254,13719],{"class":128},[118,170256,609],{"class":124},[118,170258,55692],{"class":177},[118,170260,170261],{"class":120,"line":1632},[118,170262,2404],{"emptyLinePlaceholder":45},[118,170264,170265,170268,170270,170272,170275,170277,170279,170281,170283,170285,170287,170289,170291],{"class":120,"line":1646},[118,170266,170267],{"class":128},"items ",[118,170269,174],{"class":124},[118,170271,163597],{"class":177},[118,170273,170274],{"class":128},"(counter.items(), ",[118,170276,153939],{"class":5221},[118,170278,153942],{"class":124},[118,170280,153945],{"class":128},[118,170282,346],{"class":177},[118,170284,112195],{"class":128},[118,170286,163521],{"class":5221},[118,170288,174],{"class":124},[118,170290,31469],{"class":177},[118,170292,135],{"class":128},[118,170294,170295],{"class":120,"line":1651},[118,170296,2404],{"emptyLinePlaceholder":45},[118,170298,170299,170301,170304,170306,170309,170311],{"class":120,"line":1657},[118,170300,3029],{"class":124},[118,170302,170303],{"class":128}," word, count ",[118,170305,26036],{"class":124},[118,170307,170308],{"class":128}," items[:",[118,170310,574],{"class":177},[118,170312,165748],{"class":128},[118,170314,170315,170317],{"class":120,"line":1678},[118,170316,31292],{"class":177},[118,170318,170319],{"class":128},"(word, count)\n",[60,170321,170323],{"id":170322},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[109,170325,170327],{"className":30371,"code":170326,"language":30373,"meta":39,"style":39},"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",[115,170328,170329,170335,170345,170349,170361,170365,170369,170377,170387,170393,170397,170427,170437,170441,170445,170453,170483,170507,170511,170515,170523,170552,170557],{"__ignoreMap":39},[118,170330,170331,170333],{"class":120,"line":121},[118,170332,30385],{"class":124},[118,170334,147084],{"class":128},[118,170336,170337,170339,170341,170343],{"class":120,"line":40},[118,170338,30730],{"class":124},[118,170340,108304],{"class":128},[118,170342,30385],{"class":124},[118,170344,108309],{"class":128},[118,170346,170347],{"class":120,"line":1183},[118,170348,2404],{"emptyLinePlaceholder":45},[118,170350,170351,170353,170355,170357,170359],{"class":120,"line":1198},[118,170352,151817],{"class":177},[118,170354,13569],{"class":124},[118,170356,108538],{"class":128},[118,170358,151824],{"class":233},[118,170360,135],{"class":128},[118,170362,170363],{"class":120,"line":1204},[118,170364,2404],{"emptyLinePlaceholder":45},[118,170366,170367],{"class":120,"line":1218},[118,170368,2404],{"emptyLinePlaceholder":45},[118,170370,170371,170373,170375],{"class":120,"line":1224},[118,170372,31940],{"class":124},[118,170374,151841],{"class":1967},[118,170376,31946],{"class":128},[118,170378,170379,170381,170383,170385],{"class":120,"line":1315},[118,170380,3105],{"class":124},[118,170382,38923],{"class":124},[118,170384,151852],{"class":177},[118,170386,151855],{"class":128},[118,170388,170389,170391],{"class":120,"line":1321},[118,170390,14757],{"class":124},[118,170392,51831],{"class":128},[118,170394,170395],{"class":120,"line":1333},[118,170396,2404],{"emptyLinePlaceholder":45},[118,170398,170399,170401,170403,170405,170407,170409,170411,170413,170415,170417,170419,170421,170423,170425],{"class":120,"line":1616},[118,170400,34171],{"class":124},[118,170402,146784],{"class":177},[118,170404,129],{"class":128},[118,170406,151817],{"class":177},[118,170408,12440],{"class":128},[118,170410,146794],{"class":233},[118,170412,12440],{"class":128},[118,170414,146799],{"class":5221},[118,170416,174],{"class":124},[118,170418,146804],{"class":233},[118,170420,13719],{"class":128},[118,170422,31376],{"class":124},[118,170424,148146],{"class":5221},[118,170426,3743],{"class":128},[118,170428,170429,170431,170433,170435],{"class":120,"line":1621},[118,170430,14757],{"class":124},[118,170432,148157],{"class":128},[118,170434,45347],{"class":5221},[118,170436,135],{"class":128},[118,170438,170439],{"class":120,"line":1627},[118,170440,2404],{"emptyLinePlaceholder":45},[118,170442,170443],{"class":120,"line":1632},[118,170444,2404],{"emptyLinePlaceholder":45},[118,170446,170447,170449,170451],{"class":120,"line":1646},[118,170448,31940],{"class":124},[118,170450,151951],{"class":1967},[118,170452,151954],{"class":128},[118,170454,170455,170457,170459,170461,170463,170465,170467,170469,170471,170473,170475,170477,170479,170481],{"class":120,"line":1651},[118,170456,34171],{"class":124},[118,170458,146784],{"class":177},[118,170460,129],{"class":128},[118,170462,151817],{"class":177},[118,170464,12440],{"class":128},[118,170466,151969],{"class":233},[118,170468,12440],{"class":128},[118,170470,146799],{"class":5221},[118,170472,174],{"class":124},[118,170474,146804],{"class":233},[118,170476,13719],{"class":128},[118,170478,31376],{"class":124},[118,170480,148146],{"class":5221},[118,170482,3743],{"class":128},[118,170484,170485,170487,170489,170491,170493,170495,170497,170499,170501,170503,170505],{"class":120,"line":1657},[118,170486,151990],{"class":128},[118,170488,45347],{"class":5221},[118,170490,12440],{"class":128},[118,170492,147130],{"class":5221},[118,170494,174],{"class":124},[118,170496,33980],{"class":177},[118,170498,12440],{"class":128},[118,170500,152005],{"class":5221},[118,170502,174],{"class":124},[118,170504,206],{"class":177},[118,170506,135],{"class":128},[118,170508,170509],{"class":120,"line":1678},[118,170510,2404],{"emptyLinePlaceholder":45},[118,170512,170513],{"class":120,"line":1683},[118,170514,2404],{"emptyLinePlaceholder":45},[118,170516,170517,170519,170521],{"class":120,"line":1697},[118,170518,159709],{"class":128},[118,170520,174],{"class":124},[118,170522,153035],{"class":128},[118,170524,170525,170528,170530,170532,170534,170536,170538,170540,170542,170544,170546,170548,170550],{"class":120,"line":1702},[118,170526,170527],{"class":128},"students.append({",[118,170529,62672],{"class":233},[118,170531,51430],{"class":128},[118,170533,149881],{"class":233},[118,170535,12440],{"class":128},[118,170537,69117],{"class":233},[118,170539,51430],{"class":128},[118,170541,778],{"class":177},[118,170543,12440],{"class":128},[118,170545,151465],{"class":233},[118,170547,51430],{"class":128},[118,170549,1117],{"class":177},[118,170551,165145],{"class":128},[118,170553,170554],{"class":120,"line":1731},[118,170555,170556],{"class":128},"save_students(students)\n",[118,170558,170559,170561,170563,170566],{"class":120,"line":1736},[118,170560,30408],{"class":177},[118,170562,129],{"class":128},[118,170564,170565],{"class":233},"\"保存成功\"",[118,170567,135],{"class":128},[60,170569,170571],{"id":170570},"_814-易错点","8.14 易错点",[72,170573,170574,170578,170584,170589,170596,170603],{},[75,170575,170576,168837],{},[115,170577,923],{},[75,170579,170580,170581,28378],{},"读写中文要指定 ",[115,170582,170583],{},"encoding=\"utf-8\"",[75,170585,170586,170587,28378],{},"打开文件后要关闭，推荐使用 ",[115,170588,107826],{},[75,170590,170591,170592,170595],{},"读取大文件不要直接 ",[115,170593,170594],{},"read()"," 全部内容。",[75,170597,170598,170599,170602],{},"Windows 写 CSV 时建议加 ",[115,170600,170601],{},"newline=\"\"","，避免空行。",[75,170604,170605],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[60,170607,170609],{"id":170608},"_815-本章练习","8.15 本章练习",[72,170611,170612,170619,170624,170627,170630],{},[75,170613,170614,170615,170618],{},"写入一个 ",[115,170616,170617],{},"students.txt","，每行保存一个学生姓名。",[75,170620,104348,170621,170623],{},[115,170622,170617],{}," 并输出所有学生。",[75,170625,170626],{},"把学生列表保存为 JSON 文件。",[75,170628,170629],{},"从 JSON 文件读取学生数据，计算平均分。",[75,170631,170632,170633,170636,170637,170640],{},"写一个日志函数 ",[115,170634,170635],{},"write_log(message)","，每次调用向 ",[115,170638,170639],{},"app.log"," 追加一行。",[5131,170642,170643],{},"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":39,"searchDepth":40,"depth":40,"links":170645},[170646,170647,170651,170652,170658,170659,170660,170661,170662,170663,170664,170665,170666,170667,170668],{"id":168157,"depth":40,"text":168158},{"id":168198,"depth":40,"text":168199,"children":170648},[170649,170650],{"id":168202,"depth":1183,"text":168203},{"id":168236,"depth":1183,"text":168237},{"id":168350,"depth":40,"text":168351},{"id":168443,"depth":40,"text":168444,"children":170653},[170654,170655,170656,170657],{"id":168447,"depth":1183,"text":168448},{"id":168534,"depth":1183,"text":168535},{"id":168604,"depth":1183,"text":168605},{"id":168698,"depth":1183,"text":168699},{"id":168768,"depth":40,"text":168769},{"id":168831,"depth":40,"text":168832},{"id":168992,"depth":40,"text":168993},{"id":169055,"depth":40,"text":169056},{"id":169171,"depth":40,"text":169172},{"id":169381,"depth":40,"text":169382},{"id":169693,"depth":40,"text":169694},{"id":170104,"depth":40,"text":170105},{"id":170322,"depth":40,"text":170323},{"id":170570,"depth":40,"text":170571},{"id":170608,"depth":40,"text":170609},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168149,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170675,"title":170676,"body":170677,"description":42,"extension":43,"meta":172863,"navigation":45,"path":172864,"seo":172865,"stem":172866,"__hash__":172867},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170678,"toc":172830},[170679,170682,170686,170689,170692,170784,170786,170805,170810,170814,170817,170820,170849,170856,170859,170863,170866,170895,170897,170949,170955,171008,171012,171110,171113,171180,171184,171241,171243,171249,171253,171258,171264,171355,171360,171364,171367,171445,171448,171486,171490,171608,171611,171615,171618,171663,171666,171670,171675,171681,171731,171734,171765,171769,171773,171803,171807,171842,171846,171881,171921,171925,171941,171944,171948,171952,172031,172035,172076,172080,172135,172139,172173,172177,172207,172216,172223,172229,172286,172289,172297,172300,172304,172311,172314,172320,172323,172340,172345,172349,172355,172368,172371,172408,172411,172422,172425,172439,172442,172456,172460,172467,172500,172503,172505,172511,172514,172518,172520,172526,172531,172704,172708,172771,172775,172799,172803,172827],[10,170680,170676],{"id":170681},"_9-异常模块与包",[60,170683,170685],{"id":170684},"_91-什么是异常","9.1 什么是异常",[15,170687,170688],{},"异常是程序运行过程中出现的错误。",[15,170690,170691],{},"常见异常：",[266,170693,170694,170703],{},[269,170695,170696],{},[272,170697,170698,170701],{},[275,170699,170700],{},"异常",[275,170702,25862],{},[313,170704,170705,170715,170725,170734,170744,170754,170764,170774],{},[272,170706,170707,170712],{},[318,170708,170709],{},[115,170710,170711],{},"NameError",[318,170713,170714],{},"使用了未定义变量",[272,170716,170717,170722],{},[318,170718,170719],{},[115,170720,170721],{},"TypeError",[318,170723,170724],{},"类型不匹配",[272,170726,170727,170731],{},[318,170728,170729],{},[115,170730,154827],{},[318,170732,170733],{},"值不合法",[272,170735,170736,170741],{},[318,170737,170738],{},[115,170739,170740],{},"IndexError",[318,170742,170743],{},"列表索引越界",[272,170745,170746,170751],{},[318,170747,170748],{},[115,170749,170750],{},"KeyError",[318,170752,170753],{},"字典 key 不存在",[272,170755,170756,170761],{},[318,170757,170758],{},[115,170759,170760],{},"FileNotFoundError",[318,170762,170763],{},"文件不存在",[272,170765,170766,170771],{},[318,170767,170768],{},[115,170769,170770],{},"ZeroDivisionError",[318,170772,170773],{},"除数为 0",[272,170775,170776,170781],{},[318,170777,170778],{},[115,170779,170780],{},"ImportError",[318,170782,170783],{},"导入失败",[15,170785,15140],{},[109,170787,170789],{"className":30371,"code":170788,"language":30373,"meta":39,"style":39},"num = int(\"abc\")\n",[115,170790,170791],{"__ignoreMap":39},[118,170792,170793,170795,170797,170799,170801,170803],{"class":120,"line":121},[118,170794,155780],{"class":128},[118,170796,174],{"class":124},[118,170798,2386],{"class":177},[118,170800,129],{"class":128},[118,170802,155873],{"class":233},[118,170804,135],{"class":128},[15,170806,170807,170808,28378],{},"会触发 ",[115,170809,154827],{},[60,170811,170813],{"id":170812},"_92-为什么要处理异常","9.2 为什么要处理异常",[15,170815,170816],{},"如果不处理异常，程序会直接终止。",[15,170818,170819],{},"例如用户输入年龄：",[109,170821,170823],{"className":30371,"code":170822,"language":30373,"meta":39,"style":39},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[115,170824,170825,170843],{"__ignoreMap":39},[118,170826,170827,170829,170831,170833,170835,170837,170839,170841],{"class":120,"line":121},[118,170828,146539],{"class":128},[118,170830,174],{"class":124},[118,170832,2386],{"class":177},[118,170834,129],{"class":128},[118,170836,53814],{"class":177},[118,170838,129],{"class":128},[118,170840,152387],{"class":233},[118,170842,30490],{"class":128},[118,170844,170845,170847],{"class":120,"line":40},[118,170846,30408],{"class":177},[118,170848,155754],{"class":128},[15,170850,170851,170852,170855],{},"用户输入 ",[115,170853,170854],{},"abc","，程序就会报错退出。",[15,170857,170858],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[60,170860,170862],{"id":170861},"_93-try-except","9.3 try except",[15,170864,170865],{},"基础语法：",[109,170867,170869],{"className":30371,"code":170868,"language":30373,"meta":39,"style":39},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[115,170870,170871,170878,170883,170890],{"__ignoreMap":39},[118,170872,170873,170876],{"class":120,"line":121},[118,170874,170875],{"class":124},"try",[118,170877,3743],{"class":128},[118,170879,170880],{"class":120,"line":40},[118,170881,170882],{"class":128},"    可能出错的代码\n",[118,170884,170885,170888],{"class":120,"line":1183},[118,170886,170887],{"class":124},"except",[118,170889,3743],{"class":128},[118,170891,170892],{"class":120,"line":1198},[118,170893,170894],{"class":128},"    出错后的处理代码\n",[15,170896,15140],{},[109,170898,170900],{"className":30371,"code":170899,"language":30373,"meta":39,"style":39},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[115,170901,170902,170908,170926,170932,170938],{"__ignoreMap":39},[118,170903,170904,170906],{"class":120,"line":121},[118,170905,170875],{"class":124},[118,170907,3743],{"class":128},[118,170909,170910,170912,170914,170916,170918,170920,170922,170924],{"class":120,"line":40},[118,170911,152379],{"class":128},[118,170913,174],{"class":124},[118,170915,2386],{"class":177},[118,170917,129],{"class":128},[118,170919,53814],{"class":177},[118,170921,129],{"class":128},[118,170923,152387],{"class":233},[118,170925,30490],{"class":128},[118,170927,170928,170930],{"class":120,"line":1183},[118,170929,31292],{"class":177},[118,170931,155754],{"class":128},[118,170933,170934,170936],{"class":120,"line":1198},[118,170935,170887],{"class":124},[118,170937,3743],{"class":128},[118,170939,170940,170942,170944,170947],{"class":120,"line":1204},[118,170941,31292],{"class":177},[118,170943,129],{"class":128},[118,170945,170946],{"class":233},"\"年龄必须是数字\"",[118,170948,135],{"class":128},[15,170950,170951,170952,170954],{},"不建议裸写 ",[115,170953,170887],{},"，最好指定异常类型。",[109,170956,170958],{"className":30371,"code":170957,"language":30373,"meta":39,"style":39},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[115,170959,170960,170966,170984,170990,170998],{"__ignoreMap":39},[118,170961,170962,170964],{"class":120,"line":121},[118,170963,170875],{"class":124},[118,170965,3743],{"class":128},[118,170967,170968,170970,170972,170974,170976,170978,170980,170982],{"class":120,"line":40},[118,170969,152379],{"class":128},[118,170971,174],{"class":124},[118,170973,2386],{"class":177},[118,170975,129],{"class":128},[118,170977,53814],{"class":177},[118,170979,129],{"class":128},[118,170981,152387],{"class":233},[118,170983,30490],{"class":128},[118,170985,170986,170988],{"class":120,"line":1183},[118,170987,31292],{"class":177},[118,170989,155754],{"class":128},[118,170991,170992,170994,170996],{"class":120,"line":1198},[118,170993,170887],{"class":124},[118,170995,152219],{"class":177},[118,170997,3743],{"class":128},[118,170999,171000,171002,171004,171006],{"class":120,"line":1204},[118,171001,31292],{"class":177},[118,171003,129],{"class":128},[118,171005,170946],{"class":233},[118,171007,135],{"class":128},[60,171009,171011],{"id":171010},"_94-捕获多个异常","9.4 捕获多个异常",[109,171013,171015],{"className":30371,"code":171014,"language":30373,"meta":39,"style":39},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[115,171016,171017,171023,171044,171064,171071,171079,171090,171099],{"__ignoreMap":39},[118,171018,171019,171021],{"class":120,"line":121},[118,171020,170875],{"class":124},[118,171022,3743],{"class":128},[118,171024,171025,171028,171030,171032,171034,171036,171038,171040,171042],{"class":120,"line":40},[118,171026,171027],{"class":128},"    nums ",[118,171029,174],{"class":124},[118,171031,52219],{"class":128},[118,171033,346],{"class":177},[118,171035,12440],{"class":128},[118,171037,206],{"class":177},[118,171039,12440],{"class":128},[118,171041,200],{"class":177},[118,171043,33239],{"class":128},[118,171045,171046,171049,171051,171053,171055,171057,171059,171062],{"class":120,"line":1183},[118,171047,171048],{"class":128},"    index ",[118,171050,174],{"class":124},[118,171052,2386],{"class":177},[118,171054,129],{"class":128},[118,171056,53814],{"class":177},[118,171058,129],{"class":128},[118,171060,171061],{"class":233},"\"请输入索引:\"",[118,171063,30490],{"class":128},[118,171065,171066,171068],{"class":120,"line":1198},[118,171067,31292],{"class":177},[118,171069,171070],{"class":128},"(nums[index])\n",[118,171072,171073,171075,171077],{"class":120,"line":1204},[118,171074,170887],{"class":124},[118,171076,152219],{"class":177},[118,171078,3743],{"class":128},[118,171080,171081,171083,171085,171088],{"class":120,"line":1218},[118,171082,31292],{"class":177},[118,171084,129],{"class":128},[118,171086,171087],{"class":233},"\"索引必须是整数\"",[118,171089,135],{"class":128},[118,171091,171092,171094,171097],{"class":120,"line":1224},[118,171093,170887],{"class":124},[118,171095,171096],{"class":177}," IndexError",[118,171098,3743],{"class":128},[118,171100,171101,171103,171105,171108],{"class":120,"line":1315},[118,171102,31292],{"class":177},[118,171104,129],{"class":128},[118,171106,171107],{"class":233},"\"索引越界\"",[118,171109,135],{"class":128},[15,171111,171112],{},"多个异常使用相同处理逻辑：",[109,171114,171116],{"className":30371,"code":171115,"language":30373,"meta":39,"style":39},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[115,171117,171118,171124,171142,171155,171169],{"__ignoreMap":39},[118,171119,171120,171122],{"class":120,"line":121},[118,171121,170875],{"class":124},[118,171123,3743],{"class":128},[118,171125,171126,171128,171130,171132,171134,171136,171138,171140],{"class":120,"line":40},[118,171127,45586],{"class":128},[118,171129,174],{"class":124},[118,171131,2386],{"class":177},[118,171133,129],{"class":128},[118,171135,53814],{"class":177},[118,171137,129],{"class":128},[118,171139,155789],{"class":233},[118,171141,30490],{"class":128},[118,171143,171144,171146,171148,171150,171152],{"class":120,"line":1183},[118,171145,31292],{"class":177},[118,171147,129],{"class":128},[118,171149,574],{"class":177},[118,171151,156039],{"class":124},[118,171153,171154],{"class":128}," num)\n",[118,171156,171157,171159,171161,171163,171165,171167],{"class":120,"line":1198},[118,171158,170887],{"class":124},[118,171160,1662],{"class":128},[118,171162,154827],{"class":177},[118,171164,12440],{"class":128},[118,171166,170770],{"class":177},[118,171168,30779],{"class":128},[118,171170,171171,171173,171175,171178],{"class":120,"line":1204},[118,171172,31292],{"class":177},[118,171174,129],{"class":128},[118,171176,171177],{"class":233},"\"输入不合法\"",[118,171179,135],{"class":128},[60,171181,171183],{"id":171182},"_95-获取异常信息","9.5 获取异常信息",[109,171185,171187],{"className":30371,"code":171186,"language":30373,"meta":39,"style":39},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[115,171188,171189,171195,171209,171220],{"__ignoreMap":39},[118,171190,171191,171193],{"class":120,"line":121},[118,171192,170875],{"class":124},[118,171194,3743],{"class":128},[118,171196,171197,171199,171201,171203,171205,171207],{"class":120,"line":40},[118,171198,45586],{"class":128},[118,171200,174],{"class":124},[118,171202,2386],{"class":177},[118,171204,129],{"class":128},[118,171206,155873],{"class":233},[118,171208,135],{"class":128},[118,171210,171211,171213,171215,171217],{"class":120,"line":1183},[118,171212,170887],{"class":124},[118,171214,152219],{"class":177},[118,171216,64597],{"class":124},[118,171218,171219],{"class":128}," e:\n",[118,171221,171222,171224,171226,171228,171231,171233,171235,171237,171239],{"class":120,"line":1198},[118,171223,31292],{"class":177},[118,171225,129],{"class":128},[118,171227,181],{"class":124},[118,171229,171230],{"class":233},"\"出错了:",[118,171232,1024],{"class":177},[118,171234,203],{"class":128},[118,171236,1074],{"class":177},[118,171238,379],{"class":233},[118,171240,135],{"class":128},[15,171242,146450],{},[109,171244,171247],{"className":171245,"code":171246,"language":5192,"meta":39},[5190],"出错了:invalid literal for int() with base 10: 'abc'\n",[115,171248,171246],{"__ignoreMap":39},[60,171250,171252],{"id":171251},"_96-else和finally","9.6 else和finally",[15,171254,171255,171257],{},[115,171256,1705],{},"：没有异常时执行。",[15,171259,171260,171263],{},[115,171261,171262],{},"finally","：无论是否异常都会执行。",[109,171265,171267],{"className":30371,"code":171266,"language":30373,"meta":39,"style":39},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[115,171268,171269,171275,171293,171301,171311,171317,171338,171344],{"__ignoreMap":39},[118,171270,171271,171273],{"class":120,"line":121},[118,171272,170875],{"class":124},[118,171274,3743],{"class":128},[118,171276,171277,171279,171281,171283,171285,171287,171289,171291],{"class":120,"line":40},[118,171278,45586],{"class":128},[118,171280,174],{"class":124},[118,171282,2386],{"class":177},[118,171284,129],{"class":128},[118,171286,53814],{"class":177},[118,171288,129],{"class":128},[118,171290,155789],{"class":233},[118,171292,30490],{"class":128},[118,171294,171295,171297,171299],{"class":120,"line":1183},[118,171296,170887],{"class":124},[118,171298,152219],{"class":177},[118,171300,3743],{"class":128},[118,171302,171303,171305,171307,171309],{"class":120,"line":1198},[118,171304,31292],{"class":177},[118,171306,129],{"class":128},[118,171308,153207],{"class":233},[118,171310,135],{"class":128},[118,171312,171313,171315],{"class":120,"line":1204},[118,171314,1705],{"class":124},[118,171316,3743],{"class":128},[118,171318,171319,171321,171323,171325,171328,171330,171332,171334,171336],{"class":120,"line":1218},[118,171320,31292],{"class":177},[118,171322,129],{"class":128},[118,171324,181],{"class":124},[118,171326,171327],{"class":233},"\"输入正确:",[118,171329,1024],{"class":177},[118,171331,1669],{"class":128},[118,171333,1074],{"class":177},[118,171335,379],{"class":233},[118,171337,135],{"class":128},[118,171339,171340,171342],{"class":120,"line":1224},[118,171341,171262],{"class":124},[118,171343,3743],{"class":128},[118,171345,171346,171348,171350,171353],{"class":120,"line":1315},[118,171347,31292],{"class":177},[118,171349,129],{"class":128},[118,171351,171352],{"class":233},"\"程序结束\"",[118,171354,135],{"class":128},[15,171356,171357,171359],{},[115,171358,171262],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[60,171361,171363],{"id":171362},"_97-抛出异常","9.7 抛出异常",[15,171365,171366],{},"程序可以主动抛出异常。",[109,171368,171370],{"className":30371,"code":171369,"language":30373,"meta":39,"style":39},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[115,171371,171372,171381,171393,171406,171426,171430,171434],{"__ignoreMap":39},[118,171373,171374,171376,171379],{"class":120,"line":121},[118,171375,31940],{"class":124},[118,171377,171378],{"class":1967}," set_age",[118,171380,161408],{"class":128},[118,171382,171383,171385,171387,171389,171391],{"class":120,"line":40},[118,171384,3105],{"class":124},[118,171386,15712],{"class":128},[118,171388,1038],{"class":124},[118,171390,4097],{"class":177},[118,171392,3743],{"class":128},[118,171394,171395,171397,171399,171401,171404],{"class":120,"line":1183},[118,171396,103425],{"class":124},[118,171398,152219],{"class":177},[118,171400,129],{"class":128},[118,171402,171403],{"class":233},"\"年龄不能为负数\"",[118,171405,135],{"class":128},[118,171407,171408,171410,171412,171414,171416,171418,171420,171422,171424],{"class":120,"line":1198},[118,171409,31292],{"class":177},[118,171411,129],{"class":128},[118,171413,181],{"class":124},[118,171415,161976],{"class":233},[118,171417,1024],{"class":177},[118,171419,70214],{"class":128},[118,171421,1074],{"class":177},[118,171423,379],{"class":233},[118,171425,135],{"class":128},[118,171427,171428],{"class":120,"line":1204},[118,171429,2404],{"emptyLinePlaceholder":45},[118,171431,171432],{"class":120,"line":1218},[118,171433,2404],{"emptyLinePlaceholder":45},[118,171435,171436,171439,171441,171443],{"class":120,"line":1224},[118,171437,171438],{"class":128},"set_age(",[118,171440,660],{"class":124},[118,171442,346],{"class":177},[118,171444,135],{"class":128},[15,171446,171447],{},"调用者可以捕获：",[109,171449,171451],{"className":30371,"code":171450,"language":30373,"meta":39,"style":39},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[115,171452,171453,171459,171470,171480],{"__ignoreMap":39},[118,171454,171455,171457],{"class":120,"line":121},[118,171456,170875],{"class":124},[118,171458,3743],{"class":128},[118,171460,171461,171464,171466,171468],{"class":120,"line":40},[118,171462,171463],{"class":128},"    set_age(",[118,171465,660],{"class":124},[118,171467,346],{"class":177},[118,171469,135],{"class":128},[118,171471,171472,171474,171476,171478],{"class":120,"line":1183},[118,171473,170887],{"class":124},[118,171475,152219],{"class":177},[118,171477,64597],{"class":124},[118,171479,171219],{"class":128},[118,171481,171482,171484],{"class":120,"line":1198},[118,171483,31292],{"class":177},[118,171485,66992],{"class":128},[60,171487,171489],{"id":171488},"_98-自定义异常","9.8 自定义异常",[109,171491,171493],{"className":30371,"code":171492,"language":30373,"meta":39,"style":39},"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",[115,171494,171495,171509,171513,171517,171521,171529,171539,171550,171560,171564,171568,171574,171591,171602],{"__ignoreMap":39},[118,171496,171497,171499,171502,171504,171507],{"class":120,"line":121},[118,171498,14699],{"class":124},[118,171500,171501],{"class":1967}," BalanceNotEnoughError",[118,171503,129],{"class":128},[118,171505,171506],{"class":177},"Exception",[118,171508,30779],{"class":128},[118,171510,171511],{"class":120,"line":40},[118,171512,149530],{"class":124},[118,171514,171515],{"class":120,"line":1183},[118,171516,2404],{"emptyLinePlaceholder":45},[118,171518,171519],{"class":120,"line":1198},[118,171520,2404],{"emptyLinePlaceholder":45},[118,171522,171523,171525,171527],{"class":120,"line":1204},[118,171524,31940],{"class":124},[118,171526,150179],{"class":1967},[118,171528,162805],{"class":128},[118,171530,171531,171533,171535,171537],{"class":120,"line":1218},[118,171532,3105],{"class":124},[118,171534,150135],{"class":128},[118,171536,1088],{"class":124},[118,171538,162582],{"class":128},[118,171540,171541,171543,171546,171548],{"class":120,"line":1224},[118,171542,103425],{"class":124},[118,171544,171545],{"class":128}," BalanceNotEnoughError(",[118,171547,150230],{"class":233},[118,171549,135],{"class":128},[118,171551,171552,171554,171556,171558],{"class":120,"line":1315},[118,171553,4094],{"class":124},[118,171555,162812],{"class":128},[118,171557,660],{"class":124},[118,171559,150168],{"class":128},[118,171561,171562],{"class":120,"line":1321},[118,171563,2404],{"emptyLinePlaceholder":45},[118,171565,171566],{"class":120,"line":1333},[118,171567,2404],{"emptyLinePlaceholder":45},[118,171569,171570,171572],{"class":120,"line":1616},[118,171571,170875],{"class":124},[118,171573,3743],{"class":128},[118,171575,171576,171578,171580,171583,171585,171587,171589],{"class":120,"line":1621},[118,171577,162483],{"class":128},[118,171579,174],{"class":124},[118,171581,171582],{"class":128}," withdraw(",[118,171584,439],{"class":177},[118,171586,12440],{"class":128},[118,171588,1726],{"class":177},[118,171590,135],{"class":128},[118,171592,171593,171595,171598,171600],{"class":120,"line":1627},[118,171594,170887],{"class":124},[118,171596,171597],{"class":128}," BalanceNotEnoughError ",[118,171599,31376],{"class":124},[118,171601,171219],{"class":128},[118,171603,171604,171606],{"class":120,"line":1632},[118,171605,31292],{"class":177},[118,171607,66992],{"class":128},[15,171609,171610],{},"入门阶段大多数情况使用内置异常即可。",[60,171612,171614],{"id":171613},"_99-traceback","9.9 traceback",[15,171616,171617],{},"调试时可以输出完整异常堆栈。",[109,171619,171621],{"className":30371,"code":171620,"language":30373,"meta":39,"style":39},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[115,171622,171623,171630,171634,171640,171650,171658],{"__ignoreMap":39},[118,171624,171625,171627],{"class":120,"line":121},[118,171626,30385],{"class":124},[118,171628,171629],{"class":128}," traceback\n",[118,171631,171632],{"class":120,"line":40},[118,171633,2404],{"emptyLinePlaceholder":45},[118,171635,171636,171638],{"class":120,"line":1183},[118,171637,170875],{"class":124},[118,171639,3743],{"class":128},[118,171641,171642,171644,171646,171648],{"class":120,"line":1198},[118,171643,1989],{"class":177},[118,171645,129],{"class":128},[118,171647,155873],{"class":233},[118,171649,135],{"class":128},[118,171651,171652,171654,171656],{"class":120,"line":1204},[118,171653,170887],{"class":124},[118,171655,152219],{"class":177},[118,171657,3743],{"class":128},[118,171659,171660],{"class":120,"line":1218},[118,171661,171662],{"class":128},"    traceback.print_exc()\n",[15,171664,171665],{},"日志系统中常把异常堆栈记录到文件。",[60,171667,171669],{"id":171668},"_910-什么是模块","9.10 什么是模块",[15,171671,171672,171673,125976],{},"模块就是一个 ",[115,171674,146345],{},[15,171676,171677,171678,24623],{},"例如创建 ",[115,171679,171680],{},"my_math.py",[109,171682,171684],{"className":30371,"code":171683,"language":30373,"meta":39,"style":39},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[115,171685,171686,171694,171704,171708,171712,171721],{"__ignoreMap":39},[118,171687,171688,171690,171692],{"class":120,"line":121},[118,171689,31940],{"class":124},[118,171691,5214],{"class":1967},[118,171693,151086],{"class":128},[118,171695,171696,171698,171700,171702],{"class":120,"line":40},[118,171697,4094],{"class":124},[118,171699,10874],{"class":128},[118,171701,609],{"class":124},[118,171703,151097],{"class":128},[118,171705,171706],{"class":120,"line":1183},[118,171707,2404],{"emptyLinePlaceholder":45},[118,171709,171710],{"class":120,"line":1198},[118,171711,2404],{"emptyLinePlaceholder":45},[118,171713,171714,171716,171719],{"class":120,"line":1204},[118,171715,31940],{"class":124},[118,171717,171718],{"class":1967}," sub",[118,171720,151086],{"class":128},[118,171722,171723,171725,171727,171729],{"class":120,"line":1218},[118,171724,4094],{"class":124},[118,171726,10874],{"class":128},[118,171728,660],{"class":124},[118,171730,151097],{"class":128},[15,171732,171733],{},"在另一个文件中导入：",[109,171735,171737],{"className":30371,"code":171736,"language":30373,"meta":39,"style":39},"import my_math\n\nprint(my_math.add(1, 2))\n",[115,171738,171739,171746,171750],{"__ignoreMap":39},[118,171740,171741,171743],{"class":120,"line":121},[118,171742,30385],{"class":124},[118,171744,171745],{"class":128}," my_math\n",[118,171747,171748],{"class":120,"line":40},[118,171749,2404],{"emptyLinePlaceholder":45},[118,171751,171752,171754,171757,171759,171761,171763],{"class":120,"line":1183},[118,171753,30408],{"class":177},[118,171755,171756],{"class":128},"(my_math.add(",[118,171758,346],{"class":177},[118,171760,12440],{"class":128},[118,171762,206],{"class":177},[118,171764,30490],{"class":128},[60,171766,171768],{"id":171767},"_911-import导入","9.11 import导入",[89,171770,171772],{"id":171771},"_9111-导入模块","9.11.1 导入模块",[109,171774,171776],{"className":30371,"code":171775,"language":30373,"meta":39,"style":39},"import random\n\nprint(random.randint(1, 10))\n",[115,171777,171778,171784,171788],{"__ignoreMap":39},[118,171779,171780,171782],{"class":120,"line":121},[118,171781,30385],{"class":124},[118,171783,45321],{"class":128},[118,171785,171786],{"class":120,"line":40},[118,171787,2404],{"emptyLinePlaceholder":45},[118,171789,171790,171792,171795,171797,171799,171801],{"class":120,"line":1183},[118,171791,30408],{"class":177},[118,171793,171794],{"class":128},"(random.randint(",[118,171796,346],{"class":177},[118,171798,12440],{"class":128},[118,171800,574],{"class":177},[118,171802,30490],{"class":128},[89,171804,171806],{"id":171805},"_9112-导入指定内容","9.11.2 导入指定内容",[109,171808,171810],{"className":30371,"code":171809,"language":30373,"meta":39,"style":39},"from random import randint\n\nprint(randint(1, 10))\n",[115,171811,171812,171823,171827],{"__ignoreMap":39},[118,171813,171814,171816,171818,171820],{"class":120,"line":121},[118,171815,30730],{"class":124},[118,171817,57789],{"class":128},[118,171819,30385],{"class":124},[118,171821,171822],{"class":128}," randint\n",[118,171824,171825],{"class":120,"line":40},[118,171826,2404],{"emptyLinePlaceholder":45},[118,171828,171829,171831,171834,171836,171838,171840],{"class":120,"line":1183},[118,171830,30408],{"class":177},[118,171832,171833],{"class":128},"(randint(",[118,171835,346],{"class":177},[118,171837,12440],{"class":128},[118,171839,574],{"class":177},[118,171841,30490],{"class":128},[89,171843,171845],{"id":171844},"_9113-起别名","9.11.3 起别名",[109,171847,171849],{"className":30371,"code":171848,"language":30373,"meta":39,"style":39},"import random as rd\n\nprint(rd.randint(1, 10))\n",[115,171850,171851,171862,171866],{"__ignoreMap":39},[118,171852,171853,171855,171857,171859],{"class":120,"line":121},[118,171854,30385],{"class":124},[118,171856,57789],{"class":128},[118,171858,31376],{"class":124},[118,171860,171861],{"class":128}," rd\n",[118,171863,171864],{"class":120,"line":40},[118,171865,2404],{"emptyLinePlaceholder":45},[118,171867,171868,171870,171873,171875,171877,171879],{"class":120,"line":1183},[118,171869,30408],{"class":177},[118,171871,171872],{"class":128},"(rd.randint(",[118,171874,346],{"class":177},[118,171876,12440],{"class":128},[118,171878,574],{"class":177},[118,171880,30490],{"class":128},[109,171882,171884],{"className":30371,"code":171883,"language":30373,"meta":39,"style":39},"from random import randint as rint\n\nprint(rint(1, 10))\n",[115,171885,171886,171902,171906],{"__ignoreMap":39},[118,171887,171888,171890,171892,171894,171897,171899],{"class":120,"line":121},[118,171889,30730],{"class":124},[118,171891,57789],{"class":128},[118,171893,30385],{"class":124},[118,171895,171896],{"class":128}," randint ",[118,171898,31376],{"class":124},[118,171900,171901],{"class":128}," rint\n",[118,171903,171904],{"class":120,"line":40},[118,171905,2404],{"emptyLinePlaceholder":45},[118,171907,171908,171910,171913,171915,171917,171919],{"class":120,"line":1183},[118,171909,30408],{"class":177},[118,171911,171912],{"class":128},"(rint(",[118,171914,346],{"class":177},[118,171916,12440],{"class":128},[118,171918,574],{"class":177},[118,171920,30490],{"class":128},[89,171922,171924],{"id":171923},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[109,171926,171928],{"className":30371,"code":171927,"language":30373,"meta":39,"style":39},"from random import *\n",[115,171929,171930],{"__ignoreMap":39},[118,171931,171932,171934,171936,171938],{"class":120,"line":121},[118,171933,30730],{"class":124},[118,171935,57789],{"class":128},[118,171937,30385],{"class":124},[118,171939,171940],{"class":124}," *\n",[15,171942,171943],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[60,171945,171947],{"id":171946},"_912-常用内置模块","9.12 常用内置模块",[89,171949,171951],{"id":171950},"_9121-random","9.12.1 random",[109,171953,171955],{"className":30371,"code":171954,"language":30373,"meta":39,"style":39},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[115,171956,171957,171963,171967,171981,172000],{"__ignoreMap":39},[118,171958,171959,171961],{"class":120,"line":121},[118,171960,30385],{"class":124},[118,171962,45321],{"class":128},[118,171964,171965],{"class":120,"line":40},[118,171966,2404],{"emptyLinePlaceholder":45},[118,171968,171969,171971,171973,171975,171977,171979],{"class":120,"line":1183},[118,171970,30408],{"class":177},[118,171972,171794],{"class":128},[118,171974,346],{"class":177},[118,171976,12440],{"class":128},[118,171978,574],{"class":177},[118,171980,30490],{"class":128},[118,171982,171983,171985,171988,171990,171992,171994,171996,171998],{"class":120,"line":1198},[118,171984,30408],{"class":177},[118,171986,171987],{"class":128},"(random.choice([",[118,171989,149881],{"class":233},[118,171991,12440],{"class":128},[118,171993,150929],{"class":233},[118,171995,12440],{"class":128},[118,171997,159724],{"class":233},[118,171999,33136],{"class":128},[118,172001,172002,172004,172007,172009,172011,172013,172015,172017,172019,172021,172023,172025,172027,172029],{"class":120,"line":1204},[118,172003,30408],{"class":177},[118,172005,172006],{"class":128},"(random.sample([",[118,172008,346],{"class":177},[118,172010,12440],{"class":128},[118,172012,206],{"class":177},[118,172014,12440],{"class":128},[118,172016,200],{"class":177},[118,172018,12440],{"class":128},[118,172020,421],{"class":177},[118,172022,12440],{"class":128},[118,172024,447],{"class":177},[118,172026,112195],{"class":128},[118,172028,206],{"class":177},[118,172030,30490],{"class":128},[89,172032,172034],{"id":172033},"_9122-time","9.12.2 time",[109,172036,172038],{"className":30371,"code":172037,"language":30373,"meta":39,"style":39},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[115,172039,172040,172046,172050,172057,172065],{"__ignoreMap":39},[118,172041,172042,172044],{"class":120,"line":121},[118,172043,30385],{"class":124},[118,172045,31822],{"class":128},[118,172047,172048],{"class":120,"line":40},[118,172049,2404],{"emptyLinePlaceholder":45},[118,172051,172052,172054],{"class":120,"line":1183},[118,172053,30408],{"class":177},[118,172055,172056],{"class":128},"(time.time())\n",[118,172058,172059,172061,172063],{"class":120,"line":1198},[118,172060,95064],{"class":128},[118,172062,346],{"class":177},[118,172064,135],{"class":128},[118,172066,172067,172069,172071,172074],{"class":120,"line":1204},[118,172068,30408],{"class":177},[118,172070,129],{"class":128},[118,172072,172073],{"class":233},"\"1秒后执行\"",[118,172075,135],{"class":128},[89,172077,172079],{"id":172078},"_9123-datetime","9.12.3 datetime",[109,172081,172083],{"className":30371,"code":172082,"language":30373,"meta":39,"style":39},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[115,172084,172085,172097,172101,172111,172118],{"__ignoreMap":39},[118,172086,172087,172089,172092,172094],{"class":120,"line":121},[118,172088,30730],{"class":124},[118,172090,172091],{"class":128}," datetime ",[118,172093,30385],{"class":124},[118,172095,172096],{"class":128}," datetime\n",[118,172098,172099],{"class":120,"line":40},[118,172100,2404],{"emptyLinePlaceholder":45},[118,172102,172103,172106,172108],{"class":120,"line":1183},[118,172104,172105],{"class":128},"now ",[118,172107,174],{"class":124},[118,172109,172110],{"class":128}," datetime.now()\n",[118,172112,172113,172115],{"class":120,"line":1198},[118,172114,30408],{"class":177},[118,172116,172117],{"class":128},"(now)\n",[118,172119,172120,172122,172125,172128,172130,172133],{"class":120,"line":1204},[118,172121,30408],{"class":177},[118,172123,172124],{"class":128},"(now.strftime(",[118,172126,172127],{"class":233},"\"%Y-%m-",[118,172129,156684],{"class":177},[118,172131,172132],{"class":233}," %H:%M:%S\"",[118,172134,30490],{"class":128},[89,172136,172138],{"id":172137},"_9124-os","9.12.4 os",[109,172140,172142],{"className":30371,"code":172141,"language":30373,"meta":39,"style":39},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[115,172143,172144,172150,172154,172161],{"__ignoreMap":39},[118,172145,172146,172148],{"class":120,"line":121},[118,172147,30385],{"class":124},[118,172149,45298],{"class":128},[118,172151,172152],{"class":120,"line":40},[118,172153,2404],{"emptyLinePlaceholder":45},[118,172155,172156,172158],{"class":120,"line":1183},[118,172157,30408],{"class":177},[118,172159,172160],{"class":128},"(os.getcwd())\n",[118,172162,172163,172165,172168,172171],{"class":120,"line":1198},[118,172164,30408],{"class":177},[118,172166,172167],{"class":128},"(os.listdir(",[118,172169,172170],{"class":233},"\".\"",[118,172172,30490],{"class":128},[89,172174,172176],{"id":172175},"_9125-sys","9.12.5 sys",[109,172178,172180],{"className":30371,"code":172179,"language":30373,"meta":39,"style":39},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[115,172181,172182,172189,172193,172200],{"__ignoreMap":39},[118,172183,172184,172186],{"class":120,"line":121},[118,172185,30385],{"class":124},[118,172187,172188],{"class":128}," sys\n",[118,172190,172191],{"class":120,"line":40},[118,172192,2404],{"emptyLinePlaceholder":45},[118,172194,172195,172197],{"class":120,"line":1183},[118,172196,30408],{"class":177},[118,172198,172199],{"class":128},"(sys.version)\n",[118,172201,172202,172204],{"class":120,"line":1198},[118,172203,30408],{"class":177},[118,172205,172206],{"class":128},"(sys.path)\n",[60,172208,172210,172211,172213,172214,379],{"id":172209},"_913-if-name-main","9.13 if ",[278,172212,79803],{}," == \"",[278,172215,102051],{},[15,172217,172218,172219,172222],{},"模块被直接运行和被导入时，",[115,172220,172221],{},"__name__"," 的值不同。",[15,172224,172225,172226,24623],{},"创建 ",[115,172227,172228],{},"my_module.py",[109,172230,172232],{"className":30371,"code":172231,"language":30373,"meta":39,"style":39},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[115,172233,172234,172242,172252,172256,172260,172272],{"__ignoreMap":39},[118,172235,172236,172238,172240],{"class":120,"line":121},[118,172237,31940],{"class":124},[118,172239,5214],{"class":1967},[118,172241,151086],{"class":128},[118,172243,172244,172246,172248,172250],{"class":120,"line":40},[118,172245,4094],{"class":124},[118,172247,10874],{"class":128},[118,172249,609],{"class":124},[118,172251,151097],{"class":128},[118,172253,172254],{"class":120,"line":1183},[118,172255,2404],{"emptyLinePlaceholder":45},[118,172257,172258],{"class":120,"line":1198},[118,172259,2404],{"emptyLinePlaceholder":45},[118,172261,172262,172264,172266,172268,172270],{"class":120,"line":1204},[118,172263,1535],{"class":124},[118,172265,31213],{"class":177},[118,172267,101552],{"class":124},[118,172269,101555],{"class":233},[118,172271,3743],{"class":128},[118,172273,172274,172276,172278,172280,172282,172284],{"class":120,"line":1218},[118,172275,31292],{"class":177},[118,172277,166593],{"class":128},[118,172279,346],{"class":177},[118,172281,12440],{"class":128},[118,172283,206],{"class":177},[118,172285,30490],{"class":128},[15,172287,172288],{},"作用：",[72,172290,172291,172294],{},[75,172292,172293],{},"直接运行该文件时，执行测试代码。",[75,172295,172296],{},"被其他文件导入时，不执行测试代码。",[15,172298,172299],{},"这是写模块时很常用的习惯。",[60,172301,172303],{"id":172302},"_914-包","9.14 包",[15,172305,172306,172307,172310],{},"包是包含 ",[115,172308,172309],{},"__init__.py"," 的目录，用于组织多个模块。",[15,172312,172313],{},"目录结构：",[109,172315,172318],{"className":172316,"code":172317,"language":5192,"meta":39},[5190],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[115,172319,172317],{"__ignoreMap":39},[15,172321,172322],{},"导入：",[109,172324,172326],{"className":30371,"code":172325,"language":30373,"meta":39,"style":39},"from utils.file_utils import read_file\n",[115,172327,172328],{"__ignoreMap":39},[118,172329,172330,172332,172335,172337],{"class":120,"line":121},[118,172331,30730],{"class":124},[118,172333,172334],{"class":128}," utils.file_utils ",[118,172336,30385],{"class":124},[118,172338,172339],{"class":128}," read_file\n",[15,172341,172342,172344],{},[115,172343,172309],{}," 可以为空，也可以写包初始化逻辑。",[60,172346,172348],{"id":172347},"_915-第三方包","9.15 第三方包",[15,172350,172351,172352,172354],{},"第三方包通过 ",[115,172353,23836],{}," 安装。",[109,172356,172358],{"className":23827,"code":172357,"language":23829,"meta":39,"style":39},"pip install requests\n",[115,172359,172360],{"__ignoreMap":39},[118,172361,172362,172364,172366],{"class":120,"line":121},[118,172363,23836],{"class":1967},[118,172365,23839],{"class":233},[118,172367,146091],{"class":233},[15,172369,172370],{},"使用：",[109,172372,172374],{"className":30371,"code":172373,"language":30373,"meta":39,"style":39},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[115,172375,172376,172382,172386,172401],{"__ignoreMap":39},[118,172377,172378,172380],{"class":120,"line":121},[118,172379,30385],{"class":124},[118,172381,146091],{"class":128},[118,172383,172384],{"class":120,"line":40},[118,172385,2404],{"emptyLinePlaceholder":45},[118,172387,172388,172391,172393,172396,172399],{"class":120,"line":1183},[118,172389,172390],{"class":128},"response ",[118,172392,174],{"class":124},[118,172394,172395],{"class":128}," requests.get(",[118,172397,172398],{"class":233},"\"https:\u002F\u002Fwww.example.com\"",[118,172400,135],{"class":128},[118,172402,172403,172405],{"class":120,"line":1198},[118,172404,30408],{"class":177},[118,172406,172407],{"class":128},"(response.status_code)\n",[15,172409,172410],{},"查看已安装包：",[109,172412,172414],{"className":23827,"code":172413,"language":23829,"meta":39,"style":39},"pip list\n",[115,172415,172416],{"__ignoreMap":39},[118,172417,172418,172420],{"class":120,"line":121},[118,172419,23836],{"class":1967},[118,172421,118948],{"class":233},[15,172423,172424],{},"导出项目依赖：",[109,172426,172427],{"className":23827,"code":146286,"language":23829,"meta":39,"style":39},[115,172428,172429],{"__ignoreMap":39},[118,172430,172431,172433,172435,172437],{"class":120,"line":121},[118,172432,23836],{"class":1967},[118,172434,146295],{"class":233},[118,172436,26215],{"class":124},[118,172438,146300],{"class":233},[15,172440,172441],{},"安装项目依赖：",[109,172443,172444],{"className":23827,"code":146306,"language":23829,"meta":39,"style":39},[115,172445,172446],{"__ignoreMap":39},[118,172447,172448,172450,172452,172454],{"class":120,"line":121},[118,172449,23836],{"class":1967},[118,172451,23839],{"class":233},[118,172453,119632],{"class":177},[118,172455,146300],{"class":233},[60,172457,172459],{"id":172458},"_916-模块搜索路径","9.16 模块搜索路径",[15,172461,172462,172463,172466],{},"Python 导入模块时会在 ",[115,172464,172465],{},"sys.path"," 中查找。",[109,172468,172470],{"className":30371,"code":172469,"language":30373,"meta":39,"style":39},"import sys\n\nfor path in sys.path:\n    print(path)\n",[115,172471,172472,172478,172482,172494],{"__ignoreMap":39},[118,172473,172474,172476],{"class":120,"line":121},[118,172475,30385],{"class":124},[118,172477,172188],{"class":128},[118,172479,172480],{"class":120,"line":40},[118,172481,2404],{"emptyLinePlaceholder":45},[118,172483,172484,172486,172489,172491],{"class":120,"line":1183},[118,172485,3029],{"class":124},[118,172487,172488],{"class":128}," path ",[118,172490,26036],{"class":124},[118,172492,172493],{"class":128}," sys.path:\n",[118,172495,172496,172498],{"class":120,"line":1198},[118,172497,31292],{"class":177},[118,172499,169222],{"class":128},[15,172501,172502],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[15,172504,157616],{},[109,172506,172509],{"className":172507,"code":172508,"language":5192,"meta":39},[5190],"random.py\njson.py\ntime.py\n",[115,172510,172508],{"__ignoreMap":39},[15,172512,172513],{},"这些文件名可能导致导入异常。",[60,172515,172517],{"id":172516},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[15,172519,172313],{},[109,172521,172524],{"className":172522,"code":172523,"language":5192,"meta":39},[5190],"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",[115,172525,172523],{"__ignoreMap":39},[15,172527,172528,24623],{},[115,172529,172530],{},"utils\u002Ffile_utils.py",[109,172532,172534],{"className":30371,"code":172533,"language":30373,"meta":39,"style":39},"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",[115,172535,172536,172542,172552,172556,172560,172570,172580,172588,172594,172598,172625,172635,172639,172643,172653,172679],{"__ignoreMap":39},[118,172537,172538,172540],{"class":120,"line":121},[118,172539,30385],{"class":124},[118,172541,147084],{"class":128},[118,172543,172544,172546,172548,172550],{"class":120,"line":40},[118,172545,30730],{"class":124},[118,172547,108304],{"class":128},[118,172549,30385],{"class":124},[118,172551,108309],{"class":128},[118,172553,172554],{"class":120,"line":1183},[118,172555,2404],{"emptyLinePlaceholder":45},[118,172557,172558],{"class":120,"line":1198},[118,172559,2404],{"emptyLinePlaceholder":45},[118,172561,172562,172564,172567],{"class":120,"line":1204},[118,172563,31940],{"class":124},[118,172565,172566],{"class":1967}," read_json",[118,172568,172569],{"class":128},"(path):\n",[118,172571,172572,172575,172577],{"class":120,"line":1218},[118,172573,172574],{"class":128},"    path ",[118,172576,174],{"class":124},[118,172578,172579],{"class":128}," Path(path)\n",[118,172581,172582,172584,172586],{"class":120,"line":1224},[118,172583,3105],{"class":124},[118,172585,38923],{"class":124},[118,172587,169303],{"class":128},[118,172589,172590,172592],{"class":120,"line":1315},[118,172591,14757],{"class":124},[118,172593,51831],{"class":128},[118,172595,172596],{"class":120,"line":1321},[118,172597,2404],{"emptyLinePlaceholder":45},[118,172599,172600,172602,172604,172607,172609,172611,172613,172615,172617,172619,172621,172623],{"class":120,"line":1333},[118,172601,34171],{"class":124},[118,172603,146784],{"class":177},[118,172605,172606],{"class":128},"(path, ",[118,172608,146794],{"class":233},[118,172610,12440],{"class":128},[118,172612,146799],{"class":5221},[118,172614,174],{"class":124},[118,172616,146804],{"class":233},[118,172618,13719],{"class":128},[118,172620,31376],{"class":124},[118,172622,148146],{"class":5221},[118,172624,3743],{"class":128},[118,172626,172627,172629,172631,172633],{"class":120,"line":1616},[118,172628,14757],{"class":124},[118,172630,148157],{"class":128},[118,172632,45347],{"class":5221},[118,172634,135],{"class":128},[118,172636,172637],{"class":120,"line":1621},[118,172638,2404],{"emptyLinePlaceholder":45},[118,172640,172641],{"class":120,"line":1627},[118,172642,2404],{"emptyLinePlaceholder":45},[118,172644,172645,172647,172650],{"class":120,"line":1632},[118,172646,31940],{"class":124},[118,172648,172649],{"class":1967}," write_json",[118,172651,172652],{"class":128},"(path, data):\n",[118,172654,172655,172657,172659,172661,172663,172665,172667,172669,172671,172673,172675,172677],{"class":120,"line":1646},[118,172656,34171],{"class":124},[118,172658,146784],{"class":177},[118,172660,172606],{"class":128},[118,172662,151969],{"class":233},[118,172664,12440],{"class":128},[118,172666,146799],{"class":5221},[118,172668,174],{"class":124},[118,172670,146804],{"class":233},[118,172672,13719],{"class":128},[118,172674,31376],{"class":124},[118,172676,148146],{"class":5221},[118,172678,3743],{"class":128},[118,172680,172681,172684,172686,172688,172690,172692,172694,172696,172698,172700,172702],{"class":120,"line":1651},[118,172682,172683],{"class":128},"        json.dump(data, ",[118,172685,45347],{"class":5221},[118,172687,12440],{"class":128},[118,172689,147130],{"class":5221},[118,172691,174],{"class":124},[118,172693,33980],{"class":177},[118,172695,12440],{"class":128},[118,172697,152005],{"class":5221},[118,172699,174],{"class":124},[118,172701,206],{"class":177},[118,172703,135],{"class":128},[15,172705,172706,24623],{},[115,172707,154600],{},[109,172709,172711],{"className":30371,"code":172710,"language":30373,"meta":39,"style":39},"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",[115,172712,172713,172724,172728,172741,172761],{"__ignoreMap":39},[118,172714,172715,172717,172719,172721],{"class":120,"line":121},[118,172716,30730],{"class":124},[118,172718,172334],{"class":128},[118,172720,30385],{"class":124},[118,172722,172723],{"class":128}," read_json, write_json\n",[118,172725,172726],{"class":120,"line":40},[118,172727,2404],{"emptyLinePlaceholder":45},[118,172729,172730,172732,172734,172737,172739],{"class":120,"line":1183},[118,172731,159709],{"class":128},[118,172733,174],{"class":124},[118,172735,172736],{"class":128}," read_json(",[118,172738,151824],{"class":233},[118,172740,135],{"class":128},[118,172742,172743,172745,172747,172749,172751,172753,172755,172757,172759],{"class":120,"line":1198},[118,172744,170527],{"class":128},[118,172746,62672],{"class":233},[118,172748,51430],{"class":128},[118,172750,149881],{"class":233},[118,172752,12440],{"class":128},[118,172754,151465],{"class":233},[118,172756,51430],{"class":128},[118,172758,1117],{"class":177},[118,172760,165145],{"class":128},[118,172762,172763,172766,172768],{"class":120,"line":1204},[118,172764,172765],{"class":128},"write_json(",[118,172767,151824],{"class":233},[118,172769,172770],{"class":128},", students)\n",[60,172772,172774],{"id":172773},"_918-易错点","9.18 易错点",[72,172776,172777,172780,172785,172790,172793,172796],{},[75,172778,172779],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[75,172781,172782,172783,28378],{},"能指定异常类型就不要裸写 ",[115,172784,170887],{},[75,172786,172787,172789],{},[115,172788,171262],{}," 无论是否出错都会执行。",[75,172791,172792],{},"模块文件名不要和标准库重名。",[75,172794,172795],{},"导入自己写的模块时，要注意运行目录。",[75,172797,172798],{},"第三方包要安装到当前解释器或虚拟环境中。",[60,172800,172802],{"id":172801},"_919-本章练习","9.19 本章练习",[72,172804,172805,172808,172811,172817,172824],{},[75,172806,172807],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[75,172809,172810],{},"写函数读取文件，如果文件不存在则返回空字符串。",[75,172812,172225,172813,172816],{},[115,172814,172815],{},"math_utils.py","，实现加减乘除函数并导入使用。",[75,172818,172819,172820,172823],{},"创建一个 ",[115,172821,172822],{},"utils"," 包，把 JSON 读写函数放进去。",[75,172825,172826],{},"写一个程序，捕获除零异常和输入格式异常。",[5131,172828,172829],{},"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":39,"searchDepth":40,"depth":40,"links":172831},[172832,172833,172834,172835,172836,172837,172838,172839,172840,172841,172842,172848,172855,172857,172858,172859,172860,172861,172862],{"id":170684,"depth":40,"text":170685},{"id":170812,"depth":40,"text":170813},{"id":170861,"depth":40,"text":170862},{"id":171010,"depth":40,"text":171011},{"id":171182,"depth":40,"text":171183},{"id":171251,"depth":40,"text":171252},{"id":171362,"depth":40,"text":171363},{"id":171488,"depth":40,"text":171489},{"id":171613,"depth":40,"text":171614},{"id":171668,"depth":40,"text":171669},{"id":171767,"depth":40,"text":171768,"children":172843},[172844,172845,172846,172847],{"id":171771,"depth":1183,"text":171772},{"id":171805,"depth":1183,"text":171806},{"id":171844,"depth":1183,"text":171845},{"id":171923,"depth":1183,"text":171924},{"id":171946,"depth":40,"text":171947,"children":172849},[172850,172851,172852,172853,172854],{"id":171950,"depth":1183,"text":171951},{"id":172033,"depth":1183,"text":172034},{"id":172078,"depth":1183,"text":172079},{"id":172137,"depth":1183,"text":172138},{"id":172175,"depth":1183,"text":172176},{"id":172209,"depth":40,"text":172856},"9.13 if name == \"main\"",{"id":172302,"depth":40,"text":172303},{"id":172347,"depth":40,"text":172348},{"id":172458,"depth":40,"text":172459},{"id":172516,"depth":40,"text":172517},{"id":172773,"depth":40,"text":172774},{"id":172801,"depth":40,"text":172802},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170676,"description":42},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172869,"title":172870,"body":172871,"description":173034,"extension":43,"meta":173035,"navigation":45,"path":173036,"seo":173037,"stem":173038,"__hash__":173039},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172872,"toc":173029},[172873,172876,172879,172882,172893,172895,172969,172972,172975,172978,172981,172984,172987,172990,172993,172996,172999],[10,172874,172870],{"id":172875},"python教程",[15,172877,172878],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[15,172880,172881],{},"建议学习环境：",[72,172883,172884,172887,172890],{},[75,172885,172886],{},"Python 版本：Python 3.10 及以上。",[75,172888,172889],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[75,172891,172892],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[60,172894,117071],{"id":117071},[72,172896,172897,172903,172909,172915,172921,172927,172933,172939,172945,172951,172957,172963],{},[75,172898,172899],{},[21,172900,172902],{"href":172901},".\u002Fch1-Python","Python环境与第一个程序",[75,172904,172905],{},[21,172906,172908],{"href":172907},".\u002Fch2","基础语法、变量与字符串",[75,172910,172911],{},[21,172912,172914],{"href":172913},".\u002Fch3","判断语句",[75,172916,172917],{},[21,172918,172920],{"href":172919},".\u002Fch4","循环语句",[75,172922,172923],{},[21,172924,172926],{"href":172925},".\u002Fch5","函数基础",[75,172928,172929],{},[21,172930,172932],{"href":172931},".\u002Fch6","数据容器",[75,172934,172935],{},[21,172936,172938],{"href":172937},".\u002Fch7","函数进阶",[75,172940,172941],{},[21,172942,172944],{"href":172943},".\u002Fch8","文件操作",[75,172946,172947],{},[21,172948,172950],{"href":172949},".\u002Fch9","异常、模块与包",[75,172952,172953],{},[21,172954,172956],{"href":172955},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[75,172958,172959],{},[21,172960,172962],{"href":172961},".\u002Fch11","面向对象基础",[75,172964,172965],{},[21,172966,172968],{"href":172967},".\u002Fch12","综合案例与复习路线",[60,172970,172971],{"id":172971},"学习路线",[15,172973,172974],{},"第一阶段：能运行程序。",[15,172976,172977],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[15,172979,172980],{},"第二阶段：能组织数据。",[15,172982,172983],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[15,172985,172986],{},"第三阶段：能封装逻辑。",[15,172988,172989],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[15,172991,172992],{},"第四阶段：能做小项目。",[15,172994,172995],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[60,172997,172998],{"id":172998},"参考资料",[72,173000,173001,173008,173015,173022],{},[75,173002,173003,173004],{},"黑马程序员 Python 入门教程推荐：",[21,173005,173006],{"href":173006,"rel":173007},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25],[75,173009,173010,173011],{},"Python 官方中文教程：",[21,173012,173013],{"href":173013,"rel":173014},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25],[75,173016,173017,173018],{},"Python 标准库文档：",[21,173019,173020],{"href":173020,"rel":173021},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25],[75,173023,173024,173025],{},"pyecharts 文档：",[21,173026,173027],{"href":173027,"rel":173028},"https:\u002F\u002Fpyecharts.org\u002F",[25],{"title":39,"searchDepth":40,"depth":40,"links":173030},[173031,173032,173033],{"id":117071,"depth":40,"text":117071},{"id":172971,"depth":40,"text":172971},{"id":172998,"depth":40,"text":172998},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23383},"\u002Fwiki\u002F2024-10-10-python",{"title":172870,"description":173034},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398909]